Before: every change in the Settings window was saved immediately (localStorage for Localization/Appearance, a server call per click for sources and tags).
After: changes show at once but are only kept with a Valider button placed in the left column under the tab labels. It turns to the accent color (with "Modifications non validées") while changes wait. Annuler goes back to the saved settings; closing the window (✕, Escape, backdrop) with unsaved changes asks for confirmation and drops them; leaving the page warns too. Purge, column-width reset and the Docker "show stopped" view toggle still act at once.
How: the UI keeps unsaved source changes in settings.pending (merged over the 4 s refresh so edits are not overwritten) and compares browser prefs and tags with a baseline taken when the window opens. Tags are now sent as one list with a new PUT /api/tags (atomic; known ids keep their code, new ones get id and code; on an invalid tag nothing is saved and index points to the row, whose error is shown). "Restaurer les tags par défaut" previews GET /api/tags/defaults until Valider. READMEs (EN/FR) updated.
Checks: go vet, go build, go test -race pass (new TestTagReplace). UI exercised in a static preview with a stubbed API: save/cancel/close for language, theme, tags (incl. invalid tag), syslog, audit, log files, Docker.
<!-- ccr-projects-attribution: {"github_login":"vblogio"} -->
_Requested by **Cédric**_
Before: every change in the Settings window was saved immediately (localStorage for Localization/Appearance, a server call per click for sources and tags).
After: changes show at once but are only kept with a **Valider** button placed in the left column under the tab labels. It turns to the accent color (with "Modifications non validées") while changes wait. **Annuler** goes back to the saved settings; closing the window (✕, Escape, backdrop) with unsaved changes asks for confirmation and drops them; leaving the page warns too. Purge, column-width reset and the Docker "show stopped" view toggle still act at once.
How: the UI keeps unsaved source changes in `settings.pending` (merged over the 4 s refresh so edits are not overwritten) and compares browser prefs and tags with a baseline taken when the window opens. Tags are now sent as one list with a new `PUT /api/tags` (atomic; known ids keep their code, new ones get id and code; on an invalid tag nothing is saved and `index` points to the row, whose error is shown). "Restaurer les tags par défaut" previews `GET /api/tags/defaults` until Valider. READMEs (EN/FR) updated.
Checks: `go vet`, `go build`, `go test -race` pass (new `TestTagReplace`). UI exercised in a static preview with a stubbed API: save/cancel/close for language, theme, tags (incl. invalid tag), syslog, audit, log files, Docker.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Changes made in the Settings window show at once but are only kept with
the Save button, placed under the tab labels; it takes the accent color
while changes are waiting. Cancel goes back to the saved settings, and
closing the window (or the page) with unsaved changes asks first.
Tags are now sent as a whole list (PUT /api/tags, nothing saved when one
is invalid, the error gives its position) and "Restore default tags"
shows GET /api/tags/defaults until Save.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Requested by Cédric
Before: every change in the Settings window was saved immediately (localStorage for Localization/Appearance, a server call per click for sources and tags).
After: changes show at once but are only kept with a Valider button placed in the left column under the tab labels. It turns to the accent color (with "Modifications non validées") while changes wait. Annuler goes back to the saved settings; closing the window (✕, Escape, backdrop) with unsaved changes asks for confirmation and drops them; leaving the page warns too. Purge, column-width reset and the Docker "show stopped" view toggle still act at once.
How: the UI keeps unsaved source changes in
settings.pending(merged over the 4 s refresh so edits are not overwritten) and compares browser prefs and tags with a baseline taken when the window opens. Tags are now sent as one list with a newPUT /api/tags(atomic; known ids keep their code, new ones get id and code; on an invalid tag nothing is saved andindexpoints to the row, whose error is shown). "Restaurer les tags par défaut" previewsGET /api/tags/defaultsuntil Valider. READMEs (EN/FR) updated.Checks:
go vet,go build,go test -racepass (newTestTagReplace). UI exercised in a static preview with a stubbed API: save/cancel/close for language, theme, tags (incl. invalid tag), syslog, audit, log files, Docker.🤖 Generated with Claude Code
Pull request closed