From 84ebe4d060ce3b627e812afb256d2ffee4bdbe63 Mon Sep 17 00:00:00 2001 From: Jason Woofenden Date: Wed, 17 May 2017 01:05:05 -0400 Subject: [PATCH] don't encode text inside tags that don't parse that way --- editor.js | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/editor.js b/editor.js index 564befc..1a408ba 100644 --- a/editor.js +++ b/editor.js @@ -254,6 +254,7 @@ function enc_text (txt) { }) } +// no closing tag, cannot have children void_elements = { area: true, base: true, @@ -272,6 +273,18 @@ void_elements = { wbr: true } +// contents are not html encoded +plaintext_elements = { + style: true, + script: true, + xmp: true, + iframe: true, + noembed: true, + noframes: true, + plaintext: true, + noscript: true +} + // this does not pretty-print function nodes_to_html (tree) { var attr_keys, i, k, n, ret @@ -297,7 +310,11 @@ function nodes_to_html (tree) { } break case 'text': - ret += enc_text(n.text) + if (n.parent != null ? plaintext_elements[n.parent.name] : false) { + ret += n.text + } else { + ret += enc_text(n.text) + } break case 'comment': ret += "" // TODO encode? @@ -771,6 +788,7 @@ function PeachHTML5Editor (in_el, options) { // on_init: callback for when the editable content is in place var css, opt_fragment, outer_bounds, outer_iframe_style, outer_wrap this.options = options != null ? options : {} + this.pretty_print = options.pretty_print != null ? options.pretty_print : true this.in_el = in_el this.tree = null // array of Nodes, all editable content this.tree_parent = null // this.tree is this.children. .el might === this.idoc.body @@ -1676,8 +1694,11 @@ PeachHTML5Editor.prototype.load_html = function(html) { } PeachHTML5Editor.prototype.changed = function() { this.in_el.onchange = null - this.in_el.value = this.pretty_html(this.tree) - // TODO make option for not pretty-printing: nodes_to_html(tree) + if (this.pretty_print) { + this.in_el.value = this.pretty_html(this.tree) + } else { + this.in_el.value = nodes_to_html(this.tree) + } this.in_el.onchange = (function(_this) { return function() { return _this.load_html(_this.in_el.value) }})(this) @@ -2468,7 +2489,11 @@ PeachHTML5Editor.prototype.pretty_html = function(tree, indent, parent_flags) { } break case 'text': - ret += enc_text(n.text) + if (n.parent != null ? plaintext_elements[n.parent.name] : false) { + ret += n.text + } else { + ret += enc_text(n.text) + } break case 'comment': ret += "" // TODO encode? -- 1.7.10.4