diff --git a/app/assets/javascripts/cmtool/html_edit.js.coffee b/app/assets/javascripts/cmtool/html_edit.js.coffee
index a2ff351..08416e2 100644
--- a/app/assets/javascripts/cmtool/html_edit.js.coffee
+++ b/app/assets/javascripts/cmtool/html_edit.js.coffee
@@ -17,6 +17,10 @@ class HtmlEdit
editor.setValue template_field.val(), -1
editor.getSession().setMode 'ace/mode/slim'
console.log "Editing Emblem using Slim mode for ACE editor"
+ else if data_mode = text_field.data('mode')
+ editor.setValue text_field.val(), -1
+ editor.getSession().setMode "ace/mode/#{data_mode}"
+ console.log "Editing #{data_mode} using ACE editor"
else
editor.setValue text_field.val(), -1
editor.getSession().setMode 'ace/mode/handlebars'
diff --git a/app/views/cmtool/pages/_form.html.slim b/app/views/cmtool/pages/_form.html.slim
index fd304fa..af27948 100644
--- a/app/views/cmtool/pages/_form.html.slim
+++ b/app/views/cmtool/pages/_form.html.slim
@@ -37,6 +37,12 @@ javascript:
.field
= f.label :footer
= f.text_area :footer, rows: 15, cols: 80, class: 'html-content'
+ = collapsible_content 'Page Settings (JSON)' do
+ .field
+ = f.label :page_settings
+ %p.help-text JSON configuration for this page. Use Ace editor in JSON mode.
+ = f.text_area :page_settings, rows: 12, cols: 80, class: 'html-content', 'data-mode' => 'json',
+ value: (f.object.page_settings.presence || {}).to_json
.form-row
.form-label= f.label :parent_id
.form-field= f.select :parent_id, tree_options_for_select(Page.full_tree(@page.locale || Page.locales.first), exclude: @page.id, selected: @page.parent_id), include_blank: ' -- '
diff --git a/lib/cmtool/includes/page.rb b/lib/cmtool/includes/page.rb
index 9bab51a..35ed4ae 100644
--- a/lib/cmtool/includes/page.rb
+++ b/lib/cmtool/includes/page.rb
@@ -21,6 +21,13 @@ module Cmtool
klass.property :active, type: :boolean, default: true
klass.property :layout
klass.property :in_menu, type: :boolean, default: true
+ klass.property :page_settings, default: {}
+
+ # Parse JSON string from form submission
+ klass.send(:define_method, :page_settings=) do |val|
+ val = JSON.parse(val) if val.is_a?(String)
+ super(val)
+ end
klass.has_ancestry by_property: :locale