textarea needs to be treated as a preformatted element
trendster opened this issue · 5 comments
trendster commented
I've noticed some odd behavior with <textarea>
. Formatted indention is showing-up in field content. I believe it needs to be treated as a preformatted element.
Here is a test along with example fix based on the existing solution for <pre>
.
diff --git a/lib/htmlbeautifier/html_parser.rb b/lib/htmlbeautifier/html_parser.rb
index 1d4285d..e18f843 100644
--- a/lib/htmlbeautifier/html_parser.rb
+++ b/lib/htmlbeautifier/html_parser.rb
@@ -31,6 +31,8 @@ module HtmlBeautifier
:foreign_block],
[%r{(<pre#{ELEMENT_CONTENT}>)(.*?)(</pre>)}omi,
:preformatted_block],
+ [%r{(<textarea#{ELEMENT_CONTENT}>)(.*?)(</textarea>)}omi,
+ :preformatted_block],
[%r{<#{HTML_VOID_ELEMENTS}(?: #{ELEMENT_CONTENT})?/?>}om,
:standalone_element],
[%r{</#{HTML_BLOCK_ELEMENTS}>}om,
diff --git a/spec/behavior_spec.rb b/spec/behavior_spec.rb
index 53c13cd..7609d6e 100644
--- a/spec/behavior_spec.rb
+++ b/spec/behavior_spec.rb
@@ -338,6 +338,21 @@ describe HtmlBeautifier do
expect(described_class.beautify(source)).to eq(source)
end
+ it "does not modify content of <textarea>" do
+ source = code <<-END
+ <div>
+ <textarea> Preformatted text
+
+ should <em>not be </em>
+ modified,
+ ever!
+
+ </textarea>
+ </div>
+ END
+ expect(described_class.beautify(source)).to eq(source)
+ end
+
threedaymonk commented
(I've fixed your issue's markup: if you don't put things in angle brackets inside backticks, it seems to confuse the parser.)
trendster commented
Thank you @threedaymonk!
threedaymonk commented
You're right. This behaviour is incorrect, and your solution looks right at first glance. As it's past 11pm here, I'll take a closer look in the next few days.
threedaymonk commented
Applied and released in 1.1.1. Thanks!
trendster commented
Thank you @threedaymonk