# frozen_string_literal: true # modifying to_text_area_tag and text_area_tag to strip paragraph/br tags # and convert them back into newlines for editing purposes module ActionView module Helpers module Tags class TextArea # added method to yank

and
tags and replace with newlines # this needs to reverse "add_paragraph_tags_to_text" from our html_cleaner library # TODO: this is not fully working as of 2025 (probably for years) def strip_html_breaks(content, name="") return "" if content.blank? if name =~ /content/ # might be using RTE, preserve all paragraphs as they are content.gsub(/\s*
\s*/, "
\n"). gsub(/\s*]*>\s* \s*<\/p>\s*/, "\n\n\n"). gsub(/\s*(]*>.*?<\/p>)\s*/m, "\n\n" + '\1'). strip else # no RTE, so clean up paragraphs unless they have qualifiers content = content.gsub(/\s*
\s*/, "
\n"). gsub(/\s*]*>\s* \s*<\/p>\s*/, "\n\n\n") if content.match(/\s*(]+>)(.*?)(<\/p>)\s*/m) content.gsub(/\s*(]*>.*?<\/p>)\s*/m, "\n\n" + '\1'). strip else content.gsub(/\s*]*>(.*?)<\/p>\s*/m, "\n\n" + '\1'). strip end end end def render options = @options.stringify_keys add_default_name_and_id(options) if size = options.delete("size") options["cols"], options["rows"] = size.split("x") if size.respond_to?(:split) end content = options.delete("value") { value_before_type_cast } content = strip_html_breaks(content, options['name']) content_tag("textarea", content, options) end end end end end