feat(editor): multilingual editor 3/3 — page properties, page menu, pending changes, paste confirmation, Languages view, module lists #203
No reviewers
Labels
No labels
bug
enhancement
needs-triage
ready-for-agent
ready-for-human
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Cloonar/deckle!203
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "afk/200"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Third editor slice of the multilingual work: everything around the page. No engine changes.
Closes #200
What changes
Page properties of a translation: the translation's own title, address segment, menu title and description, each with the default-language value and Copy. The segment shows the resulting address live and shows the server's 422 on
slugon the field. The home page has no segment field; a hint says a language's home is always/<code>/. Appearance and Hidden are read-only with the server's note. Access shows Enabled per language, the address in this language and the translation file. The Properties docheader has Hide/Show .Page ⋯ menu:
Cut and paste:
fetchMoveRefssendstoParentUidand readstranslations {moved, dropped}. Before the paste, the dialog names the languages that move with the element and warns about each one that is dropped (no connected target translation, a free one, or an untranslated container). When anything is dropped the button reads "Move and drop " in danger style. A same-page paste into a container is checked too.Pending changes: no
langon pending, publish-all or discard-all. There is one row per file, and a translation row has a language badge, names its file and opens that language. On a multilingual site the panel header says publishing takes every language together.DisabledLinksDialogshows the badge forlinkedFromentries that carrylang.Languages view: a Columns / Languages toggle (UI state, not part of the URL). Each non-inherited slot gets one column per language:
Each column has Open. Page answers are cached per language alongside the per-language trees.
Modules and categories: outside the default language the list shows translated titles and the default-language title in italics with its code for untranslated entries. It adds a Translation column with an inline Translate…. New is disabled with a hint. The ⋮ menu offers Translate to … and Delete translation….
Link picker: the chips and the picker show the target's address in the current language, plus a note when the link falls back to the default-language page.
AGENTS.md "Editor modules": a module list shows the selected language's entries, and New creates entries in the default language. No skill walks through these editor screens (checked with grep), so the skills are unchanged.
Notes for review
GET /api/page/delete-plantranslationsis a count. The Delete dialog names the languages from the per-language trees and falls back to the count when it can't.DeleteTranslationDialog(module entries) andDeleteTranslationPageDialog(pages) are near-duplicates; they can be merged in a follow-up.Verification
cd web && npx tsc --noEmit -p .: clean.npx vitest run: 110 files, 2758 tests pass. The only edits to existing tests are the pending-changes request shape (HostHeader,PendingChanges,Publish,api).npx vite build: OK.go test ./...: pass, including the AGENTS.md and skills drift tests.PageFormTranslationPageMenuTranslationandpageactionsL10nPasteTranslationsLinkPickerLangPendingChangesLangLanguagesViewandlanguagePagesModuleTranslationharness servewalk-through ontestdata/multilingual-site.🤖 Generated with Claude Code
[autoland] verdict: pass
PASS — validated by the autoland lander.
Signal:
labctl pr checks 203aggregate success (ci / build-and-test, 15m10s: npm ci/build/test, go vet, go test incl. the skills and AGENTS.md drift tests, go build) on head78eb6c5. Not re-run locally.Conventions: Conventional Commits title and commits;
Closes #200present; branch is current with main (merge-base = origin/main354a2ac), no conflicts.Scope matches #200, web only (no engine changes; the slug placeholder the form reads already comes from internal/pageops/translation_settings.go):
translations), TreePane, PageScreen, EntryEditor.toParentUidandtranslations; PageContent.tsx moved/dropped wording and "Move and drop ".lang; PendingChanges.tsx per-file rows with language badges, header note; DisabledLinksDialog lang badge.Edits to existing tests are limited to the pending-changes request shape (HostHeader, PendingChanges, Publish, api), which the acceptance criteria allow. AGENTS.md "Editor modules" gained the module-list language paragraph. Skills are rightly unchanged: no skill step walks through these editor screens (checked the verify-site and edit-content language mentions). deckle-hosted does not call the changed client functions.
Note (non-blocking, disclosed in the PR, as on #202): the manual
harness servewalk-through on testdata/multilingual-site has not been done.