<!DOCTYPE html> <html lang=β{{ page.lang | default: site.lang | default: βenβ }}β>
{% include head.html %} <body> {{ content }} {% include footer.html %} <script> const colors = ['green', 'amber']; let randomColor = (colors) => { return colors[Math.floor(Math.random()*colors.length)] }; let saveColor = (color) => { localStorage.setItem("monitor", color); } let savedColor = localStorage.getItem("monitor"); document.body.className = savedColor ? savedColor : randomColor(colors); saveColor(document.body.className); let toggleColor = (colors, currentColor) => { return colors.find(color => color !== currentColor); }; let colorChanger = () => { let p = document.createElement('p'); let a = document.createElement('a'); let t = document.createTextNode('change color'); p.appendChild(a); a.appendChild(t); a.addEventListener("click", () => { beep(100, 1000, 0.5); let color = toggleColor(colors, localStorage.getItem("monitor")); saveColor(color); document.body.className = color; }); return p; }; document.querySelector('div.footer').appendChild(colorChanger()); var audioCtx = new (window.AudioContext || window.webkitAudioContext || window.audioContext); function beep(duration, frequency, volume, type, callback) { var oscillator = audioCtx.createOscillator(); var gainNode = audioCtx.createGain(); oscillator.connect(gainNode); gainNode.connect(audioCtx.destination); if (volume){gainNode.gain.value = volume;}; if (frequency){oscillator.frequency.value = frequency;} if (type){oscillator.type = type;} if (callback){oscillator.onended = callback;} oscillator.start(); oscillator.stop(audioCtx.currentTime + duration/1000); }; </script> </body>
</html>