From 3e765aa54f113748277eba9d9ba7072957657bd0 Mon Sep 17 00:00:00 2001 From: luxick Date: Fri, 15 May 2026 11:26:07 +0200 Subject: [PATCH] Inital attempt --- assets/diary/calendar.js | 19 +++------- assets/page/actions.js | 24 ++++++++++++- assets/page/fab.js | 18 ---------- assets/page/main.html | 25 +++++++------ assets/page/toc.js | 48 +++++++++++-------------- assets/style.css | 76 ++++++++++++++++++++++++++++++++++++++-- 6 files changed, 134 insertions(+), 76 deletions(-) delete mode 100644 assets/page/fab.js diff --git a/assets/diary/calendar.js b/assets/diary/calendar.js index a08c62c..1752da3 100644 --- a/assets/diary/calendar.js +++ b/assets/diary/calendar.js @@ -2,6 +2,8 @@ var cal = document.querySelector(".diary-cal"); if (!cal) return; + cal.querySelectorAll(".dropdown > button").forEach(wireDropdown); + var toggle = document.createElement("button"); toggle.type = "button"; toggle.className = "panel-toggle"; @@ -13,20 +15,9 @@ }); var main = document.querySelector("main"); - if (main) { - main.parentNode.insertBefore(toggle, main); + if (!main) return; + main.parentNode.insertBefore(toggle, main); + if (window.matchMedia("(max-width: 1100px)").matches) { main.parentNode.insertBefore(cal, main); } - - cal.querySelectorAll(".dropdown > button").forEach(wireDropdown); - - var pageHeader = document.querySelector("header"); - function updateTop() { - if (!pageHeader || getComputedStyle(cal).position !== "fixed") return; - var rect = pageHeader.getBoundingClientRect(); - cal.style.top = Math.max(8, rect.bottom + 8) + "px"; - } - window.addEventListener("scroll", updateTop, { passive: true }); - window.addEventListener("resize", updateTop); - updateTop(); })(); diff --git a/assets/page/actions.js b/assets/page/actions.js index f9edc9e..f879e90 100644 --- a/assets/page/actions.js +++ b/assets/page/actions.js @@ -125,5 +125,27 @@ function deletePage() { } document.addEventListener('DOMContentLoaded', function () { - wireDropdown(document.querySelector('[data-action="actions-drop"]')); + var panel = document.querySelector('.actions'); + if (!panel) return; + + var toggle = document.createElement('button'); + toggle.type = 'button'; + toggle.className = 'panel-toggle'; + toggle.textContent = 'Actions'; + toggle.setAttribute('aria-expanded', 'false'); + toggle.addEventListener('click', function () { + var open = panel.classList.toggle('is-open'); + toggle.setAttribute('aria-expanded', open ? 'true' : 'false'); + }); + + var main = document.querySelector('main'); + if (!main) return; + // Insert at the top of main's parent (right after the header) so the + // ACTIONS toggle sits above any toggles other panels may have added. + var header = document.querySelector('header'); + var anchor = header ? header.nextSibling : main.parentNode.firstChild; + main.parentNode.insertBefore(toggle, anchor); + if (window.matchMedia('(max-width: 1100px)').matches) { + main.parentNode.insertBefore(panel, toggle.nextSibling); + } }); diff --git a/assets/page/fab.js b/assets/page/fab.js deleted file mode 100644 index 3ef6794..0000000 --- a/assets/page/fab.js +++ /dev/null @@ -1,18 +0,0 @@ -// Lift the floating action button above the footer when the footer is on -// screen, so it never overlaps the request-time line or the companion icon. -// Mirrors the TOC's header-aware top-offset behaviour in toc.js. -(function () { - var fab = document.querySelector(".fab"); - var footer = document.querySelector("footer"); - if (!fab || !footer) return; - - function updateBottom() { - var rect = footer.getBoundingClientRect(); - var overlap = Math.max(0, window.innerHeight - rect.top); - fab.style.bottom = (overlap + 16) + "px"; - } - - window.addEventListener("scroll", updateBottom, { passive: true }); - window.addEventListener("resize", updateBottom); - updateBottom(); -})(); diff --git a/assets/page/main.html b/assets/page/main.html index cbf99fc..eb70b08 100644 --- a/assets/page/main.html +++ b/assets/page/main.html @@ -35,20 +35,19 @@ {{end}} {{define "extras"}} -{{if .SidebarWidget}}{{.SidebarWidget}}{{end}} -{{if .CanEdit}} - -