Cscott has uploaded a new change for review. https://gerrit.wikimedia.org/r/134979
Change subject: WIP: for discussion: escape all \n in <pre> ...................................................................... WIP: for discussion: escape all \n in <pre> Change-Id: I268b7c6e494f07c606d80d4d6892566e48819f68 --- M lib/XMLSerializer.js M lib/mediawiki.DOMUtils.js M lib/wts.TagHandlers.js 3 files changed, 23 insertions(+), 1 deletion(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/parsoid refs/changes/79/134979/1 diff --git a/lib/XMLSerializer.js b/lib/XMLSerializer.js index a7d2fab..7b98f6c 100644 --- a/lib/XMLSerializer.js +++ b/lib/XMLSerializer.js @@ -77,6 +77,15 @@ default: return '&#' + c.charCodeAt() + ';'; } } +/** + * Protect <pre> from broken browser serializers + */ +function _preXmlEncoder(c) { + if (c === '\n') { + return "<br\n/>"; + } + return _xmlEncoder(c); +} function serializeToString(node, options, cb){ var child; @@ -120,6 +129,15 @@ if(child){ cb(child.data); } + } else if (child && nodeName === 'pre' && options.protectPre) { + while (child) { + if (child.nodeType === TEXT_NODE) { + cb(child.data.replace(/[<&\n]/g, _preXmlEncoder)); + } else { + serializeToString(child, options, cb); + } + child = child.nextSibling; + } } else { if (child && newlineStrippingElements[localName] && child.nodeType === TEXT_NODE && /^\n/.test(child.data)) { diff --git a/lib/mediawiki.DOMUtils.js b/lib/mediawiki.DOMUtils.js index bda23dd..d7b29cd 100644 --- a/lib/mediawiki.DOMUtils.js +++ b/lib/mediawiki.DOMUtils.js @@ -1780,7 +1780,8 @@ if (!options) { options = { smartQuote: true, - innerXML: false + innerXML: false, + protectPre: true }; } if (doc.nodeName==='#document') { diff --git a/lib/wts.TagHandlers.js b/lib/wts.TagHandlers.js index a421c32..1ba71ab 100644 --- a/lib/wts.TagHandlers.js +++ b/lib/wts.TagHandlers.js @@ -872,6 +872,9 @@ h6: buildHeadingHandler("======"), br: { handle: function(node, state, cb) { + if (state.inHTMLPre) { // XXX too broad? + return cb('', node); + } if (DU.getDataParsoid( node ).stx === 'html' || node.parentNode.nodeName !== 'P') { cb('<br>', node); } else { -- To view, visit https://gerrit.wikimedia.org/r/134979 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I268b7c6e494f07c606d80d4d6892566e48819f68 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/services/parsoid Gerrit-Branch: master Gerrit-Owner: Cscott <canan...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits