diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-10-14 19:26:10 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-10-14 19:26:10 +0100 |
| commit | 9de6bed1cd4f24f591c4aa2a3012501bd792c157 (patch) | |
| tree | fbbab3fd96a8c48c124aef2e4ec34317c7a40440 | |
| parent | e55b8f2614fccb2ac54b3ddebe1ed3eeb12e32c9 (diff) | |
Don't escape double quotes outside of attributes
| -rw-r--r-- | NEWS | 2 | ||||
| -rw-r--r-- | lib/writers/html-writer.js | 12 | ||||
| -rw-r--r-- | tests/html/write.tests.js | 12 |
3 files changed, 23 insertions, 3 deletions
@@ -5,6 +5,8 @@ * Collapse similar non-fresh HTML elements together. +* Don't escape double quotes outside of attributes. + # 0.3.25 * When the styleMap option is passed as a string, ignore lines beginning with #. diff --git a/lib/writers/html-writer.js b/lib/writers/html-writer.js index f1761c9..456e894 100644 --- a/lib/writers/html-writer.js +++ b/lib/writers/html-writer.js @@ -114,12 +114,12 @@ function simpleWriter() { function generateAttributeString(attributes) { return _.map(attributes, function(value, key) { - return util.format(' %s="%s"', key, escapeHtml(value)); + return util.format(' %s="%s"', key, escapeHtmlAttribute(value)); }).join(""); } function text(value) { - fragments.push(escapeHtml(value)); + fragments.push(escapeHtmlText(value)); } function append(html) { @@ -140,8 +140,14 @@ function simpleWriter() { }; } +function escapeHtmlText(value) { + return value + .replace(/&/g, '&') + .replace(/</g, '<') + .replace(/>/g, '>'); +} -function escapeHtml(value) { +function escapeHtmlAttribute(value) { return value .replace(/&/g, '&') .replace(/"/g, '"') diff --git a/tests/html/write.tests.js b/tests/html/write.tests.js index 34eaf15..e4a5813 100644 --- a/tests/html/write.tests.js +++ b/tests/html/write.tests.js @@ -12,12 +12,24 @@ describe("HTML write", function() { "<>&"); }); + test("double quotes outside of attributes are not escaped", function() { + assert.equal( + generateString(html.text('"')), + '"'); + }); + test("element attributes are HTML escaped", function() { assert.equal( generateString(html.freshElement("p", {"x": "<"})), '<p x="<"></p>'); }); + test("double quotes inside attributes are escaped", function() { + assert.equal( + generateString(html.freshElement("p", {"x": '"'})), + '<p x="""></p>'); + }); + test("element children are written", function() { assert.equal( generateString(html.freshElement("p", {}, [html.text("Hello")])), |
