/** * Functions used in Setup configuration forms */ /* global displayErrors, getAllValues, getIdPrefix, validators */ // js/config.js // show this window in top frame if (top !== self) { window.top.location.href = location; } // ------------------------------------------------------------------ // Messages // $(function () { if (window.location.protocol === 'https:') { $('#no_https').remove(); } else { $('#no_https a').on('click', function () { var oldLocation = window.location; window.location.href = 'https:' + oldLocation.href.substring(oldLocation.protocol.length); return false; }); } var hiddenMessages = $('.hiddenmessage'); if (hiddenMessages.length > 0) { hiddenMessages.hide(); var link = $('#show_hidden_messages'); link.on('click', function (e) { e.preventDefault(); hiddenMessages.show(); $(this).remove(); }); link.html(link.html().replace('#MSG_COUNT', hiddenMessages.length)); link.show(); } }); // set document width $(function () { var width = 0; $('ul.tabs li').each(function () { width += $(this).width() + 10; }); var contentWidth = width; width += 250; $('body').css('min-width', width); $('.tabs_contents').css('min-width', contentWidth); }); // // END: Messages // ------------------------------------------------------------------ // ------------------------------------------------------------------ // Form validation and field operations // /** * Calls server-side validation procedures * * @param {Element} parent input field in <fieldset> or <fieldset> * @param {String} id validator id * @param {object} values values hash {element1_id: value, ...} * * @return {bool|void} */ function ajaxValidate (parent, id, values) { var $parent = $(parent); // ensure that parent is a fieldset if ($parent.attr('tagName') !== 'FIELDSET') { $parent = $parent.closest('fieldset'); if ($parent.length === 0) { return false; } } if ($parent.data('ajax') !== null) { $parent.data('ajax').abort(); } $parent.data('ajax', $.ajax({ url: 'validate.php', cache: false, type: 'POST', data: { token: $parent.closest('form').find('input[name=token]').val(), id: id, values: JSON.stringify(values) }, success: function (response) { if (response === null) { return; } var error = {}; if (typeof response !== 'object') { error[$parent.id] = [response]; } else if (typeof response.error !== 'undefined') { error[$parent.id] = [response.error]; } else { for (var key in response) { var value = response[key]; error[key] = Array.isArray(value) ? value : [value]; } } displayErrors(error); }, complete: function () { $parent.removeData('ajax'); } })); return true; } /** * Automatic form submission on change. */ $(document).on('change', '.autosubmit', function (e) { e.target.form.submit(); }); $.extend(true, validators, { // field validators field: { /** * hide_db field * * @param {boolean} isKeyUp * * @return {true} */ hide_db: function (isKeyUp) { // eslint-disable-line camelcase if (!isKeyUp && this.value !== '') { var data = {}; data[this.id] = this.value; ajaxValidate(this, 'Servers/1/hide_db', data); } return true; }, /** * TrustedProxies field * * @param {boolean} isKeyUp * * @return {true} */ TrustedProxies: function (isKeyUp) { if (!isKeyUp && this.value !== '') { var data = {}; data[this.id] = this.value; ajaxValidate(this, 'TrustedProxies', data); } return true; } }, // fieldset validators fieldset: { /** * Validates Server fieldset * * @param {boolean} isKeyUp * * @return {true} */ Server: function (isKeyUp) { if (!isKeyUp) { ajaxValidate(this, 'Server', getAllValues()); } return true; }, /** * Validates Server_login_options fieldset * * @param {boolean} isKeyUp * * @return {true} */ Server_login_options: function (isKeyUp) { // eslint-disable-line camelcase return validators.fieldset.Server.apply(this, [isKeyUp]); }, /** * Validates Server_pmadb fieldset * * @param {boolean} isKeyUp * * @return {true} */ Server_pmadb: function (isKeyUp) { // eslint-disable-line camelcase if (isKeyUp) { return true; } var prefix = getIdPrefix($(this).find('input')); if ($('#' + prefix + 'pmadb').val() !== '') { ajaxValidate(this, 'Server_pmadb', getAllValues()); } return true; } } }); // // END: Form validation and field operations // ------------------------------------------------------------------ // ------------------------------------------------------------------ // User preferences allow/disallow UI // $(function () { $('.userprefs-allow').on('click', function (e) { if (this !== e.target) { return; } var el = $(this).find('input'); if (el.prop('disabled')) { return; } el.prop('checked', !el.prop('checked')); }); }); // // END: User preferences allow/disallow UI // ------------------------------------------------------------------ $(function () { $('.delete-server').on('click', function (e) { e.preventDefault(); var $this = $(this); $.post($this.attr('href'), $this.attr('data-post'), function () { window.location.replace('index.php'); }); }); });