Server IP : 213.176.29.180 / Your IP : 3.138.137.244 Web Server : Apache System : Linux 213.176.29.180.hostiran.name 4.18.0-553.22.1.el8_10.x86_64 #1 SMP Tue Sep 24 05:16:59 EDT 2024 x86_64 User : webtaragh ( 1001) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON Directory (0755) : /home/webtaragh/public_html/whmcs/assets/js/ |
[ Home ] | [ C0mmand ] | [ Upload File ] |
---|
/*! * WHMCS Ajax Driven Modal Framework * * @copyright Copyright (c) WHMCS Limited 2005-2021 * @license https://www.whmcs.com/license/ WHMCS Eula */ var ajaxModalSubmitEvents = [], ajaxModalPostSubmitEvents = []; jQuery(document).ready(function(){ jQuery(document).on('click', '.open-modal', function(e) { e.preventDefault(); var url = jQuery(this).attr('href'), modalSize = jQuery(this).data('modal-size'), modalClass = jQuery(this).data('modal-class'), modalTitle = jQuery(this).data('modal-title'), submitId = jQuery(this).data('btn-submit-id'), submitLabel = jQuery(this).data('btn-submit-label'), submitColor = jQuery(this).data('btn-submit-color'), hideClose = jQuery(this).data('btn-close-hide'), disabled = jQuery(this).attr('disabled'), successDataTable = jQuery(this).data('datatable-reload-success'); var postData = ''; if (csrfToken) { postData = {token: csrfToken}; } if (!disabled) { openModal(url, postData, modalTitle, modalSize, modalClass, submitLabel, submitId, submitColor, hideClose, successDataTable); } }); // define modal close reset action jQuery('#modalAjax').on('hidden.bs.modal', function (e) { if (jQuery(this).hasClass('modal-feature-highlights')) { var dismissForVersion = jQuery('#cbFeatureHighlightsDismissForVersion').is(':checked'); WHMCS.http.jqClient.post( 'whatsnew.php', { dismiss: "1", until_next_update: dismissForVersion ? '1' : '0', token: csrfToken } ); } jQuery('#modalAjax').find('.modal-body').empty(); jQuery('#modalAjax').children('div.modal-dialog').removeClass('modal-lg'); jQuery('#modalAjax').removeClass().addClass('modal whmcs-modal fade'); jQuery('#modalAjax .modal-title').html('Title'); jQuery('#modalAjax .modal-submit').html('Submit') .removeClass() .addClass('btn btn-primary modal-submit') .removeAttr('id') .removeAttr('disabled'); jQuery('#modalAjax .loader').show(); }); }); function openModal(url, postData, modalTitle, modalSize, modalClass, submitLabel, submitId, submitColor, hideClose, successDataTable) { //set the text of the modal title jQuery('#modalAjax .modal-title').html(modalTitle); // set the modal size via a class attribute if (modalSize) { jQuery('#modalAjax').children('div[class="modal-dialog"]').addClass(modalSize); } // set the modal class if (modalClass) { jQuery('#modalAjax').addClass(modalClass); } // set the text of the submit button if(!submitLabel){ jQuery('#modalAjax .modal-submit').hide(); } else { jQuery('#modalAjax .modal-submit').show().html(submitLabel); // set the button id so we can target the click function of it. if (submitId) { jQuery('#modalAjax .modal-submit').attr('id', submitId); } } if (hideClose) { jQuery('#modalAjaxClose').hide(); } if (submitColor) { jQuery('#modalAjax .modal-submit').removeClass('btn-primary') .addClass('btn-' + submitColor); } jQuery('#modalAjax .modal-body').html(''); jQuery('#modalSkip').hide(); disableSubmit(); // show modal jQuery('#modalAjax').modal({ show: true, keyboard: true, backdrop: jQuery('#modalAjax').hasClass('static') ? 'static' : true }); // fetch modal content WHMCS.http.jqClient.post(url, postData, function(data) { updateAjaxModal(data); }, 'json').fail(function() { jQuery('#modalAjax .modal-body').html('An error occurred while communicating with the server. Please try again.'); jQuery('#modalAjax .loader').fadeOut(); }).always(function () { var modalForm = jQuery('#modalAjax').find('form'); // If a submitId is present, then we're working with a form and need to override the default event if (submitId) { modalForm.submit(function (event) { submitIdAjaxModalClickEvent(); return false; }); } if (successDataTable) { modalForm.data('successDataTable', successDataTable); } // Since the content is dynamically fetched, we have to check for the elements we want here too var inputs = jQuery(modalForm).find('input:not(input[type=checkbox],input[type=radio],input[type=hidden])'); if (inputs.length > 0) { jQuery(inputs).first().focus(); } }); //define modal submit button click if (submitId) { /** * Reloading ajax modal multiple times on the same page can add * multiple "on" click events which submits the same form over * and over. * Remove the on click event with "off" to avoid multiple growl * and save events being run. * * @see http://api.jquery.com/off/ */ var submitButton = jQuery('#' + submitId); submitButton.off('click'); submitButton.on('click', submitIdAjaxModalClickEvent); } } function submitIdAjaxModalClickEvent () { var canContinue = true, loader = jQuery('#modalAjax .loader'); disableSubmit(); loader.show(); if (ajaxModalSubmitEvents.length) { jQuery.each(ajaxModalSubmitEvents, function (index, value) { var fn = window[value]; if (canContinue && typeof fn === 'function') { canContinue = fn(); } }); } if (!canContinue) { enableSubmit(); loader.hide(); return; } var modalForm = jQuery('#modalAjax').find('form'); var modalBody = jQuery('#modalAjax .modal-body'); var modalErrorContainer = jQuery(modalBody).find('.admin-modal-error'); jQuery(modalErrorContainer).slideUp(); var modalPost = WHMCS.http.jqClient.post( modalForm.attr('action'), modalForm.serialize(), function(data) { if (modalForm.data('successDataTable')) { data.successDataTable = modalForm.data('successDataTable'); } /** * When actions should occur before the ajax modal is updated * that do not fall into the standard actions. * Calling code (ie the function defined in fn) should validate * that the ajax modal being updated is the one that the code should * run for, as there is potential for multiple ajax modals on the * same page. */ if (ajaxModalPostSubmitEvents.length) { jQuery.each(ajaxModalPostSubmitEvents, function (index, value) { var fn = window[value]; if (typeof fn === 'function') { fn(data, modalForm); } }); } updateAjaxModal(data); }, 'json' ).fail(function(xhr) { var data = xhr.responseJSON; var genericErrorMsg = 'An error occurred while communicating with the server. Please try again.'; if (data && data.data) { data = data.data; if (data.errorMsg) { if (modalErrorContainer.length > 0) { jQuery(modalErrorContainer) .html(data.errorMsg) .slideDown(); } else { jQuery.growl.warning({title: data.errorMsgTitle, message: data.errorMsg}); } } else if (data.data.body) { jQuery(modalBody).html(data.body); } else { jQuery(modalBody).html(genericErrorMsg); } } else { jQuery(modalBody).html(genericErrorMsg); } jQuery('#modalAjax .loader').fadeOut(); enableSubmit(); }); } function updateAjaxModal(data) { if (data.reloadPage) { if (typeof data.reloadPage === 'string') { window.location = data.reloadPage; } else { window.location.reload(); } return; } if (data.successDataTable) { WHMCS.ui.dataTable.getTableById(data.successDataTable, undefined).ajax.reload(); } if (data.redirect) { window.location = data.redirect; } if (data.successWindow && typeof window[data.successWindow] === "function") { window[data.successWindow](); } if (data.dismiss) { dialogClose(); } if (data.successMsg) { jQuery.growl.notice({ title: data.successMsgTitle, message: data.successMsg }); } if (data.errorMsg) { var inModalErrorContainer = jQuery('#modalAjax .modal-body .admin-modal-error'); if (inModalErrorContainer.length > 0 && !data.dismiss) { jQuery(inModalErrorContainer) .html(data.errorMsg) .slideDown(); } else { jQuery.growl.warning({title: data.errorMsgTitle, message: data.errorMsg}); } } if (data.title) { jQuery('#modalAjax .modal-title').html(data.title); } if (data.body) { jQuery('#modalAjax .modal-body').html(data.body); } else { if (data.url) { WHMCS.http.jqClient.post(data.url, '', function(data2) { jQuery('#modalAjax').find('.modal-body').html(data2.body); }, 'json').fail(function() { jQuery('#modalAjax').find('.modal-body').html('An error occurred while communicating with the server. Please try again.'); jQuery('#modalAjax').find('.loader').fadeOut(); }); } } if (data.submitlabel) { jQuery('#modalAjax .modal-submit').html(data.submitlabel).show(); if (data.submitId) { jQuery('#modalAjax').find('.modal-submit').attr('id', data.submitId); } } if (data.submitId) { /** * Reloading ajax modal multiple times on the same page can add * multiple "on" click events which submits the same form over * and over. * Remove the on click event with "off" to avoid multiple growl * and save events being run. * * @see http://api.jquery.com/off/ */ var submitButton = jQuery('#' + data.submitId); submitButton.off('click'); submitButton.on('click', submitIdAjaxModalClickEvent); } if (data.disableSubmit) { disableSubmit(); } else { enableSubmit(); } var dismissLoader = true; if (typeof data.dismissLoader !== 'undefined') { dismissLoader = data.dismissLoader; } dismissLoaderAfterRender(dismissLoader); if (data.hideSubmit) { ajaxModalHideSubmit(); } } // backwards compat for older dialog implementations function dialogSubmit() { disableSubmit(); jQuery('#modalAjax .loader').show(); var postUrl = jQuery('#modalAjax').find('form').attr('action'); WHMCS.http.jqClient.post(postUrl, jQuery('#modalAjax').find('form').serialize(), function(data) { updateAjaxModal(data); }, 'json').fail(function() { jQuery('#modalAjax .modal-body').html('An error occurred while communicating with the server. Please try again.'); jQuery('#modalAjax .loader').fadeOut(); }); } function dialogClose() { jQuery('#modalAjax').modal('hide'); } function addAjaxModalSubmitEvents(functionName) { if (functionName) { ajaxModalSubmitEvents.push(functionName); } } function removeAjaxModalSubmitEvents(functionName) { if (functionName) { var index = ajaxModalSubmitEvents.indexOf(functionName); if (index >= 0) { ajaxModalSubmitEvents.splice(index, 1); } } } function addAjaxModalPostSubmitEvents(functionName) { if (functionName) { ajaxModalPostSubmitEvents.push(functionName); } } function removeAjaxModalPostSubmitEvents(functionName) { if (functionName) { var index = ajaxModalPostSubmitEvents.indexOf(functionName); if (index >= 0) { ajaxModalPostSubmitEvents.splice(index, 1); } } } function disableSubmit() { jQuery('#modalAjax .modal-submit').prop('disabled', true).addClass('disabled'); } function enableSubmit() { jQuery('#modalAjax .modal-submit').prop('disabled', false).removeClass('disabled'); } function ajaxModalHideSubmit() { jQuery('#modalAjax .modal-submit').hide(); } function dismissLoaderAfterRender(showLoader) { if (showLoader === false) { jQuery('#modalAjax .loader').show(); } else { jQuery('#modalAjax .loader').fadeOut(); } }