From aa14587b052a0aa7884aaf27183981975168ab14 Mon Sep 17 00:00:00 2001 From: erdgeist Date: Mon, 13 Jul 2026 17:09:31 +0200 Subject: Wire real autosave into translation editing The shared TinyMCE setup initializes cccms.setup_autosave() on any page with a textarea.with_editor, unconditionally starting a 7-second interval that submits to the form's data-autosave-url -- which the translation edit form never set, so the interval PUT the current page URL itself and 404'd on a nonexistent route. Fixed by actually giving it something to talk to, rather than suppressing it: a real autosave endpoint, and update now goes through Node#autosave!/#save_draft! -- the same pipeline the primary editor uses, fixed earlier this session for exactly this kind of cross-locale carryover. This was the autosave-buffer parity already flagged as due after the proof of concept; the shared JS just forced the timing. --- app/controllers/page_translations_controller.rb | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'app/controllers/page_translations_controller.rb') diff --git a/app/controllers/page_translations_controller.rb b/app/controllers/page_translations_controller.rb index 47f01f7d..9446cd2d 100644 --- a/app/controllers/page_translations_controller.rb +++ b/app/controllers/page_translations_controller.rb @@ -3,7 +3,7 @@ class PageTranslationsController < ApplicationController before_action :login_required before_action :find_node - before_action :find_locale, :only => [:show, :edit, :update, :destroy] + before_action :find_locale, :only => [:show, :edit, :update, :autosave, :destroy] def index page = @node.draft || @node.head @@ -26,8 +26,8 @@ class PageTranslationsController < ApplicationController end def update - draft = ensure_editable_draft - Globalize.with_locale(@locale) { draft.update!(translation_params) } + Globalize.with_locale(@locale) { @node.autosave!(translation_params, current_user) } + @node.save_draft!(current_user) flash[:notice] = "#{@locale.upcase} translation saved. Publish the draft to make it live." if params[:commit] == "Save + Unlock + Exit" @@ -41,6 +41,17 @@ class PageTranslationsController < ApplicationController redirect_to node_path(@node) end + def autosave + Globalize.with_locale(@locale) { @node.autosave!(translation_params, current_user) } + head :ok + rescue LockedByAnotherUser => e + render plain: e.message, status: :locked + rescue ActiveRecord::RecordInvalid => e + render plain: e.message, status: :unprocessable_entity + rescue StandardError => e + render plain: "Autosave failed", status: :internal_server_error + end + def destroy base = @node.draft || @node.head unless base && base.translated_locales.include?(@locale) -- cgit v1.3