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}" options[:data] ||= {} options[:data][:direct_upload_url] = rails_direct_uploads_url options[:data][:blob_url_template] = rails_service_blob_url(":signed_id", ":filename") 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 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("_")) @template_object.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