154 lines
4.9 KiB
JavaScript
154 lines
4.9 KiB
JavaScript
/**
|
|
* @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
|
|
);
|
|
},
|
|
};
|
|
})();
|