Move globalize locales partial to a component
This commit is contained in:
@@ -3,19 +3,19 @@
|
||||
<span class="small">
|
||||
<strong class="js-languages-description"
|
||||
data-texts="<%= t("shared.translations.languages_in_use").to_json %>">
|
||||
<%= selected_languages_description(resource) %>
|
||||
<%= selected_languages_description %>
|
||||
</strong>
|
||||
</span>
|
||||
<%= 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 %>
|
||||
<div class="margin-bottom">
|
||||
<% 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 %>
|
||||
91
app/components/shared/globalize_locales_component.rb
Normal file
91
app/components/shared/globalize_locales_component.rb
Normal file
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -1 +1 @@
|
||||
<%= render "shared/common_globalize_locales", resource: nil, manage_languages: true %>
|
||||
<%= render Shared::GlobalizeLocalesComponent.new %>
|
||||
|
||||
@@ -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 %>
|
||||
|
||||
Reference in New Issue
Block a user