const footerDiv = document.querySelector("#footer"); const textSpan = footerDiv.querySelector("span"); const originalText = footerDiv.cloneNode(true).innerHTML; let keyCombo = []; let keyComboTimeout; let quickFeatures = [ { fn: () => { textSpan.innerHTML = "such glitter, much glamour"; const duration = 15 * 1000, animationEnd = Date.now() + duration, defaults = { startVelocity: 30, spread: 360, ticks: 60, zIndex: 0 }; function randomInRange(min, max) { return Math.random() * (max - min) + min; } const interval = setInterval(function() { const timeLeft = animationEnd - Date.now(); if (timeLeft <= 0) { return clearInterval(interval); } const particleCount = 50 * (timeLeft / duration); // since particles fall down, start a bit higher than random confetti( Object.assign({}, defaults, { particleCount, origin: { x: randomInRange(0.1, 0.3), y: Math.random() - 0.2 }, }) ); confetti( Object.assign({}, defaults, { particleCount, origin: { x: randomInRange(0.7, 0.9), y: Math.random() - 0.2 }, }) ); }, 250); }, combo: [ 'ArrowUp', 'ArrowUp', 'ArrowDown', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowLeft', 'ArrowRight', 'b', 'a', 'Enter' ] }, { fn: () => { window.location.href = "//git.ixvd.net" }, combo: ["Control", "g"] } ] const clearKeyCombo = async () => { keyCombo = []; textSpan.innerHTML = originalText; await (() => new Promise(res => setTimeout(res, 0)))(); } const checkKeyCombo = () => { let hits = 0; // check if 1 key matches and if combo is complete; quickFeatures.forEach(async (quickFeature) => { if (quickFeature.combo.join('').startsWith(keyCombo.join(''))) hits = keyCombo.length; if (quickFeature.combo.join('') === keyCombo.join('')) { await clearKeyCombo(); quickFeature.fn(); } }); if (hits === 0) clearKeyCombo().catch(e => console.error(e)); } const keyComboHandler = (e) => { if (e) { if (e.key === 'Escape') return clearKeyCombo(); keyCombo.push(e.key); textSpan.innerHTML = keyCombo.join(' '); } clearTimeout(keyComboTimeout); keyComboTimeout = setTimeout(clearKeyCombo, 3000); checkKeyCombo(); } document.addEventListener('keydown', keyComboHandler);