})
}
+// no closing tag, cannot have children
void_elements = {
- area: true,
- base: true,
- br: true,
- col: true,
- embed: true,
- hr: true,
- img: true,
- input: true,
- keygen: true,
- link: true,
- meta: true,
- param: true,
- source: true,
- track: true,
- wbr: true
+ area: 1,
+ base: 1,
+ br: 1,
+ col: 1,
+ embed: 1,
+ hr: 1,
+ img: 1,
+ input: 1,
+ keygen: 1,
+ link: 1,
+ meta: 1,
+ param: 1,
+ source: 1,
+ track: 1,
+ wbr: 1
+}
+
+// contents are not html encoded
+var plaintext_elements = {
+ style: 1,
+ script: 1,
+ xmp: 1,
+ iframe: 1,
+ noembed: 1,
+ noframes: 1,
+ plaintext: 1,
+ noscript: 1
+}
+
+// parser deletes a starting newline inside:
+var newline_eating_elements = {
+ pre: 1,
+ textarea: 1,
+ listing: 1
}
// this does not pretty-print
}
break
case 'text':
- ret += enc_text(n.text)
+ if (n.parent != null ? plaintext_elements[n.parent.name] : false) {
+ ret += n.text
+ } else if (n.parent != null ? newline_eating_elements[n.parent.name] && n.text.charAt(0) === "\n" : false) {
+ ret += enc_text("\n" + n.text)
+ } else {
+ ret += enc_text(n.text)
+ }
break
case 'comment':
ret += "<!--" + n.text + "-->" // TODO encode?
// 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
}
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)
PeachHTML5Editor.prototype.update_style_from_el = function(n) {
var style
style = n.el.getAttribute('style')
- if (style != null) {
+ if (style != null && style != '') {
return n.attrs.style = style
} else {
if (n.attrs.style != null) {
}
if (need_preserve) {
// do we have it already?
- ws = this.computed_style(n, 'white-space') // FIXME implement this
+ ws = this.computed_style(n, 'white-space')
if (ws_props[ws] != null ? !ws_props[ws].space : true) {
// 2nd arg is ideal target for css rule
ws = this.preserve_space(n, block)
eats_start_sp = false
} else {
if (is_space_code(n.text.charCodeAt(n.text.length - 1))) {
- ws = this.computed_style(n, 'white-space') // FIXME implement this
+ ws = this.computed_style(n, 'white-space')
if ((ref1 = ws_props[ws]) != null ? ref1.space : void 0) {
eats_start_sp = false
} else {
}
break
case 'text':
- ret += enc_text(n.text)
+ if (n.parent != null ? plaintext_elements[n.parent.name] : false) {
+ ret += n.text
+ } else if (n.parent != null ? newline_eating_elements[n.parent.name] && n.text.charAt(0) === "\n" : false) {
+ ret += enc_text("\n" + n.text)
+ } else {
+ ret += enc_text(n.text)
+ }
break
case 'comment':
ret += "<!--" + n.text + "-->" // TODO encode?