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){
132 var widget_url = $.ajatus.preferences.client.application_url + 'js/widgets/'+cw+'.js';
134 $.ajatus.events.lock_pool.increase();
136 $.ajatus.utils.load_script(widget_url, "$.ajatus.widgets.widget_loaded", [cw]);
139 // console.log("Loaded widgets:");
140 // console.log($.ajatus.widgets.loaded_widgets);
142 if ($.ajatus.preferences.client.custom_widgets.length > 0)
144 $.each($.ajatus.preferences.client.custom_widgets, function(i,cw){
149 var widget_url = $.ajatus.preferences.client.application_url + 'js/widgets/custom/'+cw+'.js';
151 $.ajatus.events.lock_pool.increase();
153 $.ajatus.utils.load_script(widget_url, "$.ajatus.widgets.custom_widget_loaded", [cw]);
158 $.ajatus.widgets.to_readonly = function(view_type, name, default_value, widget) {
161 if (typeof widget['get_readonly_tpl'] == 'function') {
162 tpl = widget.get_readonly_tpl(view_type, name, default_value);
165 'input', { type: 'hidden', name: 'widget['+name+':name]', value: widget.name }, '',
166 'input', { type: 'hidden', name: 'widget['+name+':config]', value: $.ajatus.converter.toJSON(widget.settings) }, '',
167 'input', { type: 'hidden', name: 'widget['+name+':prev_val]', value: $.ajatus.converter.toJSON(default_value) }, '',
168 'input', { type: 'hidden', name: name, value: default_value }, '',
169 'span', { className: 'value_prefix' }, $.ajatus.i10n.get(widget.settings.value_prefix),
170 'span', { name: name }, default_value.toString(),
171 'span', { className: 'value_suffix' }, $.ajatus.i10n.get(widget.settings.value_suffix)
178 $.ajatus.widgets.generate_settings_form = function(wdgt_sett, curr_sett)
180 var settings = $.extend({}, wdgt_sett, curr_sett);
181 var holder = $('<div class="settings_holder"/>');
182 var rows = $('<ul/>');
184 $.each(settings, function(i,s){
185 // console.log("i: "+i+" s: ");
187 var s_type = typeof(s);
188 // console.log('type: '+s_type);
190 var normalized_name = i.toString().replace('_', ' ');
194 wdgt = $.ajatus.widget('boolean');
197 wdgt = $.ajatus.widget('integer');
201 wdgt = $.ajatus.widget('text');
205 'li', { id: '_setting_'+i, className: 'row' }, [
206 'label', { id: '_setting_'+i+'_label' }, $.ajatus.i10n.get(normalized_name),
207 'div', { id: '_setting_'+i+'_widget', className: wdgt.name }, wdgt.get_create_tpl(i, s),
208 'br', { className: 'clear_fix' }, ''
211 wdgt.init($('#_setting_'+i+'_widget',rows), true);
213 rows.appendTo(holder);
215 $('li:first', rows).addClass('first');
216 $('li:last', rows).addClass('last');
221 $.ajatus.widgets.generate_default_details = function(widget, data, name)
223 var holder = $('<div class="widget_details" />');
225 var saved_settings = $('<div class="saved_settings" />');
226 saved_settings.appendTo(holder);
228 $.each(widget.settings, function(k,val){
229 if (typeof data['widget'] != 'undefined') {
230 val = data.widget.config[k];
232 var field = $('<input type="hidden" />').attr({
234 value: $.ajatus.converter.toJSON(val)
236 field.appendTo(saved_settings);
239 var actions = $('<div class="actions" />');
240 var pref_btn = $('<div class="widget_settings_btn"><img src="' + $.ajatus.preferences.client.theme_icons_url + 'preferences.png" alt="' + $.ajatus.i10n.get('Settings') + '" /></div>');
241 pref_btn.appendTo(actions);
242 pref_btn.bind('click', function(){
244 var saved_inputs = $('input', saved_settings);
245 if (saved_inputs.length > 0) {
246 $.each(saved_inputs, function(i,n){
247 var key = n.name.split(";")[1];
248 prev_vals[key] = $.ajatus.converter.parseJSON(n.value);
251 $.ajatus.document.additionals.config(widget, prev_vals);
254 actions.appendTo(holder);
258 title: $.ajatus.i10n.get('name'),
261 read_only: typeof name == 'undefined' ? false : true,
265 title: $.ajatus.i10n.get('label'),
267 value: typeof data.label != 'undefined' ? data.label : '',
271 title: $.ajatus.i10n.get('default value'),
273 value: typeof data.def_val != 'undefined' ? data.def_val : ''
276 title: $.ajatus.i10n.get('required'),
278 value: typeof data.required != 'undefined' ? data.required : false
282 var fields = $('<ul class="fields_holder" />');
284 $.each(field_names, function(fn,fd){
288 wdgt = $.ajatus.widget('boolean');
291 wdgt = $.ajatus.widget('integer');
295 wdgt = $.ajatus.widget('text');
298 if ( typeof fd.required != 'undefined'
301 wdgt.required = true;
305 if ( typeof fd.value != 'undefined'
311 var wdgt_tpl = wdgt.get_create_tpl(fn, def_val);
313 if ( typeof fd['read_only'] != 'undefined'
314 && fd.read_only == true)
316 wdgt_tpl = $.ajatus.widgets.to_readonly(fd.type, fn, def_val, wdgt);
320 'li', { id: '_field_'+fn, className: 'row' }, [
321 'label', { id: '_field_'+fn+'_label' }, fd.title + (wdgt.required ? ' *' : ''),
322 'div', { id: '_field_'+fn+'_widget', className: wdgt.name }, wdgt_tpl,
323 'br', { className: 'clear_fix' }, ''
326 wdgt.init($('#_field_'+fn+'_widget',fields), true);
329 fields.appendTo(holder);
334 $.ajatus.widgets.generate_default_settings = function(widget, data)
336 var holder = $('<div class="widget_settings" />');
339 if (typeof(data) == 'object') {
343 var settings = $.ajatus.widgets.generate_settings_form(widget.settings, ext_sett);
345 settings.appendTo(holder);