| Server IP : 46.105.57.169 / Your IP : 216.73.217.8 Web Server : Apache System : Linux webd003.cluster120.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64 User : maitricfuz ( 93378) PHP Version : 8.4.22 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/maitricfuz/www/saint-martin-lg/media/regularlabs/js/ |
Upload File : |
/**
* @package Regular Labs Library
* @version 26.7.20176
*
* @author Peter van Westen <info@regularlabs.com>
* @link https://regularlabs.com
* @copyright Copyright © 2026 Regular Labs All Rights Reserved
* @license GNU General Public License version 2 or later
*/
(function() {
'use strict';
window.RegularLabs = window.RegularLabs || {};
window.RegularLabs.AdminForm = window.RegularLabs.AdminForm || {
setToggleTitleClass: function(input, value) {
const panel = input.closest('.rl-panel');
if ( ! panel) {
return;
}
panel.classList.remove('rl-panel-info');
panel.classList.remove('rl-panel-success');
panel.classList.remove('rl-panel-error');
switch (value) {
case 2:
panel.classList.add('rl-panel-error');
break;
case 1:
panel.classList.add('rl-panel-success');
break;
default:
panel.classList.add('rl-panel-info');
break;
}
},
loadAjaxButton: function(id, url, data = '', successDisabled = false, errorText = '') {
const token = Joomla.getOptions('csrf.token', '');
if (token) {
const parameters = new URLSearchParams(data);
parameters.set(token, '1');
data = parameters.toString();
}
const button = document.querySelector(`#${id}`);
const icon = button.querySelector("span:nth-child(1)");
const message = document.querySelector(`#message_${id}`);
const text = button.querySelector("span:nth-child(2)");
text.dataset.rlOriginalText = text.dataset.rlOriginalText || text.textContent;
icon.className = "icon-refresh icon-spin";
message.className = "";
message.innerHTML = "";
const constants = `
const button = document.querySelector("#${id}");
const icon = button.querySelector("span:nth-child(1)");
const message = document.querySelector("#message_${id}");
`;
let success = `${constants}
Regular.removeClass(button, "btn-warning");
Regular.addClass(button, "btn-success");
button.querySelector("span:nth-child(1)").className = "icon-ok";
button.querySelector("span:nth-child(2)").textContent = button.querySelector("span:nth-child(2)").dataset.rlOriginalText;
${successDisabled ? 'button.disabled = true; Regular.addClass(button, "disabled");' : ''}
if (data) {
Regular.addClass(message, "alert alert-success alert-noclose alert-inline");
message.innerHTML = data;
}
`;
let error = `${constants}
Regular.removeClass(button, "btn-success");
Regular.addClass(button, "btn-warning");
button.querySelector("span:nth-child(1)").className = "icon-warning";
${errorText ? `button.querySelector("span:nth-child(2)").textContent = ${JSON.stringify(errorText)};` : ''}
if(data){
let error = data;
if(data.statusText) {
error = data.statusText;
if(data.responseText.test(/<blockquote>/)) {
error = data.responseText.replace(/^[.\\s\\S]*?<blockquote>([.\\s\\S]*?)<\\/blockquote>[.\\s\\S]*$/gm, "$1");
}
}
Regular.addClass(message, "alert alert-danger alert-noclose alert-inline");
message.innerHTML = error;
}
`;
success = `
if(data == "" || data.substring(0,1) == "+") {
data = data.trim().replace(/^[+]/, "");
${success}
} else {
data = data.trim().replace(/^[-]/, "");
${error}
}
`;
RegularLabs.Scripts.loadAjax(url, success, error, data);
},
loadAjaxFields: function() {
if (typeof RegularLabs.Scripts === 'undefined') {
return;
}
this.prepareFancySelectSearch();
this.prepareFancySelectSelectedOrder();
document.querySelectorAll('textarea[data-rl-ajax]').forEach((el) => {
this.loadAjaxField(el);
});
},
prepareFancySelectSearch: function() {
if (typeof window.Choices !== 'function' || window.Choices.__regularLabsSearchPrepared) {
return;
}
const OriginalChoices = window.Choices;
window.Choices = function(element, options = {}) {
options = options || {};
const fuseOptions = options.fuseOptions || {};
return new OriginalChoices(element, {
...options,
fuseOptions: {
distance: 1000,
...fuseOptions,
},
});
};
Object.setPrototypeOf(window.Choices, OriginalChoices);
window.Choices.prototype = OriginalChoices.prototype;
window.Choices.__regularLabsSearchPrepared = true;
},
loadAjaxField: function(el) {
if (el.dataset['rlAjaxDone']) {
return;
}
if ( ! this.isInView(el)) {
return;
}
const wrapper = el.closest('.rl-ajax-wrapper');
if (wrapper) {
wrapper.classList.add('loaded');
}
let attributes = JSON.parse(el.dataset['rlAjax']);
const query_attributes = createCompressedAttributes(attributes);
const token = Joomla.getOptions('csrf.token', '');
const token_parameter = token ? `&${token}=1` : '';
const field_id = encodeURIComponent(el.id);
const field_name = encodeURIComponent(el.name);
const url = `index.php?option=com_ajax&plugin=regularlabs&format=raw&fieldid=${field_id}&fieldname=${field_name}&${query_attributes}${token_parameter}`;
const set_field = `const field = document.querySelector("#${el.id}");`;
const replace_field = `if(field && '${el.id}'.indexOf('X__') < 0){` + 'field.parentNode.replaceChild(' + 'Regular.createElementFromHTML(data),' + `document.querySelector("#${el.id}")` + ');' + '}';
const remove_spinner = `if(field && '${el.id}'.indexOf('X__') < 0){` + 'field.parentNode.querySelectorAll(`.rl-spinner`).forEach((el) => {' + 'el.remove();' + '})' + '}';
const remove_submit_values = `if(field && '${el.id}'.indexOf('X__') < 0){` + 'field.parentNode.querySelectorAll(`.rl-ajax-submit-value`).forEach((el) => {' + 'el.remove();' + '})' + '}';
let success = `RegularLabs.AdminForm.prepareFancySelectSearch();${replace_field}RegularLabs.AdminForm.prepareFancySelectSelectedOrder();`;
if (attributes.treeselect) {
success += `if(data.indexOf('rl-treeselect-') > -1){RegularLabs.TreeSelect.init('${el.id}');}`;
}
success += `RegularLabs.AdminForm.updateShowOn('${el.name}');`;
const error = `${set_field}${remove_spinner}`;
success = `if(data){${set_field}${remove_spinner}${remove_submit_values}${success}}`;
el.dataset['rlAjaxDone'] = 1;
RegularLabs.Scripts.addToLoadAjaxList(url, success, error);
function createCompressedAttributes(object) {
const string = JSON.stringify(object);
const compressed = btoa(string);
const chunk_length = Math.ceil(compressed.length / 10);
const chunks = compressed.match(new RegExp('.{1,' + chunk_length + '}', 'g'));
const attributes = [];
chunks.forEach((chunk, i) => {
attributes.push(`rlatt_${i}=${encodeURIComponent(chunk)}`);
});
return attributes.join('&');
}
},
updateShowOn: function(fieldName) {
fieldName = fieldName.replace(/\[\]$/g, '');
const showonFields = document.querySelectorAll('[data-showon]');
showonFields.forEach(field => {
if ( ! field.hasAttribute('data-showon-initialised')) {
return;
}
const jsonData = field.getAttribute('data-showon') || '';
const showOnData = JSON.parse(jsonData);
showOnData.forEach((showOnItem) => {
if (showOnItem.field !== fieldName) {
return;
}
field.removeAttribute('data-showon-initialised');
Joomla.Showon.initialise(field.parentElement);
});
});
},
prepareFancySelectSelectedOrder: function() {
document.querySelectorAll('joomla-field-fancy-select.rl-preserve-selected-order').forEach((field) => {
if (field.dataset['rlSelectedOrderPrepared']) {
return;
}
const select = field.querySelector('select[multiple][data-rl-selected-order]');
if ( ! select || ! field.choicesInstance) {
return;
}
field.dataset['rlSelectedOrderPrepared'] = '1';
let selected_order = this.getStoredFancySelectSelectedOrder(select);
selected_order = this.cleanFancySelectSelectedOrder(selected_order, field.choicesInstance.getValue(true));
select.dataset['rlSelectedOrder'] = JSON.stringify(selected_order);
this.orderFancySelectSelectedOptions(select);
this.orderFancySelectSelectedItems(field, select);
select.addEventListener('addItem', (event) => {
const value = String(event.detail.value ?? '');
selected_order = this.getStoredFancySelectSelectedOrder(select);
if ( ! selected_order.includes(value)) {
selected_order.push(value);
}
select.dataset['rlSelectedOrder'] = JSON.stringify(selected_order);
this.orderFancySelectSelectedOptions(select);
this.orderFancySelectSelectedItems(field, select);
});
select.addEventListener('removeItem', (event) => {
const value = String(event.detail.value ?? '');
selected_order = this.getStoredFancySelectSelectedOrder(select).filter((order_value) => order_value !== value);
select.dataset['rlSelectedOrder'] = JSON.stringify(selected_order);
this.orderFancySelectSelectedOptions(select);
this.orderFancySelectSelectedItems(field, select);
});
if (select.form && ! select.form.dataset['rlFancySelectSelectedOrderPrepared']) {
select.form.dataset['rlFancySelectSelectedOrderPrepared'] = '1';
select.form.addEventListener('submit', () => {
this.prepareFancySelectSelectedOrderForSubmit(select.form);
});
}
});
},
getStoredFancySelectSelectedOrder: function(select) {
try {
const selected_order = JSON.parse(select.dataset['rlSelectedOrder'] || '[]');
if (Array.isArray(selected_order)) {
return selected_order.map(String);
}
} catch (error) {
return [];
}
return [];
},
cleanFancySelectSelectedOrder: function(selected_order, values) {
values = (Array.isArray(values) ? values : [values]).map(String);
selected_order = selected_order.filter((value) => values.includes(value));
values.forEach((value) => {
if ( ! selected_order.includes(value)) {
selected_order.push(value);
}
});
return selected_order;
},
prepareFancySelectSelectedOrderForSubmit: function(form) {
form.querySelectorAll('joomla-field-fancy-select.rl-preserve-selected-order select[multiple][data-rl-selected-order]').forEach((select) => {
this.orderFancySelectSelectedOptions(select);
});
},
orderFancySelectSelectedOptions: function(select) {
const selected_order = this.getStoredFancySelectSelectedOrder(select);
const selected_by_id = new Map();
const ordered_options = [];
Array.from(select.selectedOptions).forEach((option) => {
selected_by_id.set(String(option.value), option);
});
selected_order.forEach((value) => {
if ( ! selected_by_id.has(value)) {
return;
}
ordered_options.push(selected_by_id.get(value));
selected_by_id.delete(value);
});
selected_by_id.forEach((option) => {
ordered_options.push(option);
});
ordered_options.forEach((option) => {
select.appendChild(option);
});
},
orderFancySelectSelectedItems: function(field, select) {
const item_list = field.querySelector('.choices__list--multiple');
if ( ! item_list) {
return;
}
const selected_order = this.getStoredFancySelectSelectedOrder(select);
const items_by_id = new Map();
const ordered_items = [];
item_list.querySelectorAll('.choices__item[data-value]').forEach((item) => {
items_by_id.set(String(item.dataset.value), item);
});
selected_order.forEach((value) => {
if ( ! items_by_id.has(value)) {
return;
}
ordered_items.push(items_by_id.get(value));
items_by_id.delete(value);
});
items_by_id.forEach((item) => {
ordered_items.push(item);
});
ordered_items.forEach((item) => {
item_list.appendChild(item);
});
},
isInView: function(el) {
const rect = el.getBoundingClientRect();
const viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);
if ((rect.bottom < 0 || rect.top - viewHeight >= 0)) {
return false;
}
// check if element is inside any hidden parents
let parent = el.parentElement;
while (parent) {
if (window.getComputedStyle(parent).display === 'none') {
return false;
}
parent = parent.parentElement;
}
return true;
},
removeEmptyControlGroups: function() {
// remove all empty control groups
document.querySelectorAll('div.control-group > div.control-label label').forEach((el) => {
if (el.innerHTML.trim() === '') {
el.remove();
}
});
document.querySelectorAll('div.control-group > div.control-label,div.control-group > div.controls').forEach((el) => {
if (el.innerHTML.trim() === '') {
el.remove();
}
});
document.querySelectorAll('div.control-group').forEach((el) => {
if (el.innerHTML.trim() === '') {
el.remove();
}
});
},
setParentClassOnCheckboxes: function() {
document.querySelectorAll('fieldset.rl-form-checkboxes-set-parent-classes input').forEach((el) => {
this.setParentClassOnCheckbox(el);
document.addEventListener('change', (event) => {
this.setParentClassOnCheckbox(el);
});
});
},
setParentClassOnCheckbox: function(el) {
el.parentElement.classList.toggle('rl-checkbox-checked', el.checked);
},
updateColoursOnSelectboxes: function() {
document.querySelectorAll('[class*="rl-form-select-color"]').forEach((el) => {
this.updateColoursOnSelectbox(el);
document.addEventListener('change', (event) => {
this.updateColoursOnSelectbox(el);
});
});
},
updateColoursOnSelectbox: function(el) {
const value = parseInt(el.value, 10); // Add class on page load
el.classList.remove('form-select-success', 'form-select-danger', 'rl-form-select-info', 'rl-form-select-ghosted');
if (value === -1) {
el.classList.add('rl-form-select-ghosted');
return;
}
if (el.classList.contains('rl-form-select-color-has-global') && value === -2) {
el.classList.add('rl-form-select-info');
}
if ( ! el.classList.contains('rl-form-select-color-has-states')) {
return;
}
if (value === -2 || value === 0) {
el.classList.add('form-select-danger');
return;
}
if (value === 1) {
el.classList.add('form-select-success');
return;
}
},
updateForm: function() {
this.loadAjaxFields();
this.prepareFancySelectSelectedOrder();
this.removeEmptyControlGroups();
}
};
RegularLabs.AdminForm.updateForm();
RegularLabs.AdminForm.setParentClassOnCheckboxes();
RegularLabs.AdminForm.updateColoursOnSelectboxes();
document.addEventListener('joomla:showon-show', (event) => {
event.target.querySelectorAll('.CodeMirror').forEach((editor) => {
editor.CodeMirror.refresh();
});
});
document.addEventListener('joomla.tab.show', (event) => {
document.querySelectorAll('.CodeMirror').forEach((editor) => {
editor.CodeMirror.refresh();
});
});
setInterval(() => {
RegularLabs.AdminForm.updateForm();
}, 1000);
})();