From 898b52edcb47bcb3e9d6106e74ca73e74ea01e70 Mon Sep 17 00:00:00 2001 From: sillylaird Date: Thu, 3 Sep 2026 00:33:59 +0000 Subject: import live www.sillylaird.ca webroot --- assets/js/includes.js | 33 + assets/js/nav.js | 177 +++++ assets/js/pages/404.js | 5 + assets/js/pages/50x.js | 5 + assets/js/pages/admin-vibe.js | 71 ++ assets/js/pages/admin.js | 714 ++++++++++++++++++ assets/js/pages/guestbook-comments.js | 39 + assets/js/pages/guestbook_jp.js | 91 +++ assets/js/pages/guestbook_zh.js | 91 +++ assets/js/pages/hitcounter.js | 26 + assets/js/pages/latest.js | 10 + assets/js/pages/mstartpage-index.js | 118 +++ assets/js/pages/radio-nowplaying.js | 41 + assets/js/pages/vibe-admin.js | 48 ++ assets/js/pages/whatsleft.js | 16 + assets/js/scroll-to-top.js | 180 +++++ assets/js/site.js | 1341 +++++++++++++++++++++++++++++++++ assets/js/visit-counter.js | 141 ++++ 18 files changed, 3147 insertions(+) create mode 100644 assets/js/includes.js create mode 100644 assets/js/nav.js create mode 100644 assets/js/pages/404.js create mode 100644 assets/js/pages/50x.js create mode 100644 assets/js/pages/admin-vibe.js create mode 100644 assets/js/pages/admin.js create mode 100644 assets/js/pages/guestbook-comments.js create mode 100644 assets/js/pages/guestbook_jp.js create mode 100644 assets/js/pages/guestbook_zh.js create mode 100644 assets/js/pages/hitcounter.js create mode 100644 assets/js/pages/latest.js create mode 100644 assets/js/pages/mstartpage-index.js create mode 100644 assets/js/pages/radio-nowplaying.js create mode 100644 assets/js/pages/vibe-admin.js create mode 100644 assets/js/pages/whatsleft.js create mode 100644 assets/js/scroll-to-top.js create mode 100644 assets/js/site.js create mode 100644 assets/js/visit-counter.js (limited to 'assets/js') diff --git a/assets/js/includes.js b/assets/js/includes.js new file mode 100644 index 0000000..13a7933 --- /dev/null +++ b/assets/js/includes.js @@ -0,0 +1,33 @@ +(async function () { + async function loadInto(selector, url) { + const mount = document.querySelector(selector); + if (!mount) return; + + try { + const res = await fetch(url); + if (!res.ok) throw new Error("HTTP " + res.status); + const html = await res.text(); + mount.innerHTML = html; + } catch (e) { + // Fail open: if includes fail, keep page usable. + // Intentionally no console noise. + } + } + + // Pages opt-in by including:
+ // and/or
+ await Promise.all([ + loadInto('[data-include="head-meta"]', "/partials/head-meta.html"), + loadInto('[data-include="header"]', "/partials/header.html"), + loadInto('[data-include="footer"]', "/partials/footer.html"), + ]); + + // If a page uses includes, it likely removed the built-in header/footer. + // Re-run site.js behaviors after injection. + if (document.querySelector('[data-include="header"], [data-include="footer"]')) { + const s = document.createElement("script"); + s.src = "/assets/js/site.js"; + s.defer = true; + document.head.appendChild(s); + } +})(); diff --git a/assets/js/nav.js b/assets/js/nav.js new file mode 100644 index 0000000..e2fd6b6 --- /dev/null +++ b/assets/js/nav.js @@ -0,0 +1,177 @@ +/* ============================================================================ + Shared SillyLaird site nav — single source of truth. + + Drop this on any sibling site to get the same top nav as www.sillylaird.ca: + +
+ + + The script injects the header markup, pulls in the shared stylesheet, and + then loads site.js (which wires the theme toggle, drawer menu, and language + menu). Edit the markup HERE and every site updates on next load. + + If #sl-nav is absent it replaces an existing