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])
67 if (typeof wdgt['has_data_changed'] == 'undefined') {
68 wdgt.has_data_changed = function(value, prev_value) {
69 if ($.ajatus.utils.md5.encode(value) != $.ajatus.utils.md5.encode(prev_value)) {
79 $.ajatus.widgets.widget_loaded = function(wdgt, try_count) {
80 if (typeof try_count == 'undefined') {
84 $.ajatus.widgets[wdgt] = $.ajatus.widgets.core[wdgt];
86 if (typeof $.ajatus.widgets[wdgt] != 'undefined') {
87 $.ajatus.widgets[wdgt].loaded();
88 $.ajatus.widgets.loaded_widgets.push(wdgt);
90 $.ajatus.events.lock_pool.decrease();
94 setTimeout("$.ajatus.widgets.widget_loaded('"+wdgt+"', "+try_count+");", 200);
99 $.ajatus.widgets.custom_widget_loaded = function(wdgt, try_count) {
100 if (typeof try_count == 'undefined') {
104 $.ajatus.widgets[wdgt] = $.ajatus.widgets.custom[wdgt];
106 if (typeof $.ajatus.widgets[wdgt] != 'undefined') {
107 $.ajatus.widgets[wdgt].loaded();
108 $.ajatus.widgets.loaded_widgets.push(wdgt);
112 setTimeout("$.ajatus.widgets.widget_loaded('"+wdgt+"', "+try_count+");", 200);
116 $.ajatus.events.lock_pool.decrease();
119 $.ajatus.widgets.init = function()
121 $.ajatus.widgets.loaded_widgets = new Array();
123 if ($.browser.safari) {
124 $.ajatus.widgets.core.available = $.ajatus.widgets.core.available.reverse();
127 $.each($.ajatus.widgets.core.available, function(i,cw){
129 || typeof $.ajatus.widgets[cw] != 'undefined')
134 var widget_url = $.ajatus.preferences.client.application_url + 'js/widgets/'+cw+'.js';
136 $.ajatus.events.lock_pool.increase();
138 $.ajatus.utils.load_script(widget_url, "$.ajatus.widgets.widget_loaded", [cw]);
141 // console.log("Loaded widgets:");
142 // console.log($.ajatus.widgets.loaded_widgets);
144 if ($.ajatus.preferences.client.custom_widgets.length > 0)
146 $.each($.ajatus.preferences.client.custom_widgets, function(i,cw){
148 || typeof $.ajatus.widgets[cw] != 'undefined')
153 var widget_url = $.ajatus.preferences.client.application_url + 'js/widgets/custom/'+cw+'.js';
155 $.ajatus.events.lock_pool.increase();
157 $.ajatus.utils.load_script(widget_url, "$.ajatus.widgets.custom_widget_loaded", [cw]);
162 $.ajatus.widgets.to_readonly = function(view_type, name, default_value, widget) {
165 if (typeof widget['get_readonly_tpl'] == 'function') {
166 tpl = widget.get_readonly_tpl(view_type, name, default_value);
169 'input', { type: 'hidden', name: 'widget['+name+':name]', value: widget.name }, '',
170 'input', { type: 'hidden', name: 'widget['+name+':config]', value: $.ajatus.converter.toJSON(widget.settings) }, '',
171 'input', { type: 'hidden', name: 'widget['+name+':prev_val]', value: $.ajatus.converter.toJSON(default_value) }, '',
172 'input', { type: 'hidden', name: name, value: default_value }, '',
173 'span', { className: 'value_prefix' }, $.ajatus.i10n.get(widget.settings.value_prefix),
174 'span', { name: name }, default_value.toString(),
175 'span', { className: 'value_suffix' }, $.ajatus.i10n.get(widget.settings.value_suffix)
182 $.ajatus.widgets.generate_settings_form = function(wdgt_sett, curr_sett)
184 var settings = $.extend({}, wdgt_sett, curr_sett);
185 var holder = $('<div class="settings_holder"/>');
186 var rows = $('<ul/>');
188 $.each(settings, function(i,s){
189 // console.log("i: "+i+" s: ");
191 var s_type = typeof(s);
192 // console.log('type: '+s_type);
194 var normalized_name = i.toString().replace('_', ' ');
198 wdgt = $.ajatus.widget('boolean');
201 wdgt = $.ajatus.widget('integer');
205 wdgt = $.ajatus.widget('text');
209 'li', { id: '_setting_'+i, className: 'row' }, [
210 'label', { id: '_setting_'+i+'_label' }, $.ajatus.i10n.get(normalized_name),
211 'div', { id: '_setting_'+i+'_widget', className: wdgt.name }, wdgt.get_create_tpl(i, s),
212 'br', { className: 'clear_fix' }, ''
215 wdgt.init($('#_setting_'+i+'_widget',rows), true);
217 rows.appendTo(holder);
219 $('li:first', rows).addClass('first');
220 $('li:last', rows).addClass('last');
225 $.ajatus.widgets.generate_default_details = function(widget, data, name)
227 var holder = $('<div class="widget_details" />');
229 var saved_settings = $('<div class="saved_settings" />');
230 saved_settings.appendTo(holder);
232 $.each(widget.settings, function(k,val){
233 if (typeof data['widget'] != 'undefined') {
234 val = data.widget.config[k];
236 var field = $('<input type="hidden" />').attr({
238 value: $.ajatus.converter.toJSON(val)
240 field.appendTo(saved_settings);
243 var actions = $('<div class="actions" />');
244 var pref_btn = $('<div class="widget_settings_btn"><img src="' + $.ajatus.preferences.client.theme_icons_url + 'preferences.png" alt="' + $.ajatus.i10n.get('Settings') + '" /></div>');
245 pref_btn.appendTo(actions);
246 pref_btn.bind('click', function(){
248 var saved_inputs = $('input', saved_settings);
249 if (saved_inputs.length > 0) {
250 $.each(saved_inputs, function(i,n){
251 var key = n.name.split(";")[1];
252 prev_vals[key] = $.ajatus.converter.parseJSON(n.value);
255 $.ajatus.document.additionals.config(widget, prev_vals);
258 actions.appendTo(holder);
262 title: $.ajatus.i10n.get('name'),
265 read_only: typeof name == 'undefined' ? false : true,
269 title: $.ajatus.i10n.get('label'),
271 value: typeof data.label != 'undefined' ? data.label : '',
275 title: $.ajatus.i10n.get('default value'),
277 value: typeof data.def_val != 'undefined' ? data.def_val : ''
280 title: $.ajatus.i10n.get('required'),
282 value: typeof data.required != 'undefined' ? data.required : false
286 var fields = $('<ul class="fields_holder" />');
288 $.each(field_names, function(fn,fd){
292 wdgt = $.ajatus.widget('boolean');
295 wdgt = $.ajatus.widget('integer');
299 wdgt = $.ajatus.widget('text');
302 if ( typeof fd.required != 'undefined'
305 wdgt.required = true;
309 if ( typeof fd.value != 'undefined'
315 var wdgt_tpl = wdgt.get_create_tpl(fn, def_val);
317 if ( typeof fd['read_only'] != 'undefined'
318 && fd.read_only == true)
320 wdgt_tpl = $.ajatus.widgets.to_readonly(fd.type, fn, def_val, wdgt);
324 'li', { id: '_field_'+fn, className: 'row' }, [
325 'label', { id: '_field_'+fn+'_label' }, fd.title + (wdgt.required ? ' *' : ''),
326 'div', { id: '_field_'+fn+'_widget', className: wdgt.name }, wdgt_tpl,
327 'br', { className: 'clear_fix' }, ''
330 wdgt.init($('#_field_'+fn+'_widget',fields), true);
333 fields.appendTo(holder);
338 $.ajatus.widgets.generate_default_settings = function(widget, data)
340 var holder = $('<div class="widget_settings" />');
343 if (typeof(data) == 'object') {
347 var settings = $.ajatus.widgets.generate_settings_form(widget.settings, ext_sett);
349 settings.appendTo(holder);