From c42c56108ebac6673ec5c86f9f0d51f31e8eb2bd Mon Sep 17 00:00:00 2001 From: grm Date: Sat, 19 Sep 2026 00:04:08 +0300 Subject: Remove the menu fold MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The header menu no longer folds into a ☰ button: the nav_fold and nav_fold_label options, Layout.Fold/BurgerAt, the burger markup and its checkbox, the fold rules in blog.css and the measuring script on the public page are gone, and the Design tab's preview only sizes its frame again. The public page runs no script of its own once more. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Sd8UPWrvyYCLj97JexNw3A --- AGENTS.md | 28 ++-------- README.md | 3 +- internal/i18n/el.go | 12 ++--- internal/web/layout.go | 18 ------- internal/web/static/blog.css | 47 ----------------- internal/web/templates/dashboard/design.html | 26 ++-------- internal/web/templates/layouts/blog.html | 44 ++++------------ internal/web/theme.go | 11 +--- internal/web/web_test.go | 76 +--------------------------- 9 files changed, 27 insertions(+), 238 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index baf174a..51c879d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -209,11 +209,9 @@ internal/web/ server.go (host router, middleware, render helpers) editor's HTML preview, because the session cookie is `SameSite=Lax` and an opaque origin would not send it for those images; safe only while no header module kind is owner HTML (all four are template-escaped) and there is no - `allow-scripts`. The frame runs no scripts, so the dashboard's script folds - the menu inside it the way the blog's own script does (`fitFrame`), sizes - the frame to the header, and re-runs on the frame's `change` (the fold - button) and on the Wide/Phone toggle (the frame at 380px, so blog.css's - phone rules apply). + `allow-scripts`. The dashboard's script sizes the frame to the header + (`fitFrame`, on load and on the Wide/Phone toggle — the frame at 380px, so + blog.css's phone rules apply). - **Theme** (`web/theme.go`): struct stored as jsonb on `settings.theme`. `ParseTheme` merges over `DefaultTheme()` and `normalize()` clamps every value to an allowlist (hex colours, enum strings, uuid image ids, column @@ -244,8 +242,7 @@ internal/web/ server.go (host router, middleware, render helpers) unscoped (a column menu's block links centre their text, as before). They replaced a `nav_style` select (`normal` | `uppercase` | `plain`), which `ParseTheme` still decodes and maps onto the switches — `uppercase` was also the small size — (`omitempty`, so - the next save drops it). `NavFold` folds the header menu into a button - (`NavFoldLabel`: `icon` | `text` | `both`), see Layout. `TitleRule` (`none` | `line` | `dots` | `dots2` | `stripes`) is the header + the next save drops it). `TitleRule` (`none` | `line` | `dots` | `dots2` | `stripes`) is the header rule's kinds, plus a double dotted row (`dots2`: the border and an absolutely positioned `::after` with a second one 2px above), under page and post titles (`.page-title`, `.post-title`): a body class from `Theme.TitleRuleClass` (`titles-`) that blog.css draws @@ -316,22 +313,7 @@ internal/web/ server.go (host router, middleware, render helpers) browsers without `min()` — wide screens only, backgrounds untouched); below 700px `.cols` becomes block flow so the order is main → left → right → footer. Everything is rendered by the `module` template in - `layouts/blog.html`; the header by `siteheader` (the banner, then the - modules). **Menu fold** (`theme.nav_fold`, `Layout.Fold`/`BurgerAt` from - `buildLayout`): the header menu turns into a button when its links do not - fit. The button (`burger` template, a `