From 0b6ae26f3b4c3c8278e569fa6644a544e996c25d Mon Sep 17 00:00:00 2001 From: erdgeist Date: Mon, 13 Jul 2026 16:36:38 +0200 Subject: Add per-node translation management: list, edit, destroy, compare Replaces the old locale-switch-and-edit-the-same-screen workflow, which conflated presentation locale with content locale and let an editor silently drift into editing the wrong language with no persistent signal that anything had changed. Non-default-locale content now has its own explicit routes and screens, never sharing a route param with the ambient chrome locale. - PageTranslationsController: index/show/edit/update/destroy, scoped to Page.non_default_locales; update handles first-time creation too, so there's no separate new/create step. - Reads go through the actual PageTranslation row (Page#translation_summary), never through the Globalize fallback-bearing accessor -- fallback is correct for public rendering but wrong for editing, where a missing translation needs to look empty, not borrowed from another locale. - Translations ride on the page's own draft/head cycle; no independent publish state. - nodes#show gains a Translations section (per-locale Lock+Edit / Create+Lock, Destroy, a link into the read-only Compare view) and a locale indicator on its own default-locale content; nodes#edit, nodes#update, and nodes#autosave are pinned to the default locale via Globalize.with_locale regardless of the ambient route locale. - nodes#show no longer double-loads the node or calls wipe_draft! on every view (see previous commit for why that's now safe). - .preview_link_row is renamed .aligned_action_row now that it has a second real consumer. --- public/stylesheets/admin.css | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) (limited to 'public') diff --git a/public/stylesheets/admin.css b/public/stylesheets/admin.css index c3c0cb4..f1f4c05 100644 --- a/public/stylesheets/admin.css +++ b/public/stylesheets/admin.css @@ -637,6 +637,28 @@ table.revisions_table tr:hover { margin: 0; } +/* ============================================================ + Translation compare view (page_translations#show) + ============================================================ */ + +.translation_compare { + display: flex; + flex-direction: column; + gap: 1.5rem; +} + +@media(min-width:1016px) { + .translation_compare { + flex-direction: row; + gap: 2rem; + } + + .translation_compare_column { + flex: 1; + min-width: 0; + } +} + table.user_table td.user_login { padding-right: 30px; } @@ -834,14 +856,15 @@ form.button_to button[type="submit"] { font-weight: bold; } -.preview_link_row { +.aligned_action_row { display: flex; flex-wrap: wrap; align-items: start; gap: 0.5rem; } -.preview_link_row form.button_to { +.aligned_action_row .action_button, +.aligned_action_row form.button_to { margin-top: -5px; } -- cgit v1.3