Files
RenewCMS/docs/design/screens/localization-conflicts-moves.md
T

3.6 KiB

Localization: conflicts and article moves

Board: RenewCMS Screens Localization. Frame: LocaleFrame. Data: locale-fixtures.js (single fixture source), tables in locale-spec.js. UI copy says "article", never "story". No revision numbers, IDs or HTTP status names in user-facing text.

L11 Conflicts and sessions

Route: editor API: existing 401/403/404/409 patterns

The conflict dialog gives four choices. Keep my changes is the only filled button; the other three are secondary and equal. "Someone else saved this version at

ID State Trigger Selector Sizes Fixture
loc.l11.session Session expired Draft kept in this browser; editor behind shows the unsaved changes LocaleFrame{s:{v:"pm",x:"session"}} 1440, 390 Journal
loc.l11.restored Restored after login Editor shows "Restored unsaved changes from 14:18" LocaleFrame{s:{v:"pm",x:"restored"}} 1440, 390 Journal
loc.conflict Concurrent update Four choices, local work kept; Save over theirs outlined in error colour with a warning icon LocaleFrame{s:{v:"pm",x:"conflict"}} 1440, 390 Journal
loc.l11.conflictRestored Concurrent update after session expiry Restored changes notice above the choices LocaleFrame{s:{v:"pm",x:"conflictRestored"}} 1440, 390 Journal
loc.l11.reloadConfirm Reload theirs: confirm "This discards your unsaved changes." LocaleFrame{s:{v:"pm",x:"reloadConfirm"}} 1440, 390 Journal
loc.l11.conflict2 Second conflict Save over theirs failed again; nothing overwritten LocaleFrame{s:{v:"pm",x:"conflict2"}} 1440, 390 Journal
loc.l11.download Download started Toast; changes still in the editor LocaleFrame{s:{v:"pm",x:"download"}} 1440, 390 Journal

L11b Move article to another site

Route: editor → site select API: proposed: POST /v1/story/{story_id}/move { site }

Entry point is the site select in the editor details. Articles move as a whole, only when the destination enables every language they contain (disabled ones included) and the user can edit all versions. The note lists readable versions only; versions the user can't read are not listed or counted. Moves are atomic and revalidate permissions and conflicts in the transaction.

ID State Trigger Selector Sizes Fixture
loc.l11b.moveSelect Site select Note lists all four versions, one tagged Read only LocaleFrame{s:{v:"pm",x:"moveSelect"}} 1440, 390 Journal
loc.l11b.moveSelectHidden Site select, hidden version Arabic not readable: not listed or counted LocaleFrame{s:{v:"pm",x:"moveSelectHidden"}} 1440, 390 Journal
loc.l11b.moveConfirm Confirm Move to Atelier? LocaleFrame{s:{v:"pm",x:"moveConfirm"}} 1440, 390 Journal
loc.l11b.moveBusy In progress Dialog locked LocaleFrame{s:{v:"pm",x:"moveBusy"}} 1440, 390 Journal
loc.l11b.moveDone Moved Toast LocaleFrame{s:{v:"pm",x:"moveDone"}} 1440, 390 Journal
loc.l11b.move Language missing in destination Notes enables English only LocaleFrame{s:{v:"pm",x:"move"}} 1440, 390 Journal, Notes
loc.l11b.moveSlug Address conflict Names the conflicting readable version and its address; unreadable ones are never named LocaleFrame{s:{v:"pm",x:"moveSlug"}} 1440, 390 Journal, Atelier
loc.l11b.movePerm No permission Neutral LocaleFrame{s:{v:"pm",x:"movePerm"}} 1440, 390 Journal
loc.l11b.moveFail Move failed Server error, nothing moved LocaleFrame{s:{v:"pm",x:"moveFail"}} 1440, 390 Journal