From 5cdda12902dc27c3de80c1ec2eb5d6faaa2c8174 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Sun, 7 Oct 2018 22:13:34 +0200 Subject: [PATCH] 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`. --- app/helpers/translatable_form_helper.rb | 32 ++++++++++--------------- app/views/admin/banners/_form.html.erb | 8 +++---- 2 files changed, 16 insertions(+), 24 deletions(-) diff --git a/app/helpers/translatable_form_helper.rb b/app/helpers/translatable_form_helper.rb index e96ecfa28..0e3df3885 100644 --- a/app/helpers/translatable_form_helper.rb +++ b/app/helpers/translatable_form_helper.rb @@ -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 diff --git a/app/views/admin/banners/_form.html.erb b/app/views/admin/banners/_form.html.erb index 9d6d971a7..322bd17f4 100644 --- a/app/views/admin/banners/_form.html.erb +++ b/app/views/admin/banners/_form.html.erb @@ -28,18 +28,16 @@
- <%= f.translatable_fields do |translations_form, locale| %> + <%= f.translatable_fields do |translations_form| %>
- <%= 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") %>
- <%= 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") %>