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