ISPConfig theme for Open6Hosting
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 
 
 

817 wiersze
25 KiB

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