Repository navigation
Site admin: every section in the one dialog, nested rail, and Reports as Insights - #1031
Merged
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
btopro
force-pushed
the
site-admin-sections
branch
from
October 30, 2026 01:08
a7ae83c to
6604535
Compare
btopro
pushed a commit
to haxtheweb/haxcms-nodejs
that referenced
this pull request
Oct 30, 2026
The revisions dialog is now Page history inside the site admin dialog (haxtheweb/webcomponents#1031): a timeline of version rows and one Restore button for the version on screen. The UI check now asserts it renders in the dialog, opens on the current version with Restore off, and that choosing an older version shows its change with Restore on. The API checks are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
Every Site settings section except Structure now renders inside haxcms-site-admin: Appearance, Content, Reports, About, Files, Views, Features, Editor, Blocks, SEO (with Author as its child route), Import / Export and Details. Each opener syncs the route and shows the shell; the per-open values and listeners the old openers set move into one _configureSiteAdminSection. The shell gains a selection bar, header actions and reload(). Every admin save (SEO, Appearance, Features, Editor, Blocks, Details) now reports haxcms-admin-save-result through one _requestAdminSave wrapper; requests and payloads are unchanged. Structure, its import step, Revisions and the theme preview keep their own openers. Refs haxtheweb/issues#3180. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
…on contract The five settings sections stage edits, mark changed fields, report state to the one admin dialog and save through its action bar. Each save() fires the same haxcms-save-* event with the same detail as its old Save button; payload-parity tests pin that. Standalone use (outside the shell, including the skeleton export that reuses haxcms-site-platform-ui) keeps its own title, Save button and close-after-save. Appearance's Theme Preview becomes a header action that asks before leaving unsaved edits, and a preview pick counts as unsaved changes. The shell accepts an optional change count for summarised lists (Blocks). Refs haxtheweb/issues#3180. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
- Reopening the section the dialog last showed (after it closed, or while it is on screen) builds it fresh, so it gets that open's values: a theme picked in the full-screen preview comes back as unsaved changes, and a Reports page scope is not stale. While on screen it asks first when the section has unsaved edits. - Blocks shows changed marks only inside the admin dialog, so app-hax's system blocks screen (which extends it) shows none on load. - Editor and SEO discard put a select the person changed back to the loaded value. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
hax-upload-field gains opt-in compact and label-hidden (URL and media buttons on one 40px row, a 32px Image info row, HAX UI colours when the host defines them); haxcms-language-picker gains label-hidden and size custom properties. Defaults are unchanged for every other consumer, with tests pinning them. The SEO section uses both and drops its label-size workaround. simple-file-upload exposes its drop zone as a part. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
In Search and replace mode each matching page gets a checkbox (all checked after every search) and a select-all header checkbox. The admin dialog's bar shows "N of M pages selected"; Clear unchecks; Replace is disabled with nothing checked. With every match checked the replace event and request are exactly as before; a subset adds nodeIds, which haxcms-nodejs and haxcms-php now accept on replaceContent. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
Foundation for the Reports section's nine Insights screens, computed in the browser from routes both backends already serve (no server change): insights-spec.json (thresholds and word lists), a pure analyzer (page facts -> site results for Overview, Accessibility, Content, Links, Media, Instructional, Freshness, Metadata, Components), a module worker with a main-thread fallback, a loader (whole-site HTML export or per page, plus same-origin robots.txt / llms.txt), and CSV builders. Server-only features are reported as unavailable with what they need. Screens follow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
The rail lists a section's parts under it. A section opens out (and the rail remembers it); the section you are in opens automatically. Parts are either their own pages (Reports' nine screens, SEO's Author) or headings within the section (About, Import / Export, SEO, Details, Features, Appearance), which the dialog scrolls to and opens. Hovering a section in the rail or on a launcher card lists what it includes, and a section can put counts on its parts (railBadges). Reports now opens haxcms-site-reports, which runs the Insights analyzer in the browser and shows one screen per route (reports, reports-<id>, each with its own ?admin= address, gated like Reports). One scan is kept while you move between screens; Rescan, scope, Export CSV and density sit in its controls bar. /x/api/v1/reports and the old element are left in place. Screens follow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
Built from the Insights analyzer's results on the HAX UI admin layer: Freshness (timeline, age of pages, term-specific pages, bulk saves, every page's dates; edit history and reminders as Coming soon), Metadata (each check in words, pages without a description, shared and generic titles), Components (HAX and HTML elements used, flags, suggestions). Tests on the fixture site, including accessibility checks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
Links (findings with an errors/warnings/info filter, hosts the site leans on, embed hosts, outside links; outside link status Coming soon), Media (videos per page, pages without media, media by section, media index check; video minutes and index rebuild Coming soon), Instructional (activity map, practice per section, weeks without practice, Bloom levels, objectives, walls of text; thresholds Coming soon). Tests on the fixture site, including accessibility checks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
Overview (key numbers, fix next, site health checks, folders), Accessibility (KPIs, the alt text review table with live Fix / Check / Looks OK status as you type, WCAG criteria, heading errors, contrast; Save alt text and YouTube captions Coming soon), Content (sections, longest and thin pages, read time, reading grade, every page). Tests on the fixture site, including accessibility checks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
A strict Content Security Policy (HAXcms sends one) refuses blob: workers, so the support probe logged a violation on every scan. Module support is now read from the real same-origin worker's options; a browser without module workers falls back to the main thread as before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
Analyzer: every page row carries slug and title; findings and component
flags carry pageList (capped by the spec) so screens open pages directly;
results.thresholds exposes the spec values screens describe in words;
term-specific pages also match dates and semesters in body text, with a
snippet; freshness age buckets get a tone; flags name their tags. Site
health is null ("Nothing to check yet") when nothing is measurable; rail
badges are null when there is nothing to flag; singular/plural text
throughout. Screens drop their own slug lookups and hard-coded numbers.
Blocks: category headings are h3 under the dialog's h2 (was h4, which
skipped a level inside the admin dialog).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
… titlebar - Site settings opens on Reports, the site's dashboard (the card launcher stays as the fallback when Features turn Reports off). Reports itself is the overview, so its rail lists the eight other screens. - Order follows WordPress, Drupal and Grav: Reports, Content, Structure, Files, Appearance; then Advanced: Views, Blocks, Features, Details, Editor, SEO, Import / Export; then About on its own at the bottom. - Titlebar: simple-modal gains opt-in hooks for title size, weight, icon size, close icon size and breadcrumb spacing (defaults unchanged for every other modal). The admin dialog uses the HAX UI scale, with the title's icon in line with the rail's icons. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
47 glyphs (24x24, single filled path, currentColor, ~2px weight, 2px padding, readable at 14-16px, from Material Design Icons) for every section, Reports screen, section part and shell action in the admin dialog. The registry, rail, titlebar, breadcrumbs, Reports and the converted sections now use them. The spec and names are documented in the HAX UI admin layer doc (hax-ui-admin.md, "Admin icons"). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
Theme, Palette, Branding, Regions, About's four parts, Features' two groups, SEO, Import / Export's three groups and Details' two groups get their hax:admin-* icons, so they stay visible in the narrow icon rail. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
One wrapping toolbar of 32px controls (Search / Search and replace, search field, filter and match type, a case-sensitive switch), a summary line with paging, and a native HAX UI table: sticky header, status pills, relative dates with the full date on hover, muted parent and slug, and a labelled Revisions icon button. Sorting keeps the same columns and cycle and now sorts every filtered page before paging. Empty, loading and error states. Replace mode keeps the page checkboxes and sends the same events and details as before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
A builder (380px) beside the preview, stacking on narrow screens. The builder has four collapsible groups (Source, Show, Filter, Sort) with counts in their headers, field rows with 40px controls, a two-column field checklist, an ascending / descending control, and the query path in mono with Copy path. The preview gets a slim header (records shown, Display as, refresh) and a bordered surface, plus loading, empty and error states. The query, embed, create-page and copied text are unchanged. The rail lists Views' four groups as its parts. Also: tests follow the hax:admin-* icon names, and the SEO shell audit ignores the shared upload field's known autocomplete value, as the section's own audit already did. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
SITE_ADMIN_TITLEBAR_STYLES holds the admin titlebar (colour, 48px height, padding, 16px title, 18px icons, breadcrumb spacing). The one dialog uses it, and so do the screens not in it yet: Structure, its import step and Revisions. Only their modal titlebar styles change; outline designer and its save path are untouched (outline import/ops and revisions e2e pass). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
simple-modal gains two more opt-in hooks: the gap between a breadcrumb's icon and its text (default 0) and the title text's vertical nudge (default 2px, today's value). The admin titlebar sets 6px and 0, so icons, words and the separator sit on one line with even spacing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
- Reports is labelled Dashboard (rail, header, titlebar and breadcrumbs: Dashboard › Accessibility...), since Site settings now lands on it. The routes stay ?admin=admin-reports(-<screen>) so existing links work. - A section's parts sit one indent (--hax-ui-indent) in, under a guide line from the section's icon with a tick into each part, the way outline-designer draws its tree. The narrow icon rail drops the indent. - Details and SEO no longer list themselves as their first part; opening the section shows that content, and only the other parts (Advanced, Author) are listed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
Structure (outline-designer) is now a section of the one admin dialog, so the rail sits beside it like every other section. The outline dialog keeps its own Save Outline button, confirm and haxcms-save-outline payload; the shell only fills the body with it (registry `fill: true`, no action bar). Its leave checks go through the shell: a section with its own save can expose `hasUnsavedChanges` and `confirmLeave()`, which the shell's requestLeave (rail, breadcrumb, browser back) calls, so the question is asked once, in the same words as before. Closing the modal still runs the dialog's own guard, now also when it is the shell's child. The rail collapses to icons and opens out again from a button at its top (hax:admin-rail-collapse / -expand, new in the hax iconset); the choice is kept per browser. Collapsed, every section icon and the open section's parts stay, each named in a tooltip on hover and keyboard focus (Esc hides it), and badges become a dot. At 768px and narrower the rail starts as icons and opens over the section with a scrim until a pick, Esc or a click outside. This replaces the old forced icon rail at 1080px and the horizontal strip on phones. Documented in hax-ui-admin.md (Section rail). Tested: haxcms-elements unit suite (1007 pass, new rail and outline shell tests), and haxcms-nodejs outline-import and outline-ops e2e against this build. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
…self Revisions is now Page history, a part of Content in the one admin dialog (haxtheweb/issues#3191, #3025). Route children can now render their own screen (registry `tag`/`load`/`footer`/`fill` on a child, read through siteAdminRouteView), and a section can name what it shows in the dialog header (`headerText` in haxcms-admin-section-state). - Timeline grouped by day, newest first, with filter chips (All, Content, Structure, Page details, Restores) and counts. Each row says what the change was in words ("Content edit", "Find and replace", "Outline change", "Restore"...), who made it, and flags AI-agent edits, system updates and changes made outside HAX. Older versions page in. - Labels come from the [actor:op:txn] commit prefix: from the backend's parsed fields when it sends them, otherwise parsed here. History from before op codes is labelled from HAX's own commit wording. - One version: "This change" (against the version before it) or "Compare with now" (what a restore would bring back or remove), shown as a word diff, the rendered version, or an HTML line diff. Long unchanged stretches collapse. Title, description, address, published, hidden and locked changes are listed in a table. Technical details hold the op, actor, request id, commit and message. - Restore asks in place of confirm(): what goes back (with word counts), that title and description go back when the version saved them, what stays, which later changes it undoes and by whom, that nothing is deleted, and the commit line it records. A failed restore now says so (haxcms-node-revision-restore-failed from haxcms-site-editor) instead of spinning. Same events and API as before; no backend change. Tested: haxcms-elements unit suite (1027 pass, new model and screen tests), haxcms-nodejs revisions e2e against this build (7/7, a11y 0). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
- Versions stay in the order git lists them. "This change" compares each
version with the one before it in history, so a commit with an out of
step date (a rebase, a clock, a backdated import) no longer gets
compared with the wrong version.
- HAX's site creation commit ("A new journey begins") reads as Site
created instead of Outside HAX.
- A change with no text edits says so instead of drawing an empty diff.
- HTML diffs and technical details use a monospace stack (the DDD
secondary font is a serif); diff text no longer picks up template
indentation.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
- The admin dialog takes nearly the whole screen: the margin grows from 0 on a phone to 32px on a wide screen (up to 1680px wide), corners square to 8px the same way (SITE_ADMIN_MODAL_SIZE, also used by Structure's import step). simple-modal gains opt-in --simple-modal-border-radius and --simple-modal-container-padding (web-dialog's 5vw 24px stays the default). - Structure: the titlebar names it, so the page header is gone, and Save Outline moves into outline-designer's toolbar (new `actions` slot), so there is no footer bar either. Same button, same confirm, same save. On a narrow designer (container query, 640px) the toolbar is one row: Add page, Options and Save; Options holds Collapse all, Expand all, density, Import and keyboard shortcuts, which are hidden on narrow screens unless asked for (show-hints). - Shell on narrow screens: a compact page header; the selection bar keeps its first action and puts the rest under More; rail tooltips on focus only appear after keyboard use, so opening the dialog does not cover the page with one. - Blocks: one compact list of rows on every size (checkbox, icon, title, two-line description, preview), categories as collapsible rows with an "N of M on" count and their own select / deselect all, and a preview that opens inside the section (a sheet on phones, a clamped panel on desktop) instead of running off screen. - Files: below 720px of section width, file cards (thumbnail or file-type icon, one-line name, type, size and age) and one compact filter row instead of the squeezed table; the desktop table is unchanged. Tested: haxcms-elements 1043, outline-designer 198 (new narrow toolbar tests), simple-modal 93; precheck. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
Tighter button padding in narrow bars, and the selection count no longer shrinks, so "2 selected", Clear, the first action and More fit one row. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
btopro
force-pushed
the
site-admin-sections
branch
from
October 30, 2026 17:46
9fbc23b to
e1c2916
Compare
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs haxtheweb/issues#3180 · Stacked on #1028 (review that first; this PR's base is its branch)
Every Site settings section now renders inside the one admin dialog, with the same rail, header and action bar. This finishes steps 4–9 of the plan. What every section saves is unchanged: payload-parity tests check each save against the old code, and an independent review found no change to any save event or payload.
Plan: https://claude.ai/artifact/18ShB2eZU1XRTA5wEEeLSu · Mockups: https://claude.ai/artifact/AH4sFGWYZH2xHpVZnEoZcB
What moves in
_onFileActionpath, with the same prompts.Still opening their own dialogs:
What it touches (all in
elements/haxcms-elements)lib/core/admin/site-admin-sections.jsresolveSiteAdminRoute).header: falseflag for Reports, which draws its own header.lib/core/admin/haxcms-site-admin.jsconfigureSectionhook, called before a section connects.reload().selected,actions,selectionText;runAction,clearSelection).headerActions,runHeaderAction).count.color-schemefollows the HAX UI theme switch, solight-dark()matches the--hax-ui-*colours.lib/core/haxcms-site-editor-ui.js_configureSiteAdminSection._siteAdminRouteMeta.lib/core/haxcms-site-editor.js_requestAdminSave: SEO, Appearance, Features, Editor and Blocks now reporthaxcms-admin-save-result, like Details.inShell. Standalone use (outside the dialog) keeps its title, Save button and close-after-save.yarn precheckpasses.Verified in the running app
I ran this against haxcms-nodejs main with these files overlaid into its build.
Decisions for review
Files: Scale, Transform and Compress, and Embed with two or more images, open a small option panel above the bar. The options are the same as before; only the panel is new.
Content: Clear empties the find text, the replacement and the matches, because Content has no row checkboxes.
Features: there is no "Download skeleton" header action. The mockup shows one, but platform mode never had it, so adding it would be new capability.
Shared widgets that still look heavy inside SEO:
hax-upload-field's "Image info" bar.haxcms-language-picker's larger text. It has no hide-label option, so its label is hidden with a size workaround.These are follow-ups in those components.
Follow-ups
Structure (plan step 10).Done in Round 5.haxcms-site-settings-dashboardand the remaining per-section.actionsCSS.Round 2: nested rail, Reports (Insights), and review answers
Also linked to this PR: the Insights plan, HAX Insights: front-end-first work plan, with its mockups at https://claude.ai/artifact/45htsypdE83WrQ39y2zEJr. The spec gaps it raises belong on haxtheweb/haxcms-plugin-examples#1 and haxtheweb/issues#3176.
Nested rail (any section). Registry entries can list
children:railBadges).Reports, rebuilt as Insights. Everything runs in the browser, with no server change.
lib/core/insights/:insights-spec.json: thresholds and word lists.blob:probe because HAXcms's CSP refusesblob:workers, with a main-thread fallback.haxcms-site-reportsholds the scope, Rescan, Export CSV and density controls and a status line. One scan is kept while you move between screens.?admin=admin-reports-<id>), gated like Reports: Overview, Accessibility (the alt-text review table with live Fix / Check / Looks OK), Content, Links, Media, Instructional, Freshness, Metadata and Components./x/api/v1/reportsand the oldhaxcms-site-insightselement. The UI now uses the new screens.Answers from review
nodeIds, which is new in Site admin: e2e for the one dialog, plus optional nodeIds on content replace haxcms-nodejs#157 and mirrored in siteSearch replace: optional nodeIds (site admin Content page checkboxes) haxcms-php#716. The bar shows "N of M pages selected" and Clear unchecks. Trade-off: no column sorting while replace results are listed.hax-upload-fieldgains opt-incompactandlabel-hidden.haxcms-language-pickergainslabel-hiddenand sizing custom properties.Fixed along the way: Blocks' category headings are now
h3under the dialog'sh2; they wereh4, which skipped a heading level.Tests: the full haxcms-elements suite (975 tests) passes three runs in a row. Precheck passes. The settings e2e tests pass against haxcms-nodejs main with these files applied.
Round 3: order, Reports first, icons, Content and Views redesigns
hax:admin-*glyphs added to hax-iconset, all to one spec: 24×24, one filled path, ~2px weight, readable at 14–16px, based on Material Design Icons (Apache-2.0, credited in the README). Every icon in the dialog, including the section parts in the rail, now uses them. The spec is documented under "Admin icons" inhax-ui-admin.md.SITE_ADMIN_TITLEBAR_STYLESsets it for the one dialog and for the screens not in it yet: Structure, its import step and Revisions. Their modal styles are the only change; outline designer and its save path are untouched. The outline import, outline ops and revisions e2e tests pass.>separator line up evenly.Round 4: Dashboard and nesting
?admin=admin-reports(-<screen>), so existing links keep working.--hax-ui-indentin. A guide line runs down from the section's icon with a tick into each part, the same treatment outline-designer uses for its tree. The narrow icon-only rail drops the indent.Round 5: Structure in the dialog, collapsible rail
haxcms-save-outlinepayload. The shell only fills its body with it (registryfill: true, no action bar), so the save and failure behaviour don't change.hasUnsavedChangesandconfirmLeave(). The shell'srequestLeave(rail, breadcrumb, browser back) and the editor's guard call it, so you're asked once, in the same words as before. The close button still runs the dialog's own guard, which now also works when the dialog is the shell's child.hax:admin-rail-collapse/hax:admin-rail-expand(new in the hax iconset). The choice is kept per browser.hax-ui-admin.md(Section rail, the new icon names, a proposed--hax-ui-rail-width-collapsedtoken).Round 6: Page history (revisions) redesign
Revisions is now Page history, a part of Content in the dialog (
?admin=admin-content-revisions), following the design in haxtheweb/issues#3191 and the clunky-UI report in haxtheweb/issues#3025.Timeline.
A), system updates (S), and changes made outside HAX (X, labelled "Not labelled").Labels come from the
[actor:op:txn]commit prefix. The screen uses the backend's parsed fields when it sends them (haxcms-php, and haxcms-nodejs once haxcms-nodejs#151 lands), and parses the message itself otherwise. History from before op codes gets its labels from HAX's own commit wording.One version.
Restore explains itself instead of using
confirm(). It says:A failed restore now says so: haxcms-site-editor fires
haxcms-node-revision-restore-failedinstead of leaving the screen spinning.Shell additions.
tag/load/footer/fillon a child, read throughsiteAdminRouteView).headerTextinhaxcms-admin-section-state).No backend change. It uses the same events and API, so nothing needs mirroring in PHP.
Not covered yet (needs Node + PHP):
site.jsondon't appear, because the list only includes commits that touched the page file.Both are in #3191.
Tests:
Round 7: phones, and a bigger dialog everywhere
clamp(0px, 2vw - 8px, 32px)), up to 1680px wide, and the corners go from square to 8px the same way.SITE_ADMIN_MODAL_SIZE, which Structure's import step uses too.--simple-modal-border-radiusand--simple-modal-container-padding. web-dialog's5vw 24pxstays the default.actionsslot, so there is no footer bar. It's the same button, confirm and save.show-hints).https://claude.ai/code/session_01PfFvVUkTpLX8DucJwVoaVk
Generated by Claude Code