diff options
author | Javan Makhmali <javan@javan.us> | 2018-02-12 10:16:49 -0500 |
---|---|---|
committer | Javan Makhmali <javan@javan.us> | 2018-02-12 10:16:49 -0500 |
commit | 63add5acc4a9bd84907bf6bf17de307792336539 (patch) | |
tree | 75aa2fdcbf5567d449bc8a2e77de3a059d735b59 | |
parent | d8fd858c9cba69c04e6934f438d045dad2717e90 (diff) | |
download | rails-63add5acc4a9bd84907bf6bf17de307792336539.tar.gz rails-63add5acc4a9bd84907bf6bf17de307792336539.tar.bz2 rails-63add5acc4a9bd84907bf6bf17de307792336539.zip |
Extract BC3's rich_text_field helper
-rw-r--r-- | app/helpers/active_text/tag_helper.rb | 46 | ||||
-rw-r--r-- | lib/active_text/engine.rb | 8 | ||||
-rw-r--r-- | test/dummy/app/views/messages/_form.html.erb | 2 |
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"> |