Till Brehm
2016-07-24 b9a3ef486ebcde18a5ade37865ff8f397185d24f
commit | author | age
9021d7 1 var ISPConfig = {
MC 2     pageFormChanged: false,
3     tabChangeWarningTxt: '',
4     tabChangeDiscardTxt: '',
5     tabChangeWarning: false,
6     tabChangeDiscard: false,
7     requestsRunning: 0,
8     indicatorCompleted: false,
9     registeredHooks: new Array(),
10     new_tpl_add_id: 0,
11     
12     options: {
13         useLoadIndicator: false,
b79c5b 14         useComboBox: false
9021d7 15     },
MC 16     
17     setOption: function(key, value) {
18         ISPConfig.options[key] = value;
19     },
20     
21     setOptions: function(opts) {
22         $.extend(ISPConfig.options, opts);
23     },
24     
25     reportError: function(request) {
844564 26         
9021d7 27     },
MC 28     
29     registerHook: function(name, callback) {
30         if(!ISPConfig.registeredHooks[name]) ISPConfig.registeredHooks[name] = new Array();
31         var newindex = ISPConfig.registeredHooks[name].length;
32         ISPConfig.registeredHooks[name][newindex] = callback;
33     },
34     
35     callHook: function(name, params) {
36         if(!ISPConfig.registeredHooks[name]) return;
37         for(var i = 0; i < ISPConfig.registeredHooks[name].length; i++) {
38             var callback = ISPConfig.registeredHooks[name][i];
39             callback(name, params);
40         }
41     },
42     
43     resetFormChanged: function() {
44         ISPConfig.pageFormChanged = false;
45     },
46
47     showLoadIndicator: function() {
48         document.body.style.cursor = 'wait';
49         
50         if(ISPConfig.options.useLoadIndicator == true) {
51             ISPConfig.requestsRunning += 1;
52
53             if(ISPConfig.requestsRunning < 2) {
54                 var indicator = $('#ajaxloader');
55                 if(indicator.length < 1) {
56                     indicator = $('<div id="ajaxloader" style="display: none;"></div>');
57                     indicator.appendTo('body');
58                 }
59                 var parent = $('#content');
60                 if(parent.length < 1) return;
61                 ISPConfig.indicatorCompleted = false;
62
63                 var atx = parent.offset().left + 150; //((parent.outerWidth(true) - indicator.outerWidth(true)) / 2);
64                 var aty = parent.offset().top + 150;
65                 indicator.css( {'left': atx, 'top': aty } ).fadeIn('fast', function() {
66                     // check if loader should be hidden immediately
67                     ISPConfig.indicatorCompleted = true;
68                     if(ISPConfig.requestsRunning < 1) $(this).fadeOut('fast', function() { $(this).hide();});
69                 });
70             }
71         }
72     },
73
74     hideLoadIndicator: function() {
75         document.body.style.cursor = '';
76
77         ISPConfig.requestsRunning -= 1;
78         if(ISPConfig.requestsRunning < 1) {
79             ISPConfig.requestsRunning = 0; // just for the case...
80             if(ISPConfig.indicatorCompleted == true) $('#ajaxloader').fadeOut('fast', function() { $('#ajaxloader').hide(); } );
81         }
82     },
83
84     onAfterSideNavLoaded: function() {
85         if(ISPConfig.options.useComboBox == true) {
86             $('#sidebar').find("select:not(.chosen-select)").select2({
87                 placeholder: '',
88                 width: 'element',
89                 selectOnBlur: true,
b79c5b 90                 allowClear: true
9021d7 91             });
MC 92         }
93     },
94
95     onAfterContentLoad: function(url, data) {
96         if(!data) data = '';
97         else data = '&' + data;
98         
99         if(ISPConfig.options.useComboBox == true) {
100             $('#pageContent').find("select:not(.chosen-select)").select2({
101                 placeholder: '',
102                 width: 'element',
103                 selectOnBlur: true,
104                 allowClear: true,
105                 formatResult: function(o) {
106                     if(o.id && $(o.element).parent().hasClass('flags')) return '<span class="flags flag-' + o.id.toLowerCase() + '">' + o.text + '</span>';
107                     else return o.text;
108                 },
109                 formatSelection: function(o) {
110                     if(o.id && $(o.element).parent().hasClass('flags')) return '<span class="flags flag-' + o.id.toLowerCase() + '">' + o.text + '</span>';
111                     else return o.text;
112                 }
113             }).on('change', function(e) {
114                 if ($("#pageForm .table #Filter").length > 0) {
115                     $("#pageForm .table #Filter").trigger('click');
116                 }
117             });
118         }
119         
43e5b6 120         $('input[data-input-element="date"]').datetimepicker({
MC 121             'language': 'en', // TODO
122             'todayHighlight': true,
123             'todayBtn': 'linked',
124             'bootcssVer': 3,
125             'fontAwesome': true,
126             'autoclose': true,
127             'minView': 'month'
128         });
129         $('input[data-input-element="datetime"]').datetimepicker({
130             'language': 'en', // TODO
131             'todayHighlight': true,
132             'todayBtn': 'linked',
133             'bootcssVer': 3,
134             'fontAwesome': true,
135             'autoclose': true
136         });
d75040 137         $('[data-toggle="tooltip"]').tooltip({
PD 138         });
bdf955 139         // grab all password fields and set the readonly prop to prevent password managers to fill in new password
PD 140         $('input[type="password"]').each(function() {
141             $(this).prop('readonly', true)
142             .tooltip({title: "Click to set", placement: "left"});
143         });
144         $('input[type="password"]').on('click focus', function() { 
145             $(this).prop('readonly', false);
146             $(this).tooltip('destroy');
147         });
43e5b6 148         
9021d7 149         ISPConfig.callHook('onAfterContentLoad', {'url': url, 'data': data });
MC 150     },
151
152     submitForm: function(formname, target, confirmation) {
153         var successMessage = arguments[3];
154         if(!confirmation) confirmation = false;
155         
156         if(!confirmation || window.confirm(confirmation)) {
157             var submitFormObj = $.ajax({
158                 type: "POST",
159                 url: target,
160                 data: $('#'+formname).serialize(),
161                 dataType: "html",
162                 beforeSend: function() {
163                     ISPConfig.showLoadIndicator();
164                 },
165                 success: function(data, textStatus, jqXHR) {
166                     if(successMessage) alert(successMessage);
167                     if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
168                         var parts = jqXHR.responseText.split(':');
169                         ISPConfig.loadContent(parts[1]);
b79c5b 170                     } else if (jqXHR.responseText.indexOf('LOGIN_REDIRECT:') > -1) {
TB 171                         // Go to the login page
172                         document.location.href = '/index.php';
9021d7 173                     } else {
MC 174                         $('#pageContent').html(jqXHR.responseText);
175                         ISPConfig.onAfterContentLoad(target, $('#'+formname).serialize());
176                         ISPConfig.pageFormChanged = false;
177                     }
178                     ISPConfig.hideLoadIndicator();
179                 },
180                 error: function(jqXHR, textStatus, errorThrown) {
181                     ISPConfig.hideLoadIndicator();
182                     var parts = jqXHR.responseText.split(':');
183                     ISPConfig.reportError('Ajax Request was not successful. 111');
184                 }
185             });
186         }
187     },
188
189     submitUploadForm: function(formname, target) {
190         var handleResponse = function(loadedFrame) {
191             var response, responseStr = loadedFrame.contentWindow.document.body.innerHTML;
192
193             try {
194                 response = JSON.parse(responseStr);
195             } catch(e) {
196                 response = responseStr;
197             }
d82de9 198             var $response = $('<div></div>').html(response);
9021d7 199             var msg = '';
d82de9 200             var okmsg = $response.find('#OKMsg').html();
9021d7 201             if(okmsg){
MC 202                 msg = '<div id="OKMsg">'+okmsg+'</div>';
203             }
d82de9 204             var errormsg = $response.find('#errorMsg').html();
9021d7 205             if(errormsg){
MC 206                 msg = msg+'<div id="errorMsg">'+errormsg+'</div>';
207             }
d82de9 208             
MB 209             var csrf_key = $response.find('input[name="_csrf_key"]').val();
210             var csrf_id = $response.find('input[name="_csrf_id"]').val();
211             
212             msg = msg + '<input type="hidden" name="_csrf_id" value="' + csrf_id + '" /><input type="hidden" name="_csrf_key" value="' + csrf_key + '" />';
213             
9021d7 214             return msg;
MC 215
216         };
217
218         var frame_id = 'ajaxUploader-iframe-' + Math.round(new Date().getTime() / 1000);
d82de9 219         $('body').append('<iframe width="0" height="0" style="display:none;" name="'+frame_id+'" id="'+frame_id+'"/>');
9021d7 220         $('#'+frame_id).load(function() {
MC 221             var msg = handleResponse(this);
222             $('#errorMsg').remove();
223             $('#OKMsg').remove();
d82de9 224             $('input[name="_csrf_key"]').remove();
MB 225             $('input[name="_csrf_id"]').remove();
9021d7 226             $('input[name="id"]').before(msg);
MC 227             $(this).remove();
228           });
d82de9 229         $('input[type="file"]').closest("form").attr({target: frame_id, action: target}).submit();
9021d7 230     },
MC 231
232     capp: function(module, redirect) {
233         var submitFormObj = $.ajax({
234             type: "GET",
235             url: "capp.php",
236             data: "mod="+module+((redirect != undefined) ? '&redirect='+redirect : ''),
237             dataType: "html",
238             beforeSend: function() {
239                 ISPConfig.showLoadIndicator();
240             },
241             success: function(data, textStatus, jqXHR) {
242                 if(jqXHR.responseText != '') {
243                     if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
244                         var parts = jqXHR.responseText.split(':');
245                         ISPConfig.loadContent(parts[1]);
246                     } else if (jqXHR.responseText.indexOf('URL_REDIRECT:') > -1) {
247                         var newUrl= jqXHR.responseText.substr(jqXHR.responseText.indexOf('URL_REDIRECT:') + "URL_REDIRECT:".length);
248                         document.location.href = newUrl;
249                     } else {
250                         //alert(jqXHR.responseText);
251                     }
252                 }
253                 ISPConfig.loadMenus();
254                 ISPConfig.hideLoadIndicator();
255             },
256             error: function() {
257                 ISPConfig.hideLoadIndicator();
258                 ISPConfig.reportError('Ajax Request was not successful.'+module);
259             }
260         });
261     },
262     
263     loadContent: function(pagename) {
264         var params = arguments[1];
265         var pageContentObject2 = $.ajax({
266             type: "GET",
267             url: pagename,
268             data: (params ? params : null),
269             dataType: "html",
270             beforeSend: function() {
271                 ISPConfig.showLoadIndicator();
272             },
273             success: function(data, textStatus, jqXHR) {
274                 if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
275                     var parts = jqXHR.responseText.split(':');
276                     ISPConfig.loadContent(parts[1]);
277                 } else if (jqXHR.responseText.indexOf('URL_REDIRECT:') > -1) {
278                     var newUrl= jqXHR.responseText.substr(jqXHR.responseText.indexOf('URL_REDIRECT:') + "URL_REDIRECT:".length);
279                     document.location.href = newUrl;
280                 } else {
281                     $('#pageContent').html(jqXHR.responseText);
282                     ISPConfig.onAfterContentLoad(pagename, (params ? params : null));
283                     ISPConfig.pageFormChanged = false;
284                 }
285                 ISPConfig.hideLoadIndicator();
286             },
287             error: function() {
288                 ISPConfig.hideLoadIndicator();
289                 ISPConfig.reportError('Ajax Request was not successful. 113');
290             }
291         });
292     },
293
294     loadContentRefresh: function(pagename) {
295         if($('#refreshinterval').val() > 0) {
296             var pageContentObject2 = $.ajax({
297                 type: "GET",
298                 url: pagename,
299                 data: "refresh="+document.getElementById('refreshinterval').value,
300                 dataType: "html",
301                 beforeSend: function() {
302                     ISPConfig.showLoadIndicator();
303                 },
304                 success: function(data, textStatus, jqXHR) {
305                     ISPConfig.hideLoadIndicator();
306                     $('#pageContent').html(jqXHR.responseText);
307                     ISPConfig.onAfterContentLoad(pagename, "refresh="+document.getElementById('refreshinterval').value);
308                     ISPConfig.pageFormChanged = false;
309                 },
310                 error: function() {
311                     ISPConfig.hideLoadIndicator();
312                     ISPConfig.reportError('Ajax Request was not successful.'+pagename);
313                 }
314             });
315             setTimeout( "ISPConfig.loadContentRefresh('"+pagename+"&refresh="+document.getElementById('refreshinterval').value+"')", document.getElementById('refreshinterval').value*1000*60 );
316         }
317     },
318
319     loadInitContent: function() {
b2ba0d 320         var startpage = $('#pageContent').attr('data-startpage');
MB 321         if(!startpage) startpage = 'dashboard/dashboard.php';
9021d7 322         var pageContentObject = $.ajax({
MC 323             type: "GET",
b2ba0d 324             url: startpage,
b79c5b 325             data: "",
9021d7 326             dataType: "html",
MC 327             beforeSend: function() {
328                 ISPConfig.showLoadIndicator();
329             },
330             success: function(data, textStatus, jqXHR) {
331                 if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
332                     var parts = jqXHR.responseText.split(":");
333                     ISPConfig.loadContent(parts[1]);
334                 } else {
335                     $('#pageContent').html(jqXHR.responseText);
b79c5b 336                     ISPConfig.onAfterContentLoad('dashboard/dashboard.php', "");
9021d7 337                     ISPConfig.pageFormChanged = false;
MC 338                 }
339                 ISPConfig.hideLoadIndicator();
340             },
341             error: function() {
342                 ISPConfig.hideLoadIndicator();
343                 ISPConfig.reportError('Ajax Request was not successful. 114');
344             }
345         });
346         
347         ISPConfig.loadMenus();
348         ISPConfig.keepalive();
349         setTimeout(function() {
350             try {
351                 $('form#pageForm').find('input[name="username"]').focus();
352             } catch (e) {
353             
354             }
355         }, 1000);
356     },
357     
358     loadMenus: function() {
359         var sideNavObject = $.ajax({
360             type: "GET",
361             url: "nav.php",
362             data: "nav=side",
363             dataType: "html",
364             beforeSend: function() {
365                 ISPConfig.showLoadIndicator();
366             },
367             success: function(data, textStatus, jqXHR) {
368                 ISPConfig.hideLoadIndicator();
369                 $('#sidebar').html(jqXHR.responseText);
370                 ISPConfig.onAfterSideNavLoaded();
371                 ISPConfig.loadPushyMenu();
372             },
373             error: function() {
374                 ISPConfig.hideLoadIndicator();
375                 ISPConfig.reportError('Ajax Request was not successful. 115');
376             }
377         });
378
379         var topNavObject = $.ajax({
380             type: "GET",
381             url: "nav.php",
382             data: "nav=top",
383             dataType: "html",
384             beforeSend: function() {
385                 ISPConfig.showLoadIndicator();
386             },
387             success: function(data, textStatus, jqXHR) {
388                 ISPConfig.hideLoadIndicator();
389                 $('#topnav-container').html(jqXHR.responseText);
390                 ISPConfig.loadPushyMenu();
391             },
392             error: function(o) {
393                 ISPConfig.hideLoadIndicator();
394                 ISPConfig.reportError('Ajax Request was not successful. 116');
395             }
396         });
397     },
398
399     changeTab: function(tab, target, force) {
844564 400         if(ISPConfig.requestsRunning > 0) {
MB 401             console.log('tab change interrupted, request still running.');
402             return false;
403         }
9021d7 404     
MC 405         document.pageForm.next_tab.value = tab;
406
407         var idel = $('form#pageForm').find('[name="id"]');
408         var id = null;
409         if(idel.length > 0) id = idel.val();
410         if(ISPConfig.tabChangeDiscard == 'y' && !force) {
411             if((idel.length < 1 || id) && (ISPConfig.pageFormChanged == false || window.confirm(ISPConfig.tabChangeDiscardTxt))) {
412                 var next_tab = tab;
413                 if(id) ISPConfig.loadContent(target, {'next_tab': next_tab, 'id': id});
414                 else ISPConfig.loadContent(target, {'next_tab': next_tab});
415             } else {
416                 return false;
417             }
418         } else {
419             if(id && ISPConfig.tabChangeWarning == 'y' && ISPConfig.pageFormChanged == true) {
420                 if(window.confirm(ISPConfig.tabChangeWarningTxt)) {
421                     ISPConfig.submitForm('pageForm', target);
422                 } else {
423                     var next_tab = tab;
424                     if(id) ISPConfig.loadContent(target, {'next_tab': next_tab, 'id': id});
425                     else ISPConfig.loadContent(target, {'next_tab': next_tab});
426                 }
427             } else {
428                 ISPConfig.submitForm('pageForm',target);
429             }
430         }
431     },
432
433     confirm_action: function(link, confirmation) {
434         if(window.confirm(confirmation)) {
435             ISPConfig.loadContent(link);
436         }
437     },
438
439     loadContentInto: function(elementid,pagename) {
440         var pageContentObject2 = $.ajax({
441             type: "GET",
442             url: pagename,
443             dataType: "html",
444             beforeSend: function() {
445             },
446             success: function(data, textStatus, jqXHR) {
447                 $('#'+elementid).html(jqXHR.responseText);
448             },
449             error: function() {
450                 ISPConfig.reportError('Ajax Request was not successful. 118');
451             }
452         });
453     },
454
d5f2d5 455     loadOptionInto: function(elementid,pagename,callback) {
9021d7 456         var pageContentObject2 = $.ajax({
MC 457             type: "GET",
458             url: pagename,
459             dataType: "html",
460             beforeSend: function() {
461             },
462             success: function(data, textStatus, jqXHR) {
463                 var teste = jqXHR.responseText;
464                 var elemente = teste.split('#');
465                 el=document.getElementById(elementid);
466                 el.innerHTML='';
467                 for (var i = 0; i < elemente.length; ++i){
468                     var foo2 = document.createElement("option");
469                     foo2.appendChild(document.createTextNode(elemente[i]));
470                     foo2.value=elemente[i];
471                     el.appendChild(foo2);
472                 }
d5f2d5 473                 if (typeof(callback) != 'undefined') {
MC 474                     callback(elementid,pagename);
475                 }
9021d7 476             },
MC 477             error: function() {
478                 ISPConfig.reportError('Ajax Request was not successful. 119');
479             }
480         });
481     },
482     
483     keepalive: function() {
484         var pageContentObject3 = $.ajax({
485             type: "GET",
486             url: "keepalive.php",
487             dataType: "html",
488             success: function(data, textStatus, jqXHR) {
bbb85a 489                 setTimeout( function() { ISPConfig.keepalive(); }, 1000000 );
9021d7 490             },
MC 491             error: function() {
492                 ISPConfig.reportError('Session expired. Please login again.');
493             }
494         });
495     },
496     
497     addAdditionalTemplate: function(){
498         var tpl_add = $('#template_additional').val();
499         var addTemplate = $('#tpl_add_select').val().split('|',2);
500         var addTplId = addTemplate[0];
501         var addTplText = addTemplate[1];
502         if(addTplId > 0) {
503             var newVal = tpl_add.split('/');
504             ISPConfig.new_tpl_add_id += 1;
505             var delbtn = $('<a href="#"></a>').attr('class', 'button icons16 icoDelete').click(function(e) {
506                 e.preventDefault();
507                 ISPConfig.delAdditionalTemplate($(this).parent().attr('rel'));
508             });
509             newVal[newVal.length] = 'n' + ISPConfig.new_tpl_add_id + ':' + addTplId;
510             $('<li>' + addTplText + '</li>').attr('rel', 'n' + new_tpl_add_id).append(delbtn).appendTo('#template_additional_list ul');
511             $('#template_additional').val(newVal.join('/'));
512             alert('additional template ' + addTplText + ' added to customer');
513         } else {
514             alert('no additional template selcted');
515         }
516     },
517
518     delAdditionalTemplate: function(tpl_id) {
519         var tpl_add = $('#template_additional').val();
520         if(tpl_id) {
521             // new style
522             var $el = $('#template_additional_list ul').find('li[rel="' + tpl_id + '"]').eq(0); // only the first
523             var addTplText = $el.text();
524             $el.remove();
525
526             var oldVal = tpl_add.split('/');
527             var newVal = new Array();
528             for(var i = 0; i < oldVal.length; i++) {
529                 var tmp = oldVal[i].split(':', 2);
530                 if(tmp.length == 2 && tmp[0] == tpl_id) continue;
531                 newVal[newVal.length] = oldVal[i];
532             }
533             $('#template_additional').val(newVal.join('/'));
534             alert('additional template ' + addTplText + ' deleted from customer');
535         } else if(tpl_add != '') {
536             // old style
537             var addTemplate = document.getElementById('tpl_add_select').value.split('|',2);
538             var addTplId = addTemplate[0];
539             var addTplText = addTemplate[1];
540
541             $('#template_additional_list ul').find('li:not([rel])').each(function() {
542                 var text = $(this).text();
543                 if(text == addTplText) {
544                     $(this).remove();
545                     return false;
546                 }
547                 return this;
548             });
549
550             var newVal = tpl_add;
551             var repl = new RegExp('(^|\/)' + addTplId + '(\/|$)');
552             newVal = newVal.replace(repl, '');
553             newVal = newVal.replace('//', '/');
554             $('#template_additional').val(newVal);
555             alert('additional template ' + addTplText + ' deleted from customer');
556       } else {
557         alert('no additional template selcted');
558       }
559     }
560 };
561
562 $(document).on("change", function(event) {
563     var elName = event.target.localName;
564     if ($("#pageForm .table #Filter").length > 0 && elName == 'select') {
565         event.preventDefault();
566         $("#pageForm .table #Filter").trigger('click');
567     }
568     if(elName == 'select' || elName == 'input' || elName == 'textarea') {
569         if($(event.target).hasClass('no-page-form-change') == false) {
570             // set marker that something was changed
571             ISPConfig.pageFormChanged = true;
572         }
573     }
574 });
575
768b3f 576 var $page = $('html, body');
MB 577
9021d7 578 $(document).on('click', 'a[data-load-content],button[data-load-content]', function(e) {
37f2c2 579     e.preventDefault();
844564 580     if(ISPConfig.requestsRunning > 0) {
MB 581         console.log('preventing click because there is still a request running.');
582         return;
583     }
584     
768b3f 585     $page.on('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); });
MB 586     $page.animate({scrollTop: 0}, 1000, function() { $page.off('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); });
37f2c2 587     
9021d7 588     var content_to_load = $(this).attr('data-load-content');
MC 589     if(!content_to_load) return this;
590     
591     ISPConfig.loadContent(content_to_load);
592 });
593
594 $(document).on('click', 'a[data-capp],button[data-capp]', function(e) {
37f2c2 595     e.preventDefault();
844564 596     if(ISPConfig.requestsRunning > 0) {
MB 597         console.log('preventing click because there is still a request running.');
598         return;
599     }
600     
768b3f 601     $page.on('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); });
MB 602     $page.animate({scrollTop: 0}, 1000, function() { $page.off('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); });
37f2c2 603     
9021d7 604     var content_to_load = $(this).attr('data-capp');
MC 605     if(!content_to_load) return this;
606     
607     ISPConfig.capp(content_to_load);
608 });
609
610 $(document).on('click', 'a[data-submit-form],button[data-submit-form]', function(e) {
37f2c2 611     e.preventDefault();
844564 612     if(ISPConfig.requestsRunning > 0) {
MB 613         console.log('preventing click because there is still a request running.');
614         return;
615     }
616     
768b3f 617     $page.on('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); });
MB 618     $page.animate({scrollTop: 0}, 1000, function() { $page.off('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); });
9021d7 619     
MC 620     var $el = $(this);
621     var act = $el.attr('data-form-action');
622     var form = $el.attr('data-submit-form');
623     
624     if($el.attr('data-form-upload') == 'true') ISPConfig.submitUploadForm(form, act);
625     else ISPConfig.submitForm(form, act);
626 });
627
628 $(document).bind("keypress", function(event) {
629     //Use $ submit with keypress Enter in panel filterbar
630     if (event.which == '13' && $("#pageForm .table #Filter").length > 0 && $(event.target).hasClass('ui-autocomplete-input') == false ) {
631         event.preventDefault();
632         $("#pageForm .table #Filter").trigger('click');
633     }
634     //Use $ submit with keypress Enter in forms
eb610b 635     if (event.which == '13' && $(".tab-content button.formbutton-success").length > 0 && event.target.localName != 'textarea' && $(event.target).is(':input')) {
9021d7 636         event.preventDefault();
eb610b 637         $(".tab-content button.formbutton-success").not("[disabled='disabled']").trigger('click');
9021d7 638     }
MC 639 });
640
641 $(document).on('click', 'th[data-column]', function(e) {
642     var $self = $(this);
643     var column = $self.attr('data-column');
644     if(!column) return this;
645     
646     if($("#pageForm .table #Filter").length > 0 && $self.attr('data-sortable') != 'false') {
647         var $el = $('#Filter');
648         var act = $el.attr('data-form-action');
649         var form = $el.attr('data-submit-form');
650         
d76e2d 651         var dir = $self.attr('data-ordered');
MC 652         
024e13 653         var separator = '?';
MC 654         if(act.indexOf("?") >= 0){
655             separator = '&';
656         }
657         act = act + separator + 'orderby=' + column;
9021d7 658         ISPConfig.submitForm(form, act);
d76e2d 659         
MC 660         $(document).ajaxComplete(function() {
661             var $self = $('#pageForm .table th[data-column="' + column + '"]');
662             $self.parent().children('th[data-column]').removeAttr('data-ordered');
663             if(dir && dir == 'asc') $self.attr('data-ordered', 'desc');
664             else $self.attr('data-ordered', 'asc');
665         });
666         
9021d7 667     }
MC 668 });
669
670 $(document).on("click", ".addPlaceholder", function(){
671     var placeholderText = $(this).text();
672     var template = $(this).siblings(':input');
673     template.insertAtCaret(placeholderText);
674 });
675
676 $(document).on("click", ".addPlaceholderContent", function(){
677     var placeholderContentText = $(this).find('.addPlaceholderContent').text();
678     var template2 = $(this).siblings(':input');
679     template2.insertAtCaret(placeholderContentText);
680 });
681
af56b4 682 $(document).on("click", "[data-check-fields] > input[type='checkbox']", function() {
MB 683     if($(this).is(':checked')) {
684         var flds = $(this).parent().attr('data-check-fields');
685         var tmp = flds.split(/,/);
686         for(var i = 0; i < tmp.length; i++) {
687             var fname = tmp[i];
688             $('input[type="checkbox"][name="' + fname + '"]').prop('checked', true);
689         }
690     }
691 });
692
693 $(document).on("click", "[data-uncheck-fields] > input[type='checkbox']", function() {
694     if($(this).is(':checked') == false) {
695         var flds = $(this).parent().attr('data-uncheck-fields');
696         var tmp = flds.split(/,/);
697         for(var i = 0; i < tmp.length; i++) {
698             var fname = tmp[i];
699             $('input[type="checkbox"][name="' + fname + '"]').prop('checked', false);
700         }
701     }
702 });
703
704
01cec5 705 $(document).on('ready', function () {
9021d7 706     $.fn.extend({
MC 707         insertAtCaret: function(myValue){
708             return this.each(function(i) {
709                 if (document.selection) {
710                     //For browsers like Internet Explorer
711                     this.focus();
712                     sel = document.selection.createRange();
713                     sel.text = myValue;
714                     this.focus();
715                 } else if (this.selectionStart || this.selectionStart == '0') {
716                     //For browsers like Firefox and Webkit based
717                     var startPos = this.selectionStart;
718                     var endPos = this.selectionEnd;
719                     var scrollTop = this.scrollTop;
720                     this.value = this.value.substring(0, startPos)+myValue+this.value.substring(endPos,this.value.length);
721                     this.focus();
722                     this.selectionStart = startPos + myValue.length;
723                     this.selectionEnd = startPos + myValue.length;
724                     this.scrollTop = scrollTop;
725                 } else {
726                     this.value += myValue;
727                     this.focus();
728                 }
729             })
730         }
731     });
732     
733     // Animierter Ladefortschritt
734     $('.progress .progress-bar').css('width', function () {
735         return $(this).attr('aria-valuenow') + '%';
736     });
737     
738     ISPConfig.loadInitContent();
739
740     $('#searchform').submit(function(e) {
741         e.preventDefault();
742     });
743     
744     $("#pageForm").submit(function(e){
745         //Prevent form submit: e.preventDefault() in lists
746         if ($("#pageForm .table #Filter").length > 0) {
747             e.preventDefault();
748         }
749     });
a6e530 750     
MB 751     $.fn.setCursorPosition = function(pos) {
752         var self = $(this).get(0);
753         if(self.setSelectionRange) {
754             self.setSelectionRange(pos, pos);
755         } else if(self.createTextRange) {
756             var range = self.createTextRange();
757             range.collapse(true);
758             if(pos < 0) {
759                 pos = $(this).val().length + pos;
760             }
761             range.moveEnd('character', pos);
762             range.moveStart('character', pos);
763             range.select();
764         }
765     };
766     
767     $.fn.getCursorPosition = function() {
768         var iCaretPos = 0;
769         var self = $(this).get(0);
770         
771         if(typeof self.selectionStart === 'number') {
772             iCaretPos = self.selectionDirection == 'backward' ? self.selectionStart : self.selectionEnd;
773         } else if(document.selection) {
774             this.focus();
775             var oSel = document.selection.createRange();
776             oSel.moveStart('character', -self.value.length);
777             iCaretPos = oSel.text.length;
778         }
779         return iCaretPos;
780     };
01cec5 781 });