Simplify passing the locale to translatable fields
Creating a new form builder might be too much. My idea was so the view uses more or less the same syntax it would use with Rails' default builder, and so we can use `text_field` instead of `translatable_text_field`.
This commit is contained in:
@@ -19,23 +19,10 @@ module TranslatableFormHelper
|
||||
end
|
||||
|
||||
class TranslatableFormBuilder < FoundationRailsHelper::FormBuilder
|
||||
|
||||
def translatable_text_field(method, options = {})
|
||||
translatable_field(:text_field, method, options)
|
||||
end
|
||||
|
||||
def translatable_text_area(method, options = {})
|
||||
translatable_field(:text_area, method, options)
|
||||
end
|
||||
|
||||
def translatable_cktext_area(method, options = {})
|
||||
translatable_field(:cktext_area, method, options)
|
||||
end
|
||||
|
||||
def translatable_fields(&block)
|
||||
@object.globalize_locales.map do |locale|
|
||||
Globalize.with_locale(locale) do
|
||||
fields_for(:translations, @object.translations.where(locale: locale).first_or_initialize) do |translations_form|
|
||||
fields_for(:translations, @object.translations.where(locale: locale).first_or_initialize, builder: TranslationsFieldsBuilder) do |translations_form|
|
||||
@template.concat translations_form.hidden_field(
|
||||
:_destroy,
|
||||
value: !@template.enable_locale?(@object, locale),
|
||||
@@ -44,18 +31,25 @@ module TranslatableFormHelper
|
||||
|
||||
@template.concat translations_form.hidden_field(:locale, value: locale)
|
||||
|
||||
yield translations_form, locale
|
||||
yield translations_form
|
||||
end
|
||||
end
|
||||
end.join.html_safe
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class TranslationsFieldsBuilder < FoundationRailsHelper::FormBuilder
|
||||
%i[text_field text_area cktext_area].each do |field|
|
||||
define_method field do |attribute, options = {}|
|
||||
super attribute, translations_options(options)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def translatable_field(field_type, method, options = {})
|
||||
locale = options.delete(:locale)
|
||||
final_options = @template.merge_translatable_field_options(options, locale)
|
||||
send(field_type, method, final_options)
|
||||
def translations_options(options)
|
||||
@template.merge_translatable_field_options(options, @object.locale)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -28,18 +28,16 @@
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<%= f.translatable_fields do |translations_form, locale| %>
|
||||
<%= f.translatable_fields do |translations_form| %>
|
||||
<div class="small-12 medium-6 column">
|
||||
<%= translations_form.translatable_text_field :title,
|
||||
locale: locale,
|
||||
<%= translations_form.text_field :title,
|
||||
placeholder: t("admin.banners.banner.title"),
|
||||
data: {js_banner_title: "js_banner_title"},
|
||||
label: t("admin.banners.banner.title") %>
|
||||
</div>
|
||||
|
||||
<div class="small-12 column">
|
||||
<%= translations_form.translatable_text_field :description,
|
||||
locale: locale,
|
||||
<%= translations_form.text_field :description,
|
||||
placeholder: t("admin.banners.banner.description"),
|
||||
data: {js_banner_description: "js_banner_description"},
|
||||
label: t("admin.banners.banner.description") %>
|
||||
|
||||
Reference in New Issue
Block a user