diff --git a/index.html b/index.html index 3a384d5..7aba0ae 100644 --- a/index.html +++ b/index.html @@ -15,6 +15,17 @@ + +
Contribute more haha events on GitHub
diff --git a/index.js b/index.js index becf118..8cb5fe2 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,13 @@ +const clickMe = document.getElementById("clickMe") +const root = document.documentElement; +const theme = document.querySelector('.theme') const farts = []; +function handleTheme() { + const currentTheme = localStorage.getItem('theme') ?? ''; + root.className = currentTheme; +} + function newFart(url) { const fart = new Audio(url); fart.preservesPitch = false; @@ -222,14 +230,30 @@ function fireEvents() { let shaking = false; let counter = 0; // TODO: DONT FORGET TO SET TO 0 ON RELEASE!!! + +clickMe.addEventListener('keydown', (event) => { + if (event.key === 'Enter' && event.repeat) { + event.preventDefault() + return; + } +}) // TODO: change it to onmousedown (it stopped working after separating button and label) -clickMe.onclick = () => { +clickMe.addEventListener('click', () => { counter += 1; popupText.innerText = counter + "🍑💨"; fireEvents(); -}; +}) + + +theme.addEventListener('click', (e) => { + root.className = e.target.id + localStorage.setItem('theme', e.target.id) +}) + + let prevTimestamp = 0; + function frame(timestamp) { const deltaTime = (timestamp - prevTimestamp)/1000; prevTimestamp = timestamp; @@ -242,11 +266,15 @@ function frame(timestamp) { clickMe.style.left = "50%"; clickMe.style.top = "50%"; } - window.requestAnimationFrame(frame); + requestAnimationFrame(frame); } -window.requestAnimationFrame((timestamp) => { + +requestAnimationFrame((timestamp) => { prevTimestamp = timestamp; - window.requestAnimationFrame(frame); + requestAnimationFrame(frame); }); -fireEvents(); +;(() => { + handleTheme(); + fireEvents(); +})(); diff --git a/main.css b/main.css index 5982113..cde6bd0 100644 --- a/main.css +++ b/main.css @@ -1,6 +1,31 @@ +:root { + --bg-color: #ffffff; + --bg-color-2: #ededed; + --bg-hover-color: #dbdbdb; + --font-color: #151515; + --border-color: #86868657; +} +:root.dark { + --bg-color: #0d1117; + --bg-color-2: #181e29; + --bg-hover-color: #141922; + --font-color: #EEF1F3; + --border-color: #30363d; +} +:root.poop { + --bg-color: #4f3324; + --bg-color-2: #754809; + --bg-hover-color: #4c4535; + --font-color: #b8b6b3; + --border-color: #2b1605; +} + + body { + background-color: var(--bg-color); margin: 0; } + .center { position: absolute; left: 50%; @@ -9,6 +34,19 @@ body { width: 10%; height: 8%; } + +#clickMe { + background-color: var(--bg-color-2); + border: 1px solid var(--border-color); + border-radius: 3px; + +} + +#clickMe:hover { + background-color: var(--bg-hover-color); +} + + #clickMeText { position: absolute; left: 50%; @@ -18,6 +56,7 @@ body { text-wrap: nowrap; user-select: none; -webkit-user-select: none; + color: var(--font-color) } #critImg { opacity: 0; @@ -40,6 +79,7 @@ body { top: 10px; width: 100px; height: 100px; + background-color: var(--bg-color); } #popupText { display: inline-block; @@ -50,6 +90,7 @@ body { transform: translate(-25%, -50%); font-size: 48px; user-select: none; + color: var(--font-color) } .customCursor { cursor: url("peach-emoji.png"), auto; @@ -67,3 +108,54 @@ body { transform: translate(-50%, -50%) scale(0.5, 0.5) rotate(360deg); } } + +/* theme */ +.nav { + position: absolute; + right: 0; + top: 0; +} +#night-mode-btn { + anchor-name: --anchor-dark-mode; +} +.nav-btn-style { + background: var(--bg-color-2); + border: none; + font-size: 16px; + padding: 8px 12px; + border-radius: 7px; + font-weight: 500; + color: var(--font-color); + border: 1px solid var(--border-color); + cursor: pointer; +} +.nav-btn-style:hover { + background-color: var(--bg-hover-color); +} +.popover-wrapper { + position-anchor: --anchor-dark-mode; + position-area: bottom span-left; + width: calc(anchor-size(width) * 1.5); + margin: 0; + border: none; + background-color: var(--bg-color-2); + border: 1px solid var(--border-color); + color: var(--font-color); +} +.theme { + display: flex; + flex-flow: column wrap; + align-items: stretch; + justify-content: center; +} +.popover-btn-style { + text-align: left; + background-color: var(--bg-color-2); + color: var(--font-color); + border: none; + padding: 10px; + cursor: pointer; +} +.popover-btn-style:hover { + background-color: var(--bg-hover-color); +} \ No newline at end of file