summaryrefslogtreecommitdiff
path: root/app/controllers/nodes_controller.rb
diff options
context:
space:
mode:
authorerdgeist <erdgeist@erdgeist.org>2026-07-13 16:36:38 +0200
committererdgeist <erdgeist@erdgeist.org>2026-07-13 16:36:38 +0200
commit0b6ae26f3b4c3c8278e569fa6644a544e996c25d (patch)
tree6c0e8dd23fa243e6bf7e6473aebae3f13ea20dea /app/controllers/nodes_controller.rb
parente2705119ba718d40ff4f29c00027c2dfecef01ce (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.rb12
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]