Initial commit: plantilla base PHP para webs Acai CMS

This commit is contained in:
Jordan
2026-02-21 21:13:57 +00:00
commit 03acc5b013
321 changed files with 62660 additions and 0 deletions

218
template/estandar/js/async.js Executable file
View File

@@ -0,0 +1,218 @@
var FunctionList = function() {
this._always = [];
this._stack = [];
}
FunctionList.prototype.add = function(f) {
if (!f || !(f instanceof Function)) return;
this._stack.push(f);
}
FunctionList.prototype.call = function() {
for (var i = 0; i < this._always.length; i++) {
this._always[i]();
}
for (var i = 0; i < this._stack.length; i++) {
this._stack[i]();
}
}
FunctionList.prototype.always = function(f) {
if (!f || !(f instanceof Function)) return;
this._always.push(f);
}
FunctionList.prototype.clear = function() {
this._stack.length = 0;
}
window.__main = new FunctionList();
/******/
function removeEventListeners(el) {
elClone = el.cloneNode(true);
el.parentNode.replaceChild(elClone, el);
return elClone;
}
var _blacklist = ['tel', '#', 'mailto', 'javascript'];
var firstTime = true;
var TRANSITION_DURATION = 0.4;
function bindLinks() {
if (!firstTime) {
$(window).off('scroll');
$(document).unbind('click');
}
var _links = document.querySelectorAll('a');
Array.from(_links).forEach(function(link) {
if (!firstTime) {
link = removeEventListeners(link);
}
if (validLink(link)) {
link.removeEventListener('click', bindLink);
link.addEventListener('click', bindLink);
}
});
if (firstTime) {
firstTime = false;
}
}
bindLinks();
function validLink(link) {
var href = link.hash || link.getAttribute('href');
if (!href) return false;
var target = link.target || link.getAttribute('target');
for (var i = 0; i < _blacklist.length; i++) {
if (href.startsWith(_blacklist[i])) {
return false;
}
}
if (href.startsWith('http') && !href.includes(window.location.hostname) || target || link.getAttribute('data-rel')) {
return false;
}
return true;
}
function bindLink(e) {
var menuObject = this;
var href = this.hash || this.getAttribute('href');
e.preventDefault();
sendRequest(menuObject, href);
}
function sendRequest(menuObject, href, fromPop) {
var mainTagAux = document.querySelector('main');
if (mainTagAux) {
mainTagAux.style.transition = 'all ' + TRANSITION_DURATION + 's';
mainTagAux.style.opacity = 0;
mainTagAux.style.transform = 'scale(0.9)';
mainTagAux.style.transformOrigin = 'top center';
}
var request = new XMLHttpRequest();
request.open('GET', href, true);
if (typeof window.__main !== 'undefined') {
window.__main.clear();
}
request.onload = function() {
if (request.status >= 200 && request.status < 400) {
var data = request.responseText;
var parser = new DOMParser();
var doc = parser.parseFromString(data, 'text/html');
var mainTag = doc.querySelector('main');
var bodyTag = doc.querySelector('body');
var titleTag = doc.querySelector('title');
if (titleTag) {
document.title = titleTag.innerHTML;
}
if (!mainTag) {
window.location.href = href;
return;
}
var navbar = _checkIfLinkBelongsToMenu(menuObject);
if (navbar) {
var active = navbar.querySelector('.active');
if (active) active.classList.remove('active');
menuObject.parentNode.classList.add('active');
}
if (!fromPop) history.pushState({id: Date.now(), link: href}, null, href);
if (bodyTag) {
document.body.classList = bodyTag.classList;
}
var mainContainer = document.querySelector('main');
if (mainContainer) {
mainContainer.parentNode.replaceChild(mainTag, mainContainer);
mainTag.setAttribute('style', mainContainer.getAttribute('style'));
setTimeout(function() {
mainTag.style.opacity = 1;
mainTag.style.transform = 'scale(1)';
setTimeout(function() {
mainTag.removeAttribute('style');
}, TRANSITION_DURATION*1000);
}, 100);
bindLinks();
}
if (typeof window.__main !== 'undefined') {
var scripts = mainTag.querySelectorAll('script');
if (scripts) {
scripts.forEach(function(script) {
if (!script.src) {
window.__main.add(function() {
eval(script.innerHTML);
});
}
});
}
window.__main.call();
}
var scripts = document.querySelectorAll('script[src]');
if (scripts) {
scripts.forEach(function(script) {
var cloned = document.createElement('script');
cloned.defer = script.defer;
cloned.async = script.async;
var cache = script.getAttribute('data-cache');
if (cache !== null && cache !== undefined) {
return true;
}
cloned.src = script.src.replace(/([?&]?)(t=)([\d]+)/, '');
if (cloned.src.includes('?')) {
cloned.src += '&t=' + Date.now();
}else{
cloned.src += '?t=' + Date.now();
}
var parent = script.parentNode;
script.parentNode.removeChild(script);
parent.appendChild(cloned);
});
}
window.scrollTo(0,0);
var hamburger = document.querySelector('.navbar-toggle[aria-expanded="true"]');
if (hamburger) hamburger.click();
} else {
window.location.href = href;
}
};
request.onerror = function() {
window.location.href = href;
};
request.send();
}
function _checkIfLinkBelongsToMenu(link) {
if (!link) return false;
var tag = link;
while (tag && tag.tagName.toLowerCase() !== 'body') {
tag = tag.parentNode;
}
return tag;
}
window.addEventListener('popstate', function(e) {
console.log(e);
//window.location.reload();
if (!e.state || !e.state.link){
window.location.reload();
return;
}
sendRequest(null, e.state.link, true);
});