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);
92 setTimeout("$.ajatus.widgets.widget_loaded('"+wdgt+"', "+try_count+");", 200);
96 $.ajatus.events.lock_pool.decrease();
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)
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 var field = $('<input type="hidden" />').attr({
231 value: $.ajatus.converter.toJSON(val)
233 field.appendTo(saved_settings);
236 var actions = $('<div class="actions" />');
237 var pref_btn = $('<div class="widget_settings_btn"><img src="' + $.ajatus.preferences.client.theme_icons_url + 'preferences.png" alt="' + $.ajatus.i10n.get('Settings') + '" /></div>');
238 pref_btn.appendTo(actions);
239 pref_btn.bind('click', function(){
241 var saved_inputs = $('input', saved_settings);
242 if (saved_inputs.length > 0) {
243 $.each(saved_inputs, function(i,n){
244 var key = n.name.split(";")[1];
245 prev_vals[key] = $.ajatus.converter.parseJSON(n.value);
248 $.ajatus.document.additionals.config(widget, prev_vals);
251 actions.appendTo(holder);
255 title: $.ajatus.i10n.get('name'),
259 title: $.ajatus.i10n.get('label'),
263 title: $.ajatus.i10n.get('default value'),
267 title: $.ajatus.i10n.get('required'),
272 var fields = $('<ul class="fields_holder" />');
274 $.each(field_names, function(fn,fd){
278 wdgt = $.ajatus.widget('boolean');
281 wdgt = $.ajatus.widget('integer');
285 wdgt = $.ajatus.widget('text');
291 if ( typeof data.val != 'undefined'
294 def_val.val = data.val;
298 'li', { id: '_field_'+fn, className: 'row' }, [
299 'label', { id: '_field_'+fn+'_label' }, fd.title,
300 'div', { id: '_field_'+fn+'_widget', className: wdgt.name }, wdgt.get_create_tpl(fn, ''),
301 'br', { className: 'clear_fix' }, ''
304 wdgt.init($('#_field_'+fn+'_widget',fields), true);
307 fields.appendTo(holder);
312 $.ajatus.widgets.generate_default_settings = function(widget, data)
314 var holder = $('<div class="widget_settings" />');
317 if (typeof(data) == 'object') {
321 var settings = $.ajatus.widgets.generate_settings_form(widget.settings, ext_sett);
323 settings.appendTo(holder);