diff --git a/app/assets/javascripts/globalize.js.coffee b/app/assets/javascripts/globalize.js.coffee index 0de799318..027ac498e 100644 --- a/app/assets/javascripts/globalize.js.coffee +++ b/app/assets/javascripts/globalize.js.coffee @@ -1,6 +1,7 @@ App.Globalize = display_locale: (locale) -> + App.Globalize.enable_locale(locale) $(".js-globalize-locale-link").each -> if $(this).data("locale") == locale $(this).show() @@ -27,7 +28,13 @@ App.Globalize = next = $(".js-globalize-locale-link:visible").first() App.Globalize.highlight_locale(next) App.Globalize.display_translations(next.data("locale")) - $("#delete_translations_" + locale).val(1) + App.Globalize.disable_locale(locale) + + enable_locale: (locale) -> + $("#enabled_translations_" + locale).val(1) + + disable_locale: (locale) -> + $("#enabled_translations_" + locale).val(0) initialize: -> $('.js-globalize-locale').on 'change', -> diff --git a/app/controllers/admin/site_customization/information_texts_controller.rb b/app/controllers/admin/site_customization/information_texts_controller.rb index 25594fc4a..5da7293c1 100644 --- a/app/controllers/admin/site_customization/information_texts_controller.rb +++ b/app/controllers/admin/site_customization/information_texts_controller.rb @@ -51,7 +51,8 @@ class Admin::SiteCustomization::InformationTextsController < Admin::SiteCustomiz end def delete_translations - languages_to_delete = params[:delete_translations].select { |k, v| params[:delete_translations][k] == '1' }.keys + languages_to_delete = params[:enabled_translations].select { |_, v| v == '0' } + .keys languages_to_delete.each do |locale| I18nContentTranslation.destroy_all(locale: locale) end diff --git a/app/controllers/concerns/translatable.rb b/app/controllers/concerns/translatable.rb index 21dab63f3..3e357a56d 100644 --- a/app/controllers/concerns/translatable.rb +++ b/app/controllers/concerns/translatable.rb @@ -7,16 +7,19 @@ module Translatable private - def translation_params(params) - resource_model - .globalize_attribute_names - .select { |k| params[k].present? || - resource_model.translated_locales.include?(get_locale_from_attribute(k)) } + # TODO change method interface to remove unnecessary argument + def translation_params(_) + enabled_translations.flat_map do |locale| + resource_model.translated_attribute_names.map do |attr_name| + resource_model.localized_attr_name_for(attr_name, locale) + end + end.tap { |x| Rails.logger.debug "permitted translation params:"; p x} end + # TODO change to resource def delete_translations locales = resource_model.translated_locales - .select { |l| params.dig(:delete_translations, l) == "1" } + .select { |l| params.dig(:enabled_translations, l) == "0" } locales.each do |l| Globalize.with_locale(l) do resource.translation.destroy @@ -24,8 +27,9 @@ module Translatable end end - def get_locale_from_attribute(attribute_name) - locales = resource_model.globalize_locales - attribute_name.to_s.match(/(#{locales.join('|')})\Z/)&.captures&.first + def enabled_translations + params.fetch(:enabled_translations) + .select { |_, v| v == '1' } + .keys end end diff --git a/app/helpers/globalize_helper.rb b/app/helpers/globalize_helper.rb index fac263a1b..3dcd9520d 100644 --- a/app/helpers/globalize_helper.rb +++ b/app/helpers/globalize_helper.rb @@ -27,7 +27,11 @@ module GlobalizeHelper end def css_to_display_translation?(resource, locale) - resource.translated_locales.include?(neutral_locale(locale)) || locale == I18n.locale ? "" : "display: none" + enable_locale?(resource, locale) ? "" : "display: none" + end + + def enable_locale?(resource, locale) + resource.translated_locales.include?(neutral_locale(locale)) || locale == I18n.locale end def highlight_current?(locale)