You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
247 lines
5.6 KiB
247 lines
5.6 KiB
/** |
|
* 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'); |
|
}); |
|
}); |
|
}); |