source: products/quintagroup.plonetabs/branches/tests/quintagroup/plonetabs/plugins/plugin.js @ 3389

Last change on this file since 3389 was 752, checked in by piv, 17 years ago

revert mistake

File size: 11.6 KB
Line 
1/* KSS plugins for plonetabs */
2
3kukit.actionsGlobalRegistry.register('plonetabs-redirectTo', function(oper) {
4;;; oper.componentName = '[plonetabs-redirectTo] action';
5    var wl = window.location;
6    oper.evaluateParameters([], {'protocol'     : wl.protocol,
7                                 'host'         : wl.host,
8                                 'pathname'     : wl.pathname,
9                                 'search'       : wl.search,
10                                 'searchparams' : '',
11                                 'searchvalues' : '',
12                                 'hash'         : wl.hash});
13
14    // normalize parameters
15    var protocol = oper.parms.protocol + (oper.parms.protocol[oper.parms.protocol.length - 1] == ':') ?  '' : ':';
16    var host = oper.parms.host;
17    var pathname = oper.parms.pathname;
18    if ((params = oper.parms.searchparams) && (values = oper.parms.searchvalues)) {
19        search = '?';
20        params = params.split(',');
21        values = values.split(',');
22        for (var i = 0; i < params.length; i++) {
23            search += params[i] + '=' + values[i] + '&';
24        }
25        search = (search.slice(search.length - 1) == '&') ? search.slice(0, search.length - 1) : search;
26    } else {
27        search = oper.parms.search;
28        search = (search && search.substr(0, 1) == '?') ? search : (search ? '?' + search : '');
29    }
30    var hash = (oper.parms.hash.length > 1) ? ((oper.parms.hash.substr(0, 1) == '#' ? '' : '#') + oper.parms.hash) : '';
31
32    url = protocol + '//' + host + pathname + search + hash;
33    window.location.replace(url);
34
35});
36
37kukit.commandsGlobalRegistry.registerFromAction('plonetabs-redirectTo', kukit.cr.makeSelectorCommand);
38
39
40kukit.actionsGlobalRegistry.register('plonetabs-toggleCollapsible', function(oper) {
41;;; oper.componentName = '[plonetabs-toggleCollapsible] action';
42    oper.evaluateParameters([], {'collapsed' : 'collapsedBlock',
43                                 'expanded' : 'expandedBlock',
44                                 'collapse': 'none'});
45
46    var node = oper.node.parentNode;  // collapsible section
47
48    if (oper.parms.collapse != 'none') {
49        if (oper.parms.collapse == 'true') {
50            removeClassName(node, oper.parms.expanded);
51            addClassName(node, oper.parms.collapsed);
52        } else {
53            removeClassName(node, oper.parms.collapsed);
54            addClassName(node, oper.parms.expanded);
55        }
56    } else {
57        if (hasClassName(node, oper.parms.collapsed)) {
58            removeClassName(node, oper.parms.collapsed);
59            addClassName(node, oper.parms.expanded);
60        } else {
61            removeClassName(node, oper.parms.expanded);
62            addClassName(node, oper.parms.collapsed);
63        }
64    }
65
66});
67
68kukit.commandsGlobalRegistry.registerFromAction('plonetabs-toggleCollapsible', kukit.cr.makeSelectorCommand);
69
70
71kukit.actionsGlobalRegistry.register('plonetabs-resetForm', function(oper) {
72;;; oper.componentName = '[plonetabs-resetForm] action';
73    oper.evaluateParameters([], {});
74    if (typeof(oper.node.reset) == 'function' || typeof(oper.node.reset) == 'object') {
75        oper.node.reset();
76    } else {
77        kukit.logWarning('plonetabs-resetForm: reset could only be executed on form element');
78    }
79
80});
81
82kukit.commandsGlobalRegistry.registerFromAction('plonetabs-resetForm', kukit.cr.makeSelectorCommand);
83
84function blur(node) {
85    tagName = node.tagName.toLowerCase();
86    if ((tagName == 'input') || (tagName == 'select')
87       || (tagName == 'textarea')) {
88        node.blur();
89;;;} else {
90;;;    kukit.logWarning('Blur on node that cannot be blured!');
91    };
92};
93
94kukit.actionsGlobalRegistry.register('plonetabs-blur', function(oper) {
95;;; oper.componentName = '[plonetabs-blur] action';
96    // TODO get rid of none
97    oper.evaluateParameters([], {'none': false});
98    blur(oper.node);
99
100});
101
102kukit.commandsGlobalRegistry.registerFromAction('plonetabs-blur', kukit.cr.makeSelectorCommand);
103
104kukit.actionsGlobalRegistry.register('plonetabs-handleServerError', function(oper) {
105    oper.componentName = '[plonetabs-handleServerError] action';
106    oper.evaluateParameters([], {'message' : ''});
107    var message = oper.parms.message;
108    if (message == '') {
109        var server_reason = (/^.*(server_reason="(.*?)").*$/i).exec(kukit.E);
110        if (server_reason && server_reason[2]) {
111            message = server_reason[2];
112        } else {
113            var client_reason = (/^.*(client_reason="(.*?)").*$/i).exec(kukit.E);
114            if (client_reason && client_reason[2]) {
115                message = client_reason[2];
116                if (message.indexOf('invalid KSS response') != -1) {
117                    message = 'Error occured. ' +
118                              'It seems like you are not logged in anymore ' +
119                              'or have no privileges to perform this action. ' +
120                              'In another case there might be an internal ' +
121                              'server error while executing your last action.' +
122                              ' Check your portal error log.' +
123                              ' Eventually your server may be not available.';
124                }
125            }
126        }
127    }
128    if (message) {
129        alert(message);
130    }
131});
132
133
134var PLONETABS_ADD_PATTERN = new RegExp('[^a-zA-Z0-9-_~,.\\$\\(\\)# ]','g');
135
136kukit.actionsGlobalRegistry.register('plonetabs-generateId', function(oper) {
137    oper.componentName = '[plonetabs-generateId] action';
138    oper.evaluateParameters(['target', 'var_name'], {});
139
140    var source = oper.node;
141    var var_name = oper.parms.var_name;
142    var initialValue = typeof(kukit.engine.stateVariables[var_name]) != 'undefined' ? kukit.engine.stateVariables[var_name] : '';
143    var target = document.getElementById(oper.parms.target);
144
145    if (target == null) {
146        kukit.logWarning('plonetabs-generateId: target element ("' + oper.parms.target + '") not found');
147        return ;
148    }
149
150    if (target.value == initialValue.replace(PLONETABS_ADD_PATTERN, '')) {
151        target.value = source.value.replace(PLONETABS_ADD_PATTERN, '');
152    }
153    kukit.engine.stateVariables[var_name] = source.value;
154
155});
156
157function plonetabs_notifySortableUpdate(element, oper) {
158    var draggables = element.getElementsByTagName('LI');
159    var ids = [];
160    for (var i = 0, o; o = draggables[i]; i++) {
161        ids.push(o.id);
162    }
163    oper.parms = {'actions': ids.join('&'), 'cat_name': kukit.engine.stateVariables['plonetabs-category']};
164    oper.executeServerAction('plonetabs-orderActions');
165}
166
167kukit.actionsGlobalRegistry.register('plonetabs-createSortable', function(oper) {
168    oper.componentName = '[plonetabs-createSortable] action';
169    oper.evaluateParameters([], {}, '', true);
170    var parms = oper.clone().parms;
171
172    var new_oper = oper.clone();
173    parms['onUpdate'] = function(element){plonetabs_notifySortableUpdate(element, new_oper);};
174    Sortable.create(oper.node, parms);
175});
176
177kukit.actionsGlobalRegistry.register('plonetabs-updateSortable', function(oper) {
178    oper.componentName = '[plonetabs-updateSortable] action';
179    oper.evaluateParameters([], {}, '', true);
180    var parms = oper.clone().parms;
181    var node = oper.node;
182    var sort_list = node.parentNode;
183    var options_ = Sortable.sortables[sort_list.id];
184
185    if (typeof(options_) != 'undefined') {
186        // check whether node element isn't already registered as draggables
187        for (var i = 0, drag; drag = options_.draggables[i]; i++) {
188            if (node == drag.element) {
189                return false;
190            }
191        }
192        // destroy sortable list
193        Sortable.destroy(sort_list.id);
194    }
195
196    var new_oper = oper.clone();
197    parms['onUpdate'] = function(element){plonetabs_notifySortableUpdate(element, new_oper);};
198    Sortable.create(sort_list, parms);
199});
200
201kukit.commandsGlobalRegistry.registerFromAction('plonetabs-updateSortable', kukit.cr.makeSelectorCommand);
202
203kukit.actionsGlobalRegistry.register('plonetabs-replaceOrInsert', function(oper) {
204    oper.componentName = '[plonetabs-replaceOrInsert] action';
205    var defaultSelectorType = kukit.selectorTypesGlobalRegistry.defaultSelectorType
206    oper.evaluateParameters(['selector', 'html'], {'alternativeHTML': '',
207                                                   'selectorType': defaultSelectorType,
208                                                   'position': 'last', // can be one of the following: first, last, after, before
209                                                   'positionSelector': '', // work together with position=after|before
210                                                   'positionSelectorType': defaultSelectorType,
211                                                   'withKssSetup': true});
212    oper.evalBool('withKssSetup');
213    var parentNode = oper.node;
214    var nodes = kukit.selectorTypesGlobalRegistry.get(oper.parms.selectorType)(oper.parms.selector, parentNode);
215    if (nodes.length > 0) {
216        var content = oper.parms.html;
217        var new_node = nodes[0];
218        var action_ = 'replaceHTML';
219    } else {
220        var content = oper.parms.alternativeHTML ? oper.parms.alternativeHTML : oper.parms.html;
221        var action_ = 'insertHTMLAsLastChild';
222        var new_node = parentNode;
223        var position = oper.parms.position;
224        if (position == 'first') {
225            action_ = 'insertHTMLAsFirstChild';
226        } else if (position == 'after' || position == 'before') {
227            var posSelector = kukit.selectorTypesGlobalRegistry.get(oper.parms.positionSelectorType);
228            nodes = posSelector(oper.parms.positionSelector, new_node);
229            if (nodes.length > 0) {
230                new_node = nodes[0];
231                action_ = (position == 'after') ? 'insertHTMLAfter' : 'insertHTMLBefore';
232            }
233        }
234    }
235    var new_oper = new kukit.op.Oper({'node': new_node,
236                                      'parms': {'html': content,
237                                                'withKssSetup': oper.parms.withKssSetup}});
238    kukit.actionsGlobalRegistry.get(action_)(new_oper);
239});
240
241kukit.commandsGlobalRegistry.registerFromAction('plonetabs-replaceOrInsert', kukit.cr.makeSelectorCommand);
242
243kukit.actionsGlobalRegistry.register('plonetabs-timeout', function(oper) {
244    oper.componentName = '[plonetabs-timeout] action';
245    oper.evaluateParameters(['cmd_name', 'delay',], {'repeat': 'true'}, '', true);
246    oper.evalBool('repeat');
247    var parms = oper.parms;
248
249    // marshall it, the rest of the parms will be passed
250    var actionParameters = {};
251    for (var key in parms) {
252        if (key != 'cmd_name' && key != 'delay' && key != 'repeat') {
253            actionParameters[key] = parms[key];
254        }
255    }
256
257    // clear previously set timeout if such exists
258    var node = oper.node;
259    if (typeof(node.plonetabs_counter) != 'undefined') {
260        node.plonetabs_counter.clear();
261    }
262
263    // function to bind
264    var new_oper = new kukit.op.Oper({'node': node, 'parms': actionParameters});
265    var f = function() {
266        // check if the node has been deleted
267        // and weed it out if so
268        if (oper.node != null && !oper.node.parentNode) {
269;;;         var msg = 'Timeout action with ' + parms.cmd_name;
270;;;         msg += ' client action stopped';
271;;;         kukit.logDebug(msg);
272            this.clear();
273        } else {
274;;;         var msg = 'TIMEOUT: Timer action with ' + parms.cmd_name;
275;;;         msg += ' client action executed';
276;;;         kukit.logDebug(msg);
277            kukit.actionsGlobalRegistry.get(parms.cmd_name)(new_oper);
278        }
279    };
280    var counter = new kukit.ut.TimerCounter(parms.delay, f, parms.repeat);
281    node.plonetabs_counter = counter;
282    counter.start();
283});
284
285kukit.commandsGlobalRegistry.registerFromAction('plonetabs-timeout', kukit.cr.makeSelectorCommand);
Note: See TracBrowser for help on using the repository browser.