aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/helpers/active_text/tag_helper.rb46
-rw-r--r--lib/active_text/engine.rb8
-rw-r--r--test/dummy/app/views/messages/_form.html.erb2
3 files changed, 55 insertions, 1 deletions
diff --git a/app/helpers/active_text/tag_helper.rb b/app/helpers/active_text/tag_helper.rb
new file mode 100644
index 0000000000..c2ec7e5e8f
--- /dev/null
+++ b/app/helpers/active_text/tag_helper.rb
@@ -0,0 +1,46 @@
+module ActiveText
+ module TagHelper
+ cattr_accessor(:id, instance_accessor: false) { 0 }
+
+ def active_text_field_tag(name, value = nil, options = {})
+ options = options.symbolize_keys
+ options[:input] ||= "trix_input_#{ActiveText::TagHelper.id += 1}"
+
+ editor_tag = content_tag("trix-editor", "", options)
+ input_tag = hidden_field_tag(name, value, id: options[:input])
+
+ editor_tag + input_tag
+ end
+ end
+end
+
+module ActionView::Helpers
+ class Tags::ActiveText < Tags::Base
+ include ActiveText::TagHelper
+
+ delegate :dom_id, to: ActionView::RecordIdentifier
+
+ def render
+ options = @options.stringify_keys
+ add_default_name_and_id(options)
+ options["input"] ||= dom_id(object, [options["id"], :trix_input].compact.join("_"))
+ active_text_field_tag(options.delete("name"), editable_value, options)
+ end
+
+ def editable_value
+ value.try(:to_trix_html)
+ end
+ end
+
+ module FormHelper
+ def active_text_field(object_name, method, options = {})
+ Tags::ActiveText.new(object_name, method, self, options).render
+ end
+ end
+
+ class FormBuilder
+ def active_text_field(method, options = {})
+ @template.active_text_field(@object_name, method, objectify_options(options))
+ end
+ end
+end
diff --git a/lib/active_text/engine.rb b/lib/active_text/engine.rb
index 3f076ab321..5b16acab04 100644
--- a/lib/active_text/engine.rb
+++ b/lib/active_text/engine.rb
@@ -10,5 +10,13 @@ module ActiveText
include ActiveText::Attribute
end
end
+
+ # FIXME: Aren't helpers supposed to load automatically?
+ # https://github.com/rails/rails/issues/26627 ?
+ initializer "active_text.helper" do
+ ActiveSupport.on_load(:action_controller_base) do
+ helper ActiveText::TagHelper
+ end
+ end
end
end
diff --git a/test/dummy/app/views/messages/_form.html.erb b/test/dummy/app/views/messages/_form.html.erb
index 6f9ba7899c..6ead526229 100644
--- a/test/dummy/app/views/messages/_form.html.erb
+++ b/test/dummy/app/views/messages/_form.html.erb
@@ -18,7 +18,7 @@
<div class="field">
<%= form.label :content %>
- <%= form.text_area :content %>
+ <%= form.active_text_field :content %>
</div>
<div class="actions">