// basic functions/variables const wait = (time) => new Promise(resolve => setTimeout(resolve, time)) const language = localStorage.getItem('language') || 'pl-PL'; // admin message const ADMIN_MESSAGE = { author: 'Franek', message: { "pl-PL": "Aby zmienić język, wciśnij kombinację klawiszy Shift + L. Niestety, ze względu na limity, język jest ustawiany tylko na aktualną stronę.", "pl-SL": "Aby zmienić język, wciśnij kombinacyjo klawiszy Shift + L. Niestety, ze względu na limity, język je ustawiany ino na aktualno strōna.", "en": "To change the language, press the key combination Shift + L. Unfortunately, due to limitations, the language is set only for the current page.", "de": "Um die Sprache zu ändern, drücken Sie die Tastenkombination Shift + L. Leider wird die Sprache aufgrund von Beschränkungen nur für die aktuelle Seite festgelegt." }, enabled: true } function initializeAdminMessage() { if (!ADMIN_MESSAGE.enabled) return; header.style.display = 'unset'; header.textContent = `${ADMIN_MESSAGE.message[language]} ~ ${ADMIN_MESSAGE.author}` } // redirects const redirects = document.querySelectorAll('[data-redirect-to]') Array.from(redirects).forEach(item => item.addEventListener('click', async e => { e.preventDefault(); fadeOut(document.body) await wait(300) const a = document.createElement("a") a.href = item.dataset.redirectTo a.click() })) // opacity transitions async function fadeIn(block) { block.style.opacity = 0; await wait(1000); block.style.opacity = 1; } async function fadeOut(block) { block.style.opacity = 0; await wait(300); } // prevent context menu const elements = document.querySelectorAll('*'); elements.forEach(el => el.addEventListener('contextmenu', e => e.preventDefault())) window.addEventListener('hashchange', () => { fadeIn(document.body); }); // language support const translatable = document.querySelectorAll('[data-translatable]'); Array.from(translatable).forEach(item => { const key = item.dataset.translatable; const resource = TRANSLATIONS[key]; if (!resource) { item.textContent = key; return; } item.textContent = resource[language] || key; }) // shift + l support document.addEventListener('keydown', e => { if (e.key === 'L' && e.shiftKey) { const languagePrompt = prompt([ TRANSLATIONS['choose_language'][language], Object.keys(TRANSLATIONS['choose_language']).join(', ') ].join(' ')); if (typeof TRANSLATIONS['choose_language'][languagePrompt] === 'undefined') { alert(TRANSLATIONS['invalid_language'][language]); return; } localStorage.setItem('language', languagePrompt); location.reload(); } }) fadeIn(document.body) initializeAdminMessage()