diff --git a/app/controllers/admin/site_customization/pages_controller.rb b/app/controllers/admin/site_customization/pages_controller.rb
index e4c6a8ed7..056e0bc3d 100644
--- a/app/controllers/admin/site_customization/pages_controller.rb
+++ b/app/controllers/admin/site_customization/pages_controller.rb
@@ -35,17 +35,10 @@ class Admin::SiteCustomization::PagesController < Admin::SiteCustomization::Base
private
def page_params
- attributes = [:slug,
- :title,
- :subtitle,
- :content,
- :more_info_flag,
- :print_content_flag,
- :status,
- :locale]
+ attributes = [:slug, :more_info_flag, :print_content_flag, :status, :locale]
params.require(:site_customization_page).permit(*attributes,
- *translation_params(SiteCustomization::Page)
+ translation_params(SiteCustomization::Page)
)
end
diff --git a/app/models/site_customization/page.rb b/app/models/site_customization/page.rb
index 34e470759..a17345ba0 100644
--- a/app/models/site_customization/page.rb
+++ b/app/models/site_customization/page.rb
@@ -1,16 +1,20 @@
class SiteCustomization::Page < ActiveRecord::Base
VALID_STATUSES = %w(draft published)
- validates :slug, presence: true,
- uniqueness: { case_sensitive: false },
- format: { with: /\A[0-9a-zA-Z\-_]*\Z/, message: :slug_format }
- validates :title, presence: true
- validates :status, presence: true, inclusion: { in: VALID_STATUSES }
-
translates :title, touch: true
translates :subtitle, touch: true
translates :content, touch: true
globalize_accessors
+ accepts_nested_attributes_for :translations, allow_destroy: true
+
+ translation_class.instance_eval do
+ validates :title, presence: true
+ end
+
+ validates :slug, presence: true,
+ uniqueness: { case_sensitive: false },
+ format: { with: /\A[0-9a-zA-Z\-_]*\Z/, message: :slug_format }
+ validates :status, presence: true, inclusion: { in: VALID_STATUSES }
scope :published, -> { where(status: 'published').order('id DESC') }
scope :with_more_info_flag, -> { where(status: 'published', more_info_flag: true).order('id ASC') }
diff --git a/app/views/admin/site_customization/pages/_form.html.erb b/app/views/admin/site_customization/pages/_form.html.erb
index fa8fa81f9..5dbbe651e 100644
--- a/app/views/admin/site_customization/pages/_form.html.erb
+++ b/app/views/admin/site_customization/pages/_form.html.erb
@@ -38,12 +38,15 @@
- <%= f.translatable_text_field :title %>
- <%= f.translatable_text_field :subtitle %>
-
- <%= f.translatable_cktext_area :content,
- ckeditor: { language: I18n.locale, toolbar: "admin" } %>
-
+ <%= f.translatable_fields do |translations_form| %>
+ <%= translations_form.text_field :title %>
+ <%= translations_form.text_field :subtitle %>
+
+ <%= translations_form.cktext_area :content,
+ ckeditor: { language: I18n.locale, toolbar: "admin" } %>
+
+ <% end %>
+
<%= f.submit class: "button success expanded" %>
diff --git a/config/locales/en/activerecord.yml b/config/locales/en/activerecord.yml
index 5bb1e9b55..0e93a99f2 100644
--- a/config/locales/en/activerecord.yml
+++ b/config/locales/en/activerecord.yml
@@ -211,6 +211,10 @@ en:
more_info_flag: Show in help page
print_content_flag: Print content button
locale: Language
+ site_customization/page/translation:
+ title: Title
+ subtitle: Subtitle
+ content: Content
site_customization/image:
name: Name
image: Image
diff --git a/spec/features/admin/site_customization/pages_spec.rb b/spec/features/admin/site_customization/pages_spec.rb
index 4270df93d..098710ede 100644
--- a/spec/features/admin/site_customization/pages_spec.rb
+++ b/spec/features/admin/site_customization/pages_spec.rb
@@ -7,6 +7,12 @@ feature "Admin custom pages" do
login_as(admin.user)
end
+ it_behaves_like "translatable",
+ "site_customization_page",
+ "edit_admin_site_customization_page_path",
+ %w[title subtitle],
+ { "content" => :ckeditor }
+
scenario "Index" do
custom_page = create(:site_customization_page)
visit admin_site_customization_pages_path
@@ -28,10 +34,10 @@ feature "Admin custom pages" do
click_link "Create new page"
- fill_in "site_customization_page_title_en", with: "An example custom page"
- fill_in "site_customization_page_subtitle_en", with: "Page subtitle"
+ fill_in "Title", with: "An example custom page"
+ fill_in "Subtitle", with: "Page subtitle"
fill_in "site_customization_page_slug", with: "example-page"
- fill_in "site_customization_page_content_en", with: "This page is about..."
+ fill_in "Content", with: "This page is about..."
click_button "Create Custom page"
@@ -57,7 +63,7 @@ feature "Admin custom pages" do
expect(page).to have_selector("h2", text: "An example custom page")
expect(page).to have_selector("input[value='custom-example-page']")
- fill_in "site_customization_page_title_en", with: "Another example custom page"
+ fill_in "Title", with: "Another example custom page"
fill_in "site_customization_page_slug", with: "another-custom-example-page"
click_button "Update Custom page"
diff --git a/spec/features/site_customization/custom_pages_spec.rb b/spec/features/site_customization/custom_pages_spec.rb
index d9bf01acb..662388ef2 100644
--- a/spec/features/site_customization/custom_pages_spec.rb
+++ b/spec/features/site_customization/custom_pages_spec.rb
@@ -137,123 +137,4 @@ feature "Custom Pages" do
end
end
end
-
- context "Translation" do
-
- let(:custom_page) { create(:site_customization_page, :published,
- slug: "example-page",
- title_en: "Title in English",
- title_es: "Titulo en Español",
- subtitle_en: "Subtitle in English",
- subtitle_es: "Subtitulo en Español",
- content_en: "Content in English",
- content_es: "Contenido en Español"
- ) }
-
- background do
- admin = create(:administrator)
- login_as(admin.user)
- end
-
- before do
- @edit_page_url = edit_admin_site_customization_page_path(custom_page)
- end
-
- scenario "Add a translation in Português", :js do
- visit @edit_page_url
-
- select "Português brasileiro", from: "translation_locale"
- fill_in 'site_customization_page_title_pt_br', with: 'Titulo em Português'
-
- click_button 'Update Custom page'
- expect(page).to have_content "Page updated successfully"
-
- visit @edit_page_url
- expect(page).to have_field('site_customization_page_title_en', with: 'Title in English')
-
- click_link "Español"
- expect(page).to have_field('site_customization_page_title_es', with: 'Titulo en Español')
-
- click_link "Português brasileiro"
- expect(page).to have_field('site_customization_page_title_pt_br', with: 'Titulo em Português')
- end
-
- scenario "Update a translation", :js do
- visit @edit_page_url
-
- click_link "Español"
- fill_in 'site_customization_page_title_es', with: 'Titulo correcta en Español'
-
- click_button 'Update Custom page'
- expect(page).to have_content "Page updated successfully"
-
- visit custom_page.url
-
- select('English', from: 'locale-switcher')
-
- expect(page).to have_content("Title in English")
-
- select('Español', from: 'locale-switcher')
-
- expect(page).to have_content("Titulo correcta en Español")
- end
-
- scenario "Remove a translation", :js do
- visit @edit_page_url
-
- click_link "Español"
- click_link "Remove language"
-
- expect(page).not_to have_link "Español"
-
- click_button "Update Custom page"
- visit @edit_page_url
- expect(page).not_to have_link "Español"
- end
-
- context "Globalize javascript interface" do
-
- scenario "Highlight current locale", :js do
- visit @edit_page_url
-
- expect(find("a.js-globalize-locale-link.is-active")).to have_content "English"
-
- select('Español', from: 'locale-switcher')
-
- expect(find("a.js-globalize-locale-link.is-active")).to have_content "Español"
- end
-
- scenario "Highlight selected locale", :js do
- visit @edit_page_url
-
- expect(find("a.js-globalize-locale-link.is-active")).to have_content "English"
-
- click_link "Español"
-
- expect(find("a.js-globalize-locale-link.is-active")).to have_content "Español"
- end
-
- scenario "Show selected locale form", :js do
- visit @edit_page_url
-
- expect(page).to have_field('site_customization_page_title_en', with: 'Title in English')
-
- click_link "Español"
-
- expect(page).to have_field('site_customization_page_title_es', with: 'Titulo en Español')
- end
-
- scenario "Select a locale and add it to the milestone form", :js do
- visit @edit_page_url
-
- select "Français", from: "translation_locale"
-
- expect(page).to have_link "Français"
-
- click_link "Français"
-
- expect(page).to have_field('site_customization_page_title_fr')
- end
- end
- end
end
diff --git a/spec/shared/features/translatable.rb b/spec/shared/features/translatable.rb
index c34c8ec9c..81c034aeb 100644
--- a/spec/shared/features/translatable.rb
+++ b/spec/shared/features/translatable.rb
@@ -244,7 +244,7 @@ def field_for(field, locale, visible: true)
if translatable_class.name == "I18nContent"
"contents_content_#{translatable.key}values_#{field}_#{locale}"
else
- find("[data-locale='#{locale}'][id$='#{field}']", visible: visible)[:id]
+ find("[data-locale='#{locale}'][id$='_#{field}']", visible: visible)[:id]
end
end
@@ -296,6 +296,8 @@ def update_button_text
"Update poll"
when "Poll::Question", "Poll::Question::Answer"
"Save"
+ when "SiteCustomization::Page"
+ "Update Custom page"
when "Widget::Card"
"Save card"
else