Skip to main content

max / makenotwork

Describe the user dashboard's tab strip Shape 2 step 5, the last of the five. The page carried two mutually exclusive tab rows under `{% if deactivated %}`, with the opening tab computed twice in the markup as a `chosen` class and an `aria-selected`. Both are one described strip whose membership happens to collapse to one tab for a deactivated account, and whose opening tab is the first one the reader can see. Four of the five panels are fillable, which is what the tree links to. The shown one arrives with the document instead of a placeholder and a round trip later, and the two transaction queries the page made for a template field nothing read go with the strip that never showed them. Ten sites handed out a `/dashboard#tab-*` for the page's JS to click after load. Six of them named an id this page has never had: two settings sections, `tab-plan` twice under a name nothing spells, a tab only the project dashboard had, and a library that is a page of its own. A hash restore that cannot find its button does nothing and says nothing, which is how they sat there. All ten are addresses now. With no hand-written strip left, `frontend/src/core/tabs.ts` goes: the overflow menu, the hover preload, the hash restore and setActiveTab are what a described tab group does. `blogTabNav` goes with it, having clicked a `tab-blog` button that never existed either.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-08-19 17:20 UTC
Signed with PGP, not checked
Commit: 6d0a094b620d94a0c6dcd75f3973b89f1d519e0d
Parent: 1a29812
28 files changed, +551 insertions, -367 deletions
@@ -5,22 +5,11 @@
5 5 // element and any data-arg/data-arg2 attributes passed as arguments. Bodies
6 6 // are preserved verbatim from the original inline handlers.
7 7
8 - // setActiveTab is defined in the core module and takes the clicked button as its
9 - // argument; the inline handlers called setActiveTab(this), so wrap it.
10 - window.onSetActiveTab = function () {
11 - setActiveTab(this);
12 - };
13 -
14 8 // Reactivate-account form: schedule a page reload after the HTMX request.
15 9 window.reactivateReload = function () {
16 10 setTimeout(function(){ window.location.reload(); }, 500);
17 11 };
18 12
19 - // Blog editor breadcrumb / cancel links: after navigating, activate the Blog tab.
20 - window.blogTabNav = function () {
21 - setTimeout(function(){document.getElementById('tab-blog').click()},100);
22 - };
23 -
24 13 // Copy the item id to the clipboard and flash feedback on the button.
25 14 window.onCopyItemId = function (id) {
26 15 navigator.clipboard.writeText(id); this.textContent='Copied!'; setTimeout(()=>this.textContent='Copy Item ID', 1500);
@@ -43,7 +43,13 @@
43 43 /// other six had already gone and nobody lowered the seal behind them, which is
44 44 /// what a ratchet that only refuses to grow will always let happen. Measure
45 45 /// before trusting this number as a progress figure.
46 - const HIGH_WATER: usize = 117;
46 + ///
47 + /// 115 on 2026-08-19, describing the user dashboard's strip (`6b24f2df` step 5)
48 + /// and with it deleting `frontend/src/core/tabs.ts`: `w.setActiveTab` and the
49 + /// `onSetActiveTab` wrapper go, and so does `blogTabNav`, which clicked a
50 + /// `tab-blog` button the project dashboard has never had. `reloadSyncKitTab`
51 + /// arrives in the same pass and puts one back, so three left and one came.
52 + const HIGH_WATER: usize = 115;
47 53
48 54 /// Every file whose global assignments count: the legacy scripts and the typed
49 55 /// modules that replaced them.