4 * Ajatus - Distributed CRM
5 * @requires jQuery v1.2.1
7 * Copyright (c) 2007 Jerry Jalava <jerry.jalava@gmail.com>
8 * Copyright (c) 2007 Nemein Oy <http://nemein.com>
9 * Website: http://ajatus.info
10 * Licensed under the GPL license
11 * http://www.gnu.org/licenses/gpl.html
16 $.ajatus = $.ajatus || {};
17 $.ajatus.widgets = $.ajatus.widgets || {};
19 $.ajatus.widgets.core = {
31 $.ajatus.widgets.loaded_widgets = [];
33 $.ajatus.widget = function(widget, config)
35 if (typeof($.ajatus.widgets[widget]) == 'undefined') {
36 $.ajatus.debug("widget '"+widget+"' not installed! Using text widget");
37 wdgt = $.ajatus.utils.object.clone($.ajatus.widgets.text);
39 wdgt = $.ajatus.utils.object.clone($.ajatus.widgets[widget]);
42 if (typeof wdgt == 'undefined') {
43 throw("FATAL: Couldn't init widget "+widget);
46 if (typeof config != 'undefined') {
47 wdgt.set_config(config);
50 if (typeof wdgt['required'] == 'undefined') {
51 wdgt.required = false;
53 if (typeof wdgt['validate'] == 'undefined') {
54 wdgt.validate = function(name, value) {
55 if ( wdgt.required === true
59 msg: $.ajatus.i10n.get("Field %s is required", [name])
70 $.ajatus.widgets.widget_loaded = function(wdgt, try_count) {
71 if (typeof try_count == 'undefined') {
75 $.ajatus.widgets[wdgt] = $.ajatus.widgets.core[wdgt];
77 if (typeof $.ajatus.widgets[wdgt] != 'undefined') {
78 $.ajatus.widgets[wdgt].loaded();
79 $.ajatus.widgets.loaded_widgets.push(wdgt);
83 setTimeout("$.ajatus.widgets.widget_loaded('"+wdgt+"', "+try_count+");", 200);
87 $.ajatus.events.lock_pool.decrease();
90 $.ajatus.widgets.custom_widget_loaded = function(wdgt, try_count) {
91 if (typeof try_count == 'undefined') {
95 $.ajatus.widgets[wdgt] = $.ajatus.widgets.custom[wdgt];
97 if (typeof $.ajatus.widgets[wdgt] != 'undefined') {
98 $.ajatus.widgets[wdgt].loaded();
99 $.ajatus.widgets.loaded_widgets.push(wdgt);
103 setTimeout("$.ajatus.widgets.widget_loaded('"+wdgt+"', "+try_count+");", 200);
107 $.ajatus.events.lock_pool.decrease();
110 $.ajatus.widgets.init = function()
112 $.ajatus.widgets.loaded_widgets = new Array();
114 if ($.browser.safari) {
115 $.ajatus.widgets.core.available = $.ajatus.widgets.core.available.reverse();
118 $.each($.ajatus.widgets.core.available, function(i,cw){
123 var widget_url = $.ajatus.preferences.client.application_url + 'js/widgets/'+cw+'.js';
125 $.ajatus.events.lock_pool.increase();
127 $.ajatus.utils.load_script(widget_url, "$.ajatus.widgets.widget_loaded", [cw]);
130 // console.log("Loaded widgets:");
131 // console.log($.ajatus.widgets.loaded_widgets);
133 if ($.ajatus.preferences.client.custom_widgets.length > 0)
135 $.each($.ajatus.preferences.client.custom_widgets, function(i,cw){
140 var widget_url = $.ajatus.preferences.client.application_url + 'js/widgets/custom/'+cw+'.js';
142 $.ajatus.events.lock_pool.increase();
144 $.ajatus.utils.load_script(widget_url, "$.ajatus.widgets.custom_widget_loaded", [cw]);
149 $.ajatus.widgets.to_readonly = function(view_type, name, default_value, widget) {
152 if (typeof widget['get_readonly_tpl'] == 'function') {
153 tpl = widget.get_readonly_tpl(view_type, name, default_value);
156 'input', { type: 'hidden', name: 'widget['+name+':name]', value: widget.name }, '',
157 'input', { type: 'hidden', name: 'widget['+name+':config]', value: $.ajatus.converter.toJSON(widget.settings) }, '',
158 'input', { type: 'hidden', name: name, value: default_value }, '',
159 'span', { className: 'value_prefix' }, $.ajatus.i10n.get(widget.settings.value_prefix),
160 'span', { name: name }, default_value.toString(),
161 'span', { className: 'value_suffix' }, $.ajatus.i10n.get(widget.settings.value_suffix)
168 $.ajatus.widgets.generate_settings_form = function(wdgt_sett, curr_sett)
170 var settings = $.extend({}, wdgt_sett, curr_sett);
171 var holder = $('<div class="settings_holder"/>');
172 var rows = $('<ul/>');
174 $.each(settings, function(i,s){
175 // console.log("i: "+i+" s: ");
177 var s_type = typeof(s);
178 // console.log('type: '+s_type);
180 var normalized_name = i.toString().replace('_', ' ');
184 wdgt = $.ajatus.widget('boolean');
187 wdgt = $.ajatus.widget('integer');
191 wdgt = $.ajatus.widget('text');
195 'li', { id: '_setting_'+i, className: 'row' }, [
196 'label', { id: '_setting_'+i+'_label' }, $.ajatus.i10n.get(normalized_name),
197 'div', { id: '_setting_'+i+'_widget', className: wdgt.name }, wdgt.get_create_tpl(i, s),
198 'br', { className: 'clear_fix' }, ''
201 wdgt.init($('#_setting_'+i+'_widget',rows), true);
203 rows.appendTo(holder);
205 $('li:first', rows).addClass('first');
206 $('li:last', rows).addClass('last');
211 $.ajatus.widgets.generate_default_details = function(widget, data)
213 var holder = $('<div class="widget_details" />');
215 var saved_settings = $('<div class="saved_settings" />');
216 saved_settings.appendTo(holder);
218 $.each(widget.settings, function(k,val){
219 var field = $('<input type="hidden" />').attr({
221 value: $.ajatus.converter.toJSON(val)
223 field.appendTo(saved_settings);
226 var actions = $('<div class="actions" />');
227 var pref_btn = $('<div class="widget_settings_btn"><img src="' + $.ajatus.preferences.client.theme_icons_url + 'preferences.png" alt="' + $.ajatus.i10n.get('Settings') + '" /></div>');
228 pref_btn.appendTo(actions);
229 pref_btn.bind('click', function(){
231 var saved_inputs = $('input', saved_settings);
232 if (saved_inputs.length > 0) {
233 $.each(saved_inputs, function(i,n){
234 var key = n.name.split(";")[1];
235 prev_vals[key] = $.ajatus.converter.parseJSON(n.value);
238 $.ajatus.document.additionals.config(widget, prev_vals);
241 actions.appendTo(holder);
245 title: $.ajatus.i10n.get('name'),
249 title: $.ajatus.i10n.get('label'),
253 title: $.ajatus.i10n.get('default value'),
257 title: $.ajatus.i10n.get('required'),
262 var fields = $('<ul class="fields_holder" />');
264 $.each(field_names, function(fn,fd){
268 wdgt = $.ajatus.widget('boolean');
271 wdgt = $.ajatus.widget('integer');
275 wdgt = $.ajatus.widget('text');
281 if ( typeof data.val != 'undefined'
284 def_val.val = data.val;
288 'li', { id: '_field_'+fn, className: 'row' }, [
289 'label', { id: '_field_'+fn+'_label' }, fd.title,
290 'div', { id: '_field_'+fn+'_widget', className: wdgt.name }, wdgt.get_create_tpl(fn, ''),
291 'br', { className: 'clear_fix' }, ''
294 wdgt.init($('#_field_'+fn+'_widget',fields), true);
297 fields.appendTo(holder);
302 $.ajatus.widgets.generate_default_settings = function(widget, data)
304 var holder = $('<div class="widget_settings" />');
307 if (typeof(data) == 'object') {
311 var settings = $.ajatus.widgets.generate_settings_form(widget.settings, ext_sett);
313 settings.appendTo(holder);