| Comment: | settings: save the description in place when Datastar is present
The form keeps its method and action, so without the script it posts and redirects exactly as before — the data-on:submit attribute is inert (0001 Principle 3). With the script it posts to the SAME endpoint, which answers a Datastar-Request with a patch of the panel instead of a page: the same discrimination the board's move already uses. The panel is one template block, drawn by the page and re-drawn by the save, so the two cannot drift — the fault this page had an hour ago. Its 'Saved.' now sits beside the control that saved, not at the top of a page the reader has scrolled away from, and the refusal travels with the panel as PanelError rather than as the page-wide Error. The URL is deliberately left alone on the patched path. ?saved=1 exists to carry a word across a navigation; there is no navigation here, and putting it in the address bar would make a later reload announce a save that already happened. |
|---|---|
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
bbd16638253d69e56638e1ac7c928659 |
| User & Date: | dmestas on 2026-08-29 00:35:18.715 |
| Other Links: | manifest | tags |
|
2026-08-29
| ||
| 00:54 |
settings: the save's confirmation has a lifetime, and is spent once
Three faults in one paragraph. It never left: a confirmation is an EVENT, and rendering it as page content claims the page CONTAINS the fact of having been saved, which is only true for a moment. A reload replayed it: ?saved=1 stays in the address bar, so a refresh — or a bookmark — congratulated the reader for a save from hours ago. And it shifted the layout under the button just pressed. A one-shot cookie now carries the word across the redirect and is spent on arrival, so the URL stays clean and the second render is silent. The lifetime is CSS: it holds four seconds, then fades AND collapses, so no empty paragraph is left behind. Not script — this page must behave the same without JavaScript, and an animation costs nothing when the script is absent. role=status announces it on insert, before any of that runs. Reduced motion keeps the message and drops the animation: someone asking for less movement is not asking to be told less. check-in: 563eb933dd user: dmestas tags: trunk | |
| 00:35 |
settings: save the description in place when Datastar is present
The form keeps its method and action, so without the script it posts and redirects exactly as before — the data-on:submit attribute is inert (0001 Principle 3). With the script it posts to the SAME endpoint, which answers a Datastar-Request with a patch of the panel instead of a page: the same discrimination the board's move already uses. The panel is one template block, drawn by the page and re-drawn by the save, so the two cannot drift — the fault this page had an hour ago. Its 'Saved.' now sits beside the control that saved, not at the top of a page the reader has scrolled away from, and the refusal travels with the panel as PanelError rather than as the page-wide Error. The URL is deliberately left alone on the patched path. ?saved=1 exists to carry a word across a navigation; there is no navigation here, and putting it in the address bar would make a later reload announce a save that already happened. check-in: bbd1663825 user: dmestas tags: trunk | |
| 00:07 |
settings: saving no longer empties the page
The description form rendered the settings page from seven fields of its own while the GET built a dozen panels, so Save returned a page with everything below the form gone — and a stray h1, because the POST also missed HideH1. Two symptoms, one cause: the same page assembled in two places. There is one builder now, and the successful save REDIRECTS, as every other settings POST already did. That leaves the saved state in one place, so the two cannot disagree again and a reload does not re-submit. The refusal path still comes back holding what the reader typed — now over the whole page rather than a fragment of it. Verified: after a save the page is byte-equivalent to the GET but for the Saved flash, with all nine panels present. check-in: d2368f6a92 user: dmestas tags: trunk | |