schunder-madre/web/themes/custom/schunder/js/skript.js

117 lines
3.2 KiB
JavaScript

window.addEventListener('DOMContentLoaded', function () {
var burger = document.querySelector('#menu-burger-main');
burger.onclick = function () {
burger.classList.toggle('prikazi');
}
});
var currentXHR = null, currentURL = null, pendingURL = null, pendingForward = false;
function timeoutHandler() {
this.abort();
}
function loadPageHandler() {
if (this.readyState !== 4) return;
if (this !== currentXHR) return;
currentXHR = null;
if (this.status === 200) {
try {
var parser = new DOMParser();
var newdoc = parser.parseFromString(this.responseText, "text/html");
var oldRoot = document.querySelector(".dialog-off-canvas-main-canvas");
var newRoot = newdoc.querySelector(".dialog-off-canvas-main-canvas");
if (oldRoot && newRoot) {
document.title = newdoc.title;
document.body.replaceChild(newRoot, oldRoot);
document.body.className = newdoc.body.className;
currentURL = pendingURL;
pendingURL = null;
pendingForward = false;
setTimeout(navigationHandlerNextTick, 0);
return;
}
} catch (e) {
console.error(e);
}
}
pendingURL = null;
pendingForward = false;
location.reload();
}
function loadPageAsync() {
if (currentXHR) {
var oxhr = currentXHR;
currentXHR = null;
oxhr.abort();
}
var oldRoot = document.querySelector(".dialog-off-canvas-main-canvas");
if (!oldRoot) return false;
if (!pendingURL) {
pendingForward = false;
oldRoot.removeAttribute("pending");
return true;
}
try {
var xhr = new XMLHttpRequest();
xhr.open("get", pendingURL, true);
xhr.timeout = 20000;
xhr.ontimeout = timeoutHandler;
xhr.onreadystatechange = loadPageHandler;
currentXHR = xhr;
xhr.send(null);
} catch (e) {
console.error(e);
currentXHR = null;
return false;
}
oldRoot.setAttribute("pending", "");
return true;
}
function navigateHandler(fwd) {
var nextURL = String(location).split("#")[0];
pendingForward = !!fwd;
if (nextURL === pendingURL) return;
if (nextURL === currentURL) pendingURL = null;
else pendingURL = nextURL;
if (!loadPageAsync()) location.reload();
}
function popstateHandler() {
navigateHandler(false);
}
function linkclickHandler(event) {
if (event.button !== 0 && event.which !== 0 && event.which !== 1) return;
if (event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) return;
var link = event.target;
while (link && link.tagName !== "A") link = link.parentNode;
if (!link || !link.href || link.target) return;
try {
if (pendingForward) history.replaceState(null, "", link.href);
else history.pushState(null, "", link.href);
} catch (e) {
console.error(e);
return;
}
event.preventDefault();
navigateHandler(true);
}
if ("pushState" in history && "onpopstate" in window && document.body.className.indexOf("user-logged-in") === -1) {
currentURL = String(location).split("#")[0];
window.onpopstate = popstateHandler;
window.onclick = linkclickHandler;
}
function navigationHandlerNextTick() {
window.dispatchEvent(new CustomEvent("rs:navigate"));
}
window.addEventListener("DOMContentLoaded", function () {
console.log("LOUDED!");
navigationHandlerNextTick();
});