diff --git a/src/_includes/bio.njk b/src/_includes/bio.njk index f524403a..000e7230 100644 --- a/src/_includes/bio.njk +++ b/src/_includes/bio.njk @@ -3,14 +3,12 @@ layout: layouts/base.njk ---
-

{{ name }}

{{ role }}

-
{% if location or country %}
@@ -18,15 +16,13 @@ layout: layouts/base.njk {{ location }}{% if location and country %}, {% endif %}{{ country }}
{% endif %} - {% if email %} -
+
+ {% endif %} - {% if website %}
🔗 @@ -34,7 +30,6 @@ layout: layouts/base.njk
{% endif %}
-

Connect

@@ -62,7 +57,6 @@ layout: layouts/base.njk
-
{% if bio %}
@@ -74,7 +68,6 @@ layout: layouts/base.njk
{% endif %} - {% if languages is defined and languages is not null %}

@@ -86,22 +79,18 @@ layout: layouts/base.njk

{% endif %} -

Mini-Game

Catch the skill tiles before they fall! Collect enough to win XP.

-
- diff --git a/src/_includes/footer-details.njk b/src/_includes/footer-details.njk index 572e3e7c..0a81fa8e 100644 --- a/src/_includes/footer-details.njk +++ b/src/_includes/footer-details.njk @@ -27,7 +27,7 @@
- {% endif %}
-
+
🐣
- + diff --git a/src/_includes/skills-list.njk b/src/_includes/skills-list.njk index 2bd945b3..33b3dd26 100644 --- a/src/_includes/skills-list.njk +++ b/src/_includes/skills-list.njk @@ -1,7 +1,7 @@
{% for skill in skills %} - {{ skill }} + {{ skill }} {% endfor %}
diff --git a/src/_includes/system-log.njk b/src/_includes/system-log.njk index e3f0365a..720f737b 100644 --- a/src/_includes/system-log.njk +++ b/src/_includes/system-log.njk @@ -1,4 +1,4 @@ -
- - - + + +
@@ -18,10 +18,10 @@
-
-
-
-
+
+
+
+
diff --git a/src/_includes/system-override.njk b/src/_includes/system-override.njk index 4c9d9d3a..6eca67c3 100644 --- a/src/_includes/system-override.njk +++ b/src/_includes/system-override.njk @@ -5,89 +5,39 @@
- - - - - - + + + + +
- - - - - - - + + + + + + +
-
- -
- - + +
+ +
+ + +
-
- - + +
-

Press 'D' to toggle

+

Press 'D' to toggle

diff --git a/src/assets/js/ui-bindings.js b/src/assets/js/ui-bindings.js new file mode 100644 index 00000000..c9ead9e9 --- /dev/null +++ b/src/assets/js/ui-bindings.js @@ -0,0 +1,79 @@ +// skipcq: JS-R1005 JS-0357 +/* global scrollToRandomUser, handleLevelClick, toggleTheme, closeMatrix, reopenConsole, minimizeConsole, maximizeConsole, closeConsole, triggerSecretUnlock, triggerForceSurge, addExperience, XP_SPACE_INVADERS_WIN, _XP_CODE_BREAKER_WIN, _XP_DEV_DUEL_PLAY, playSound, triggerMagicXP, toggleScreenshotMode, jumpToLevel, startSelfDestruct, CodeBreaker, handleFooterDotClick, SpaceInvaders, startDuelFromCard, createFloatingXP, copyToClipboard */ + +// Fixes #627 + #648 - 100% delegated UI bindings +// skipcq: JS-R1005 - intentional centralized delegation for #648 +document.addEventListener("click", (e) => { + const btn = e.target.closest("[data-action]"); + if (!btn) return; + + const action = btn.dataset.action; + + if (action === "copy-email") { + const email = btn.dataset.email; + if (email) { + if (typeof copyToClipboard === "function") copyToClipboard(email, btn); + else navigator.clipboard?.writeText(email); + } + return; + } + + const handlers = { + "scroll-to-random": scrollToRandomUser, + "level-click": handleLevelClick, + "toggle-theme": toggleTheme, + "close-matrix": closeMatrix, + "reopen-console": reopenConsole, + "minimize-console": minimizeConsole, + "maximize-console": maximizeConsole, + "close-console": closeConsole, + "secret-unlock": () => triggerSecretUnlock?.(btn.dataset.code), + "force-surge": triggerForceSurge, + "xp-invader": () => { + addExperience(XP_SPACE_INVADERS_WIN); + playSound?.("levelUp"); + }, + "xp-breaker": () => { + addExperience(_XP_CODE_BREAKER_WIN); + playSound?.("levelUp"); + }, + "xp-duel": () => { + addExperience(_XP_DEV_DUEL_PLAY); + playSound?.("click"); + }, + "xp-skill": () => { + addExperience(5); + playSound?.("click"); + }, + "xp-optimize": () => { + addExperience(15); + playSound?.("restore"); + }, + "magic-xp": () => { + triggerMagicXP?.(); + playSound?.("levelUp"); + }, + "screenshot-mode": toggleScreenshotMode, + "jump-level": jumpToLevel, + "self-destruct": startSelfDestruct, + "reset-storage": () => { + localStorage.clear(); + location.reload(); + }, + "launch-codebreaker": () => + CodeBreaker?.launch(window.PROFILE_SKILLS, window.PROFILE_NAME), + "footer-dot": handleFooterDotClick, + "launch-invaders": () => SpaceInvaders?.launch(), + "launch-breaker-arcade": () => CodeBreaker?.launch(null, "Arcade Mode"), + "duel-from-card": () => startDuelFromCard?.(btn.closest(".user-card")), + }; + + handlers[action]?.(); +}); + +document.addEventListener("mouseover", (e) => { + const el = e.target.closest( + '[data-action="floating-xp"],.floating-xp-trigger', + ); + if (el) createFloatingXP?.(e); +}); diff --git a/src/games.njk b/src/games.njk index 1105d0a3..3574e992 100644 --- a/src/games.njk +++ b/src/games.njk @@ -45,7 +45,7 @@ seo:
Trigger: click the footer ❤️ five times
- @@ -56,7 +56,7 @@ seo:
⌨️

Code Breaker

Catch falling tech skills before they hit the ground. Uses generic skills here — visit any profile page for that developer's own skill set. Earn +{{ _XP_CODE_BREAKER_WIN or 100 }} XP on win.

- @@ -114,7 +114,6 @@ seo: