import '/assets/scss/page.scss'; document.addEventListener("readystatechange", event => { if(event.target.readyState === 'complete') { initExternalLinks(); initEasterEgg(); } }); function initExternalLinks() { document.querySelectorAll('a').forEach(elem => { if(isExternalURL(elem.getAttribute('href'))) { elem.setAttribute('target', '_blank'); } }) } function initEasterEgg() { document.body.addEventListener('click', function(event) { // Check if the clicked element is an interactive element or triggers an event if (!isInteractiveElement(event.target)) { let randomhue = Math.floor(Math.random() * 360) let randomstring = Math.floor(Math.random() * eastereggstrings.length); // Apply the color shift filter to the body document.body.style.filter = 'hue-rotate(' + randomhue + 'deg)'; document.querySelector('.easter-egg').innerHTML = eastereggstrings[randomstring]; } }); } let eastereggstrings = [ "No", "Stop it", "It not funny anymore", "Odette does not like this", "Garry has asked to stop scaring the birds", "Seriously?", "I'm out of here", "Stop poking me. I' thinking", "Oh boy" ] function isInteractiveElement(element) { // Check if the element is an interactive element or triggers an event return ( element.tagName === 'A' || element.tagName === 'BUTTON' || element.tagName === 'INPUT' || element.tagName === 'SELECT' || element.tagName === 'TEXTAREA' || element.getAttribute('onclick') !== null || element.getAttribute('onmousedown') !== null || element.getAttribute('onmouseup') !== null || element.getAttribute('onmouseover') !== null || element.getAttribute('onmouseout') !== null || element.getAttribute('onmousemove') !== null || element.getAttribute('oncontextmenu') !== null ); } const isExternalURL = (url) => { if(url.startsWith('/')) return false; return new URL(url).origin !== location.origin; }