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 /app/helpers | |
parent | d8fd858c9cba69c04e6934f438d045dad2717e90 (diff) | |
download | rails-63add5acc4a9bd84907bf6bf17de307792336539.tar.gz rails-63add5acc4a9bd84907bf6bf17de307792336539.tar.bz2 rails-63add5acc4a9bd84907bf6bf17de307792336539.zip |
Extract BC3's rich_text_field helper
Diffstat (limited to 'app/helpers')
-rw-r--r-- | app/helpers/active_text/tag_helper.rb | 46 |
1 files changed, 46 insertions, 0 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 |