primo commit

This commit is contained in:
2024-12-17 17:34:10 +01:00
commit e650f8df99
16435 changed files with 2451012 additions and 0 deletions

View File

@ -0,0 +1,153 @@
/**
* @package Regular Labs Library
* @version 24.11.1459
*
* @author Peter van Westen <info@regularlabs.com>
* @link https://regularlabs.com
* @copyright Copyright © 2024 Regular Labs All Rights Reserved
* @license GNU General Public License version 2 or later
*/
(function() {
'use strict';
window.RegularLabs = window.RegularLabs || {};
window.RegularLabs.Scripts = window.RegularLabs.Scripts || {
version: '24.11.1459',
ajax_list : [],
started_ajax_list: false,
ajax_list_timer : null,
loadAjax: function(url, success, fail, query, timeout, dataType, cache) {
if (url.indexOf('index.php') !== 0 && url.indexOf('administrator/index.php') !== 0) {
url = url.replace('http://', '');
url = `index.php?rl_qp=1&url=${encodeURIComponent(url)}`;
if (timeout) {
url += `&timeout=${timeout}`;
}
if (cache) {
url += `&cache=${cache}`;
}
}
let base = window.location.pathname;
base = base.substring(0, base.lastIndexOf('/'));
if (
typeof Joomla !== 'undefined'
&& typeof Joomla.getOptions !== 'undefined'
&& Joomla.getOptions('system.paths')
) {
base = Joomla.getOptions('system.paths').base;
}
// console.log(url);
// console.log(`${base}/${url}`);
this.loadUrl(
`${base}/${url}`,
null,
(function(data) {
if (success) {
success = `data = data ? data : ''; ${success};`.replace(/;\s*;/g, ';');
eval(success);
}
}),
(function(data) {
if (fail) {
fail = `data = data ? data : ''; ${fail};`.replace(/;\s*;/g, ';');
eval(fail);
}
})
);
},
/**
* Loads a url with optional POST data and optionally calls a function on success or fail.
*
* @param url String containing the url to load.
* @param data Optional string representing the POST data to send along.
* @param success Optional callback function to execute when the url loads successfully (status 200).
* @param fail Optional callback function to execute when the url fails to load.
*/
loadUrl: function(url, data, success, fail) {
return new Promise((resolve) => {
const request = new XMLHttpRequest();
request.open("POST", url, true);
request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
request.onreadystatechange = function() {
if (this.readyState !== 4) {
return;
}
if (this.status !== 200) {
fail && fail.call(null, this.responseText, this.status, this);
resolve(this);
return;
}
success && success.call(null, this.responseText, this.status, this);
resolve(this);
};
request.send(data);
});
},
addToLoadAjaxList: function(url, success, error) {
// wrap inside the loadajax function (and escape string values)
url = url.replace(/'/g, "\\'");
success = success.replace(/'/g, "\\'");
error = error.replace(/'/g, "\\'");
const action = `RegularLabs.Scripts.loadAjax(
'${url}',
'${success};RegularLabs.Scripts.ajaxRun();',
'${error};RegularLabs.Scripts.ajaxRun();'
)`;
this.addToAjaxList(action);
},
addToAjaxList: function(action) {
this.ajax_list.push(action);
if ( ! this.started_ajax_list) {
this.ajaxRun();
}
},
ajaxRun: function() {
if ( ! this.ajax_list.length) {
return;
}
clearTimeout(this.ajax_list_timer);
this.started_ajax_list = true;
const action = this.ajax_list.shift();
eval(`${action};`);
if ( ! this.ajax_list.length) {
this.started_ajax_list = false;
return;
}
// Re-trigger this ajaxRun function just in case it hangs somewhere
this.ajax_list_timer = setTimeout(
function() {
RegularLabs.Scripts.ajaxRun();
},
5000
);
},
};
})();