let pageTransitionLock = false; let pageTransitionAnimating = false; let pageTransitionCleared = false; function bindAllRelativeAnchors() { document.querySelectorAll('a[href^="/"]:not([navigator-bind])').forEach((el) => { const url = new URL(el.href); if (url.pathname == window.location.pathname) { if (url.href.match(/#.+$/)) { return } } el.setAttribute('navigator-bind', 'true'); el.addEventListener('click', (e) => { e.preventDefault(); goToPage((new URL(e.target.href)).pathname); }); }); } function showContentIfPageIsLoaded () { if (!pageTransitionLock) { showContent(() => { pageTransitionAnimating = false; bindAllRelativeAnchors(); }); } } function goToPage(url, cb) { if (pageTransitionLock) return; pageTransitionLock = true; pageTransitionAnimating = true; pageTransitionCleared = false; blockUserScrolling(); let footerCommandPrompt = document.querySelector('#footer-command-prompt .text'); history.pushState({date: "new url -> " + url}, url, url); fetch(url).then((response) => { response.text().then(html => { let parser = new DOMParser(); let htmlDOM = parser.parseFromString(html, 'text/html'); let mainContainer = document.querySelector('main'); function swapHTMLContent() { if (!pageTransitionCleared) { window.requestAnimationFrame(swapHTMLContent); return; } mainContainer.innerHTML = ''; mainContainer.innerHTML = htmlDOM.querySelector('main').innerHTML; if (headerAnimationTerminated) showContent(bindAllRelativeAnchors); pageTransitionLock = false; } swapHTMLContent(); }); }); typingAnimation( footerCommandPrompt, 'clear', 0, () => { clearHeaderTerminal(() => { hideContent(); pageTransitionCleared = true; footerCommandPrompt.innerHTML = ''; if (url == "/") { headerTerminalExecute( "source jefferson.sh", "source jefferson.sh", showContentIfPageIsLoaded, ); } else if (url == "/contato") { headerTerminalExecute( "source pages/contato.sh", "source pages/contato.sh", showContentIfPageIsLoaded, ); } else if (url.match(/\/artigos/)) { headerTerminalExecute( `ARTICLE_FILE=.${decodeURI(url).replace(' ', '\\ ')};source pages/article.sh`, `ARTICLE_FILE=.${decodeURI(url).replace(' ', '\\ ')};source pages/article.sh`, showContentIfPageIsLoaded, ); } }); } ); }