diff --git a/app/views/shared/_common_globalize_locales.html.erb b/app/components/shared/globalize_locales_component.html.erb
similarity index 83%
rename from app/views/shared/_common_globalize_locales.html.erb
rename to app/components/shared/globalize_locales_component.html.erb
index 2ead5fd8c..aa73c9b24 100644
--- a/app/views/shared/_common_globalize_locales.html.erb
+++ b/app/components/shared/globalize_locales_component.html.erb
@@ -3,19 +3,19 @@
">
- <%= selected_languages_description(resource) %>
+ <%= selected_languages_description %>
<%= select_tag :select_language,
- options_for_select_language(resource),
+ options_for_select_language,
prompt: t("shared.translations.select_language_prompt"),
class: "js-select-language" %>
- <%= select_language_error(resource) %>
+ <%= select_language_error %>
<% if manage_languages %>
<% I18n.available_locales.each do |locale| %>
<%= link_to t("shared.translations.remove_language"), "#",
- style: display_destroy_locale_style(resource, locale),
+ style: display_destroy_locale_style(locale),
class: "delete js-delete-language js-delete-#{locale}",
data: { locale: locale } %>
<% end %>
diff --git a/app/components/shared/globalize_locales_component.rb b/app/components/shared/globalize_locales_component.rb
new file mode 100644
index 000000000..8060cadc2
--- /dev/null
+++ b/app/components/shared/globalize_locales_component.rb
@@ -0,0 +1,91 @@
+class Shared::GlobalizeLocalesComponent < ApplicationComponent
+ attr_reader :resource, :manage_languages
+ use_helpers :first_translation, :first_marked_for_destruction_translation,
+ :enabled_locale?, :name_for_locale, :highlight_translation_html_class
+
+ def initialize(resource = nil, manage_languages: true)
+ @resource = resource
+ @manage_languages = manage_languages
+ end
+
+ private
+
+ def options_for_select_language
+ options_for_select(available_locales, selected_locale)
+ end
+
+ def available_locales
+ I18n.available_locales.select { |locale| enabled_locale?(resource, locale) }.map do |locale|
+ [name_for_locale(locale), locale, { data: { locale: locale }}]
+ end
+ end
+
+ def selected_locale
+ return first_i18n_content_translation_locale if resource.blank?
+
+ if resource.locales_not_marked_for_destruction.any?
+ first_translation(resource)
+ elsif resource.locales_persisted_and_marked_for_destruction.any?
+ first_marked_for_destruction_translation(resource)
+ else
+ I18n.locale
+ end
+ end
+
+ def first_i18n_content_translation_locale
+ if I18nContentTranslation.existing_languages.count == 0 ||
+ I18nContentTranslation.existing_languages.include?(I18n.locale)
+ I18n.locale
+ else
+ I18nContentTranslation.existing_languages.first
+ end
+ end
+
+ def selected_languages_description
+ sanitize(t("shared.translations.languages_in_use", count: active_languages_count))
+ end
+
+ def select_language_error
+ return if resource.blank?
+
+ current_translation = resource.translation_for(selected_locale)
+ if current_translation.errors.added? :base, :translations_too_short
+ tag.div class: "small error" do
+ current_translation.errors[:base].join(", ")
+ end
+ end
+ end
+
+ def active_languages_count
+ if resource.blank?
+ no_resource_languages_count
+ elsif resource.locales_not_marked_for_destruction.size > 0
+ resource.locales_not_marked_for_destruction.size
+ else
+ 1
+ end
+ end
+
+ def no_resource_languages_count
+ count = I18nContentTranslation.existing_languages.count
+ count > 0 ? count : 1
+ end
+
+ def display_destroy_locale_style(locale)
+ "display: none;" unless display_destroy_locale_link?(locale)
+ end
+
+ def display_destroy_locale_link?(locale)
+ selected_locale == locale
+ end
+
+ def options_for_add_language
+ options_for_select(all_language_options, nil)
+ end
+
+ def all_language_options
+ I18n.available_locales.map do |locale|
+ [name_for_locale(locale), locale]
+ end
+ end
+end
diff --git a/app/helpers/globalize_helper.rb b/app/helpers/globalize_helper.rb
index 2aab2c593..1d824fd06 100644
--- a/app/helpers/globalize_helper.rb
+++ b/app/helpers/globalize_helper.rb
@@ -1,14 +1,4 @@
module GlobalizeHelper
- def options_for_select_language(resource)
- options_for_select(available_locales(resource), selected_locale(resource))
- end
-
- def available_locales(resource)
- I18n.available_locales.select { |locale| enabled_locale?(resource, locale) }.map do |locale|
- [name_for_locale(locale), locale, { data: { locale: locale }}]
- end
- end
-
def enabled_locale?(resource, locale)
return site_customization_enable_translation?(locale) if resource.blank?
@@ -21,27 +11,6 @@ module GlobalizeHelper
end
end
- def selected_locale(resource)
- return first_i18n_content_translation_locale if resource.blank?
-
- if resource.locales_not_marked_for_destruction.any?
- first_translation(resource)
- elsif resource.locales_persisted_and_marked_for_destruction.any?
- first_marked_for_destruction_translation(resource)
- else
- I18n.locale
- end
- end
-
- def first_i18n_content_translation_locale
- if I18nContentTranslation.existing_languages.count == 0 ||
- I18nContentTranslation.existing_languages.include?(I18n.locale)
- I18n.locale
- else
- I18nContentTranslation.existing_languages.first
- end
- end
-
def first_translation(resource)
if resource.locales_not_marked_for_destruction.include? I18n.locale
I18n.locale
@@ -58,36 +27,6 @@ module GlobalizeHelper
end
end
- def selected_languages_description(resource)
- sanitize(t("shared.translations.languages_in_use", count: active_languages_count(resource)))
- end
-
- def select_language_error(resource)
- return if resource.blank?
-
- current_translation = resource.translation_for(selected_locale(resource))
- if current_translation.errors.added? :base, :translations_too_short
- tag.div class: "small error" do
- current_translation.errors[:base].join(", ")
- end
- end
- end
-
- def active_languages_count(resource)
- if resource.blank?
- no_resource_languages_count
- elsif resource.locales_not_marked_for_destruction.size > 0
- resource.locales_not_marked_for_destruction.size
- else
- 1
- end
- end
-
- def no_resource_languages_count
- count = I18nContentTranslation.existing_languages.count
- count > 0 ? count : 1
- end
-
def display_translation_style(resource, locale)
"display: none;" unless display_translation?(resource, locale)
end
@@ -104,24 +43,6 @@ module GlobalizeHelper
end
end
- def display_destroy_locale_style(resource, locale)
- "display: none;" unless display_destroy_locale_link?(resource, locale)
- end
-
- def display_destroy_locale_link?(resource, locale)
- selected_locale(resource) == locale
- end
-
- def options_for_add_language
- options_for_select(all_language_options, nil)
- end
-
- def all_language_options
- I18n.available_locales.map do |locale|
- [name_for_locale(locale), locale]
- end
- end
-
def translation_enabled_tag(locale, enabled)
hidden_field_tag("enabled_translations[#{locale}]", (enabled ? 1 : 0))
end
diff --git a/app/views/admin/site_customization/information_texts/_globalize_locales.html.erb b/app/views/admin/site_customization/information_texts/_globalize_locales.html.erb
index 8462c141a..1d38894fb 100644
--- a/app/views/admin/site_customization/information_texts/_globalize_locales.html.erb
+++ b/app/views/admin/site_customization/information_texts/_globalize_locales.html.erb
@@ -1 +1 @@
-<%= render "shared/common_globalize_locales", resource: nil, manage_languages: true %>
+<%= render Shared::GlobalizeLocalesComponent.new %>
diff --git a/app/views/shared/_globalize_locales.html.erb b/app/views/shared/_globalize_locales.html.erb
index 32f1b9ce0..e35125c6f 100644
--- a/app/views/shared/_globalize_locales.html.erb
+++ b/app/views/shared/_globalize_locales.html.erb
@@ -1,5 +1,6 @@
<% if translations_interface_enabled? %>
- <%= render "shared/common_globalize_locales",
- resource: resource,
- manage_languages: defined?(manage_languages) ? manage_languages : true %>
+ <%= render Shared::GlobalizeLocalesComponent.new(
+ resource,
+ manage_languages: defined?(manage_languages) ? manage_languages : true
+ ) %>
<% end %>