diff options
| author | erdgeist <erdgeist@erdgeist.org> | 2026-07-13 16:36:38 +0200 |
|---|---|---|
| committer | erdgeist <erdgeist@erdgeist.org> | 2026-07-13 16:36:38 +0200 |
| commit | 0b6ae26f3b4c3c8278e569fa6644a544e996c25d (patch) | |
| tree | 6c0e8dd23fa243e6bf7e6473aebae3f13ea20dea /app/controllers/nodes_controller.rb | |
| parent | e2705119ba718d40ff4f29c00027c2dfecef01ce (diff) | |
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.
Diffstat (limited to 'app/controllers/nodes_controller.rb')
| -rw-r--r-- | app/controllers/nodes_controller.rb | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/app/controllers/nodes_controller.rb b/app/controllers/nodes_controller.rb index c1468be..249602d 100644 --- a/app/controllers/nodes_controller.rb +++ b/app/controllers/nodes_controller.rb | |||
| @@ -16,6 +16,8 @@ class NodesController < ApplicationController | |||
| 16 | :revert | 16 | :revert |
| 17 | ] | 17 | ] |
| 18 | 18 | ||
| 19 | around_action :pin_to_default_locale, :only => [:show, :edit, :update, :autosave] | ||
| 20 | |||
| 19 | def index | 21 | def index |
| 20 | @nodes = Node.root.descendants.includes(:head, :draft) | 22 | @nodes = Node.root.descendants.includes(:head, :draft) |
| 21 | .order('id DESC') | 23 | .order('id DESC') |
| @@ -59,9 +61,9 @@ class NodesController < ApplicationController | |||
| 59 | end | 61 | end |
| 60 | 62 | ||
| 61 | def show | 63 | def show |
| 62 | node = Node.find(params[:id]) | 64 | @page = @node.draft || @node.head |
| 63 | node.wipe_draft! | 65 | @default_translation = @page.translations.find_by(:locale => I18n.default_locale) |
| 64 | @page = node.draft || node.head | 66 | @translations = @page.translation_summary |
| 65 | end | 67 | end |
| 66 | 68 | ||
| 67 | def edit | 69 | def edit |
| @@ -248,6 +250,10 @@ class NodesController < ApplicationController | |||
| 248 | end | 250 | end |
| 249 | end | 251 | end |
| 250 | 252 | ||
| 253 | def pin_to_default_locale | ||
| 254 | Globalize.with_locale(I18n.default_locale) { yield } | ||
| 255 | end | ||
| 256 | |||
| 251 | def descendant_counts_for(ordered_with_level) | 257 | def descendant_counts_for(ordered_with_level) |
| 252 | counts = Hash.new(0) | 258 | counts = Hash.new(0) |
| 253 | stack = [] # [node, level, index] | 259 | stack = [] # [node, level, index] |
