Arlolra has uploaded a new change for review.
https://gerrit.wikimedia.org/r/223603
Change subject: Context
......................................................................
Context
Change-Id: Iab988c9fb28d6191ef22fdd9a7adac50907ac75b
---
M lib/wts.TagHandlers.js
M tests/parserTests-blacklist.js
2 files changed, 27 insertions(+), 3 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/parsoid
refs/changes/03/223603/1
diff --git a/lib/wts.TagHandlers.js b/lib/wts.TagHandlers.js
index 2f773ab..444ff43 100644
--- a/lib/wts.TagHandlers.js
+++ b/lib/wts.TagHandlers.js
@@ -505,7 +505,9 @@
cb(getListBullets(state, node), node);
}
var liHandler =
state.serializer.wteHandlers.liHandler.bind(state.serializer.wteHandlers, node);
+ state.singleLineContext.enforce();
state.serializeChildren(node, cb, liHandler);
+ state.singleLineContext.pop();
},
sepnls: {
before: id({min: 1, max: 2}),
@@ -529,16 +531,24 @@
dd: {
handle: function(node, state, cb) {
var firstChildElement = DU.firstNonSepChildNode(node);
+ var isRow = false;
if (!DU.isList(firstChildElement) ||
isTplListWithoutSharedPrefix(firstChildElement)) {
// XXX: handle stx: row
if ( DU.getDataParsoid( node ).stx === 'row' ) {
+ isRow = true;
cb(':', node);
} else {
cb(getListBullets(state, node), node);
}
}
var liHandler =
state.serializer.wteHandlers.liHandler.bind(state.serializer.wteHandlers, node);
- state.serializeChildren(node, cb, liHandler);
+ if (true || isRow) {
+ state.singleLineContext.enforce();
+ state.serializeChildren(node, cb, liHandler);
+ state.singleLineContext.pop();
+ } else {
+ state.serializeChildren(node, cb, liHandler);
+ }
},
sepnls: {
before: function(node, othernode) {
@@ -566,6 +576,11 @@
handle: function(node, state, cb, wrapperUnmodified) {
var dp = DU.getDataParsoid( node );
var wt = dp.startTagSrc || "{|";
+ var indentTable = node.parentNode.nodeName === 'DD' &&
+ true; // DU.previousNonSepSibling(node)
=== null;
+ if (indentTable) {
+ state.singleLineContext.disable();
+ }
cb(serializeTableTag(wt, '', state, node,
wrapperUnmodified), node);
if (!DU.isLiteralHTMLNode(node)) {
state.wikiTableNesting++;
@@ -582,6 +597,9 @@
state.sep.constraints = {a: {}, b: {}, min: 1,
max: 2};
}
WTSUtils.emitEndTag( dp.endTagSrc || "|}", node, state,
cb );
+ if (indentTable) {
+ state.singleLineContext.pop();
+ }
},
sepnls: {
before: function(node, otherNode) {
diff --git a/tests/parserTests-blacklist.js b/tests/parserTests-blacklist.js
index c947ac9..e563937 100644
--- a/tests/parserTests-blacklist.js
+++ b/tests/parserTests-blacklist.js
@@ -562,7 +562,7 @@
add("html2html", "Definition list with wikilink containing colon", "<dl
data-parsoid='{\"dsr\":[0,95,0,0]}'><dt data-parsoid='{\"dsr\":[0,24,1,0]}'>
[/index.php?title=Help</dt><dd
data-parsoid='{\"stx\":\"row\",\"dsr\":[24,60,1,0]}'>FAQ&action=edit&redlink=1
Help:FAQ]</dd>\n<dd data-parsoid='{\"dsr\":[61,95,1,0]}'> The least-read page
on Wikipedia</dd></dl>\n");
add("html2html", "Definition lists: colon in HTML attribute", "<dl
data-parsoid='{\"dsr\":[0,12,0,0]}'><dt data-parsoid='{\"dsr\":[0,12,1,0]}'> <b
data-parsoid='{\"dsr\":[2,12,3,3]}'>bold</b></dt></dl>\n");
add("html2html", "Definition Lists: Nesting: Multi-level (Parsoid only)",
"\n<dl data-parsoid='{\"dsr\":[1,116,0,0]}'><dt
data-parsoid='{\"dsr\":[1,6,1,0]}'> t1 </dt>\n<dd
data-parsoid='{\"dsr\":[7,17,1,0]}'> d1 </dd>\n<dt
data-parsoid='{\"dsr\":[18,116,1,0]}'><dl
data-parsoid='{\"dsr\":[19,116,0,0]}'><dt data-parsoid='{\"dsr\":[19,24,1,0]}'>
t2 </dt>\n<dd data-parsoid='{\"dsr\":[25,62,2,0]}'> <span typeof=\"mw:Nowiki\"
data-parsoid='{\"dsr\":[28,48,8,9]}'>:d2</span> </dd>\n<dt
data-parsoid='{\"dsr\":[63,116,2,0]}'><dl
data-parsoid='{\"dsr\":[65,116,0,0]}'><dt data-parsoid='{\"dsr\":[65,70,1,0]}'>
t3 </dt>\n<dd data-parsoid='{\"dsr\":[71,116,3,0]}'> <span typeof=\"mw:Nowiki\"
data-parsoid='{\"dsr\":[75,96,8,9]}'>::d3</span>
</dd></dl></dt></dl></dt></dl>\n");
-add("html2html", "Definition Lists: colons occurring in tags", "\n<dl
data-parsoid='{\"dsr\":[1,73,0,0]}'><dt data-parsoid='{\"dsr\":[1,4,1,0]}'>
a</dt>\n<dd data-parsoid='{\"dsr\":[5,8,1,0]}'> b</dd>\n<dt
data-parsoid='{\"dsr\":[9,20,1,0]}'> <b
data-parsoid='{\"dsr\":[11,20,3,3]}'>a:b</b></dt>\n<dt
data-parsoid='{\"dsr\":[21,30,1,0]}'> <i
data-parsoid='{\"dsr\":[23,30,2,2]}'>a:b</i></dt>\n<dt
data-parsoid='{\"dsr\":[31,49,1,0]}'> <span
data-parsoid='{\"stx\":\"html\",\"dsr\":[33,49,6,7]}'>a:b</span></dt>\n<dd
data-parsoid='{\"dsr\":[50,65,1,0]}'><div
data-parsoid='{\"stx\":\"html\",\"dsr\":[51,65,5,6]}'>a:b</div></dd>\n<dd
data-parsoid='{\"dsr\":[66,73,1,0]}'><div
data-parsoid='{\"stx\":\"html\",\"autoInsertedEnd\":true,\"dsr\":[67,73,5,0]}'>a</div></dd></dl>\n\n<dl
data-parsoid='{\"dsr\":[75,78,0,0]}'><dd data-parsoid='{\"dsr\":[75,78,1,0]}'>
b</dd></dl>\n\n\n<dl data-parsoid='{\"dsr\":[87,104,0,0]}'><dt
data-parsoid='{\"dsr\":[87,90,1,0]}'> a</dt>\n<dd
data-parsoid='{\"dsr\":[91,94,1,0]}'> b</dd>\n<dt
data-parsoid='{\"dsr\":[95,104,1,0]}'> <i
data-parsoid='{\"dsr\":[97,104,2,2]}'>a:b</i></dt></dl>\n\n<dl
data-parsoid='{\"dsr\":[106,117,0,0]}'><dd
data-parsoid='{\"dsr\":[106,117,1,0]}'><dl
data-parsoid='{\"dsr\":[107,117,0,0]}'><dd
data-parsoid='{\"dsr\":[107,117,1,0]}'><dl
data-parsoid='{\"dsr\":[108,117,0,0]}'><dt
data-parsoid='{\"dsr\":[108,117,1,0]}'> <i
data-parsoid='{\"dsr\":[110,117,2,2]}'>a:b</i></dt></dl></dd></dl></dd></dl>\n");
+add("html2html", "Definition Lists: colons occurring in tags", "\n<dl
data-parsoid='{\"dsr\":[1,73,0,0]}'><dt data-parsoid='{\"dsr\":[1,4,1,0]}'>
a</dt>\n<dd data-parsoid='{\"dsr\":[5,8,1,0]}'> b</dd>\n<dt
data-parsoid='{\"dsr\":[9,20,1,0]}'> <b
data-parsoid='{\"dsr\":[11,20,3,3]}'>a:b</b></dt>\n<dt
data-parsoid='{\"dsr\":[21,30,1,0]}'> <i
data-parsoid='{\"dsr\":[23,30,2,2]}'>a:b</i></dt>\n<dt
data-parsoid='{\"dsr\":[31,49,1,0]}'> <span
data-parsoid='{\"stx\":\"html\",\"dsr\":[33,49,6,7]}'>a:b</span></dt>\n<dd
data-parsoid='{\"dsr\":[50,65,1,0]}'><div
data-parsoid='{\"stx\":\"html\",\"dsr\":[51,65,5,6]}'>a:b</div></dd>\n<dd
data-parsoid='{\"dsr\":[66,73,1,0]}'><div
data-parsoid='{\"stx\":\"html\",\"autoInsertedEnd\":true,\"dsr\":[67,73,5,0]}'>a</div></dd></dl>\n\n<dl
data-parsoid='{\"dsr\":[75,80,0,0]}'><dd data-parsoid='{\"dsr\":[75,80,1,0]}'>
b </dd></dl>\n<dl data-parsoid='{\"dsr\":[87,104,0,0]}'><dt
data-parsoid='{\"dsr\":[87,90,1,0]}'> a</dt>\n<dd
data-parsoid='{\"dsr\":[91,94,1,0]}'> b</dd>\n<dt
data-parsoid='{\"dsr\":[95,104,1,0]}'> <i
data-parsoid='{\"dsr\":[97,104,2,2]}'>a:b</i></dt></dl>\n\n<dl
data-parsoid='{\"dsr\":[106,117,0,0]}'><dd
data-parsoid='{\"dsr\":[106,117,1,0]}'><dl
data-parsoid='{\"dsr\":[107,117,0,0]}'><dd
data-parsoid='{\"dsr\":[107,117,1,0]}'><dl
data-parsoid='{\"dsr\":[108,117,0,0]}'><dt
data-parsoid='{\"dsr\":[108,117,1,0]}'> <i
data-parsoid='{\"dsr\":[110,117,2,2]}'>a:b</i></dt></dl></dd></dl></dd></dl>\n");
add("html2html", "Definition Lists: colons and tables 1", "<dl
data-parsoid='{\"dsr\":[0,26,0,0]}'><dd data-parsoid='{\"dsr\":[0,12,1,0]}'>
<table data-parsoid='{\"dsr\":[2,12,2,2]}'>\n\n<tbody
data-parsoid='{\"dsr\":[6,10,0,0]}'><tr
data-parsoid='{\"autoInsertedEnd\":true,\"autoInsertedStart\":true,\"dsr\":[6,9,0,0]}'><td
data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[6,9,1,0]}'>
x</td></tr>\n</tbody></table></dd>\n\n<dd data-parsoid='{\"dsr\":[14,26,1,0]}'>
<table data-parsoid='{\"dsr\":[16,26,2,2]}'>\n\n<tbody
data-parsoid='{\"dsr\":[20,24,0,0]}'><tr
data-parsoid='{\"autoInsertedEnd\":true,\"autoInsertedStart\":true,\"dsr\":[20,23,0,0]}'><td
data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[20,23,1,0]}'>
y</td></tr>\n</tbody></table></dd></dl>\n");
add("html2html", "Indented table markup mixed with indented pre content
(proposed in bug 6200)", " <table
data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[1,58,2,0]}'>\n \n <tbody
data-parsoid='{\"dsr\":[7,58,0,0]}'><tr
data-parsoid='{\"autoInsertedEnd\":true,\"autoInsertedStart\":true,\"dsr\":[7,58,0,0]}'><td
data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[7,58,1,0]}'>\n<pre
data-parsoid='{\"dsr\":[9,58,1,0]}'>Text that should be rendered preformatted
\n\n|}</pre></td></tr></tbody></table>\n");
add("html2html", "Build table with wikilink", "<table class=\"wikitable\"
data-parsoid='{\"dsr\":[0,216,20,2]}'>\n\n<tbody
data-parsoid='{\"dsr\":[22,214,0,0]}'><tr
data-parsoid='{\"autoInsertedEnd\":true,\"autoInsertedStart\":true,\"dsr\":[22,47,0,0]}'><th
data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[22,31,1,0]}'> header
</th>\n<th data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[32,47,1,0]}'>
second header</th></tr>\n\n<tr style=\"color:red;\"
data-parsoid='{\"startTagSrc\":\"|-\",\"autoInsertedEnd\":true,\"dsr\":[49,148,21,0]}'>\n<td
data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[71,106,1,0]}'> data <a
rel=\"mw:WikiLink\" href=\"./Wiki/Main_Page\" title=\"Wiki/Main Page\"
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Main_Page\"},\"sa\":{\"href\":\"wiki/Main
Page\"},\"dsr\":[78,105,17,2]}'>linktext</a> </td>\n<td
data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[107,148,1,0]}'> second data <a
rel=\"mw:WikiLink\" href=\"./Wiki/Main_Page\" title=\"Wiki/Main Page\"
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Main_Page\"},\"sa\":{\"href\":\"wiki/Main
Page\"},\"dsr\":[121,148,17,2]}'>linktext</a></td></tr>\n\n<tr
data-parsoid='{\"startTagSrc\":\"|-\",\"autoInsertedEnd\":true,\"dsr\":[150,213,2,0]}'>\n<td
data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[153,160,1,0]}'> data
</td>\n<td data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[161,213,1,0]}'>
second data <a rel=\"mw:WikiLink\" href=\"./Wiki/Main_Page\" title=\"Wiki/Main
Page\"
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Main_Page\"},\"sa\":{\"href\":\"wiki/Main
Page\"},\"dsr\":[175,213,17,2]}'>link|text with
pipe</a></td></tr>\n</tbody></table>\n");
@@ -1003,7 +1003,7 @@
add("html2wt", "Definition Lists: Mixed Lists: Test 10", "*#; foo \n*#:
bar\n");
add("html2wt", "Definition Lists: Mixed Lists: Test 11", "\n*#*#;*;; foo
:bar\n*#*#; boo :baz\n");
add("html2wt", "Definition Lists: Weird Ones: Test 1", "\n*#;*::;; foo : bar
(who uses this?)\n");
-add("html2wt", "Definition Lists: colons occurring in tags", "\n; a\n: b\n;
'''a:b'''\n; ''a:b''\n; <span>a:b</span>\n:<div>a:b</div>\n:<div>a\n\n:
b\n\n</div>\n; a\n: b\n; ''a:b''\n\n::; ''a:b''\n");
+add("html2wt", "Definition Lists: colons occurring in tags", "\n; a\n: b\n;
'''a:b'''\n; ''a:b''\n; <span>a:b</span>\n:<div>a:b</div>\n:<div>a\n\n: b
</div>\n; a\n: b\n; ''a:b''\n\n::; ''a:b''\n");
add("html2wt", "Definition Lists: colons and tables 1", ": {|\n\n| x\n|}\n\n:
{|\n\n| y\n|}\n");
add("html2wt", "Definition Lists: colons and tables 2", ": {|\n\n| x\n|}\n:
{|\n\n| y\n|}\n");
add("html2wt", "External links: Free with trailing punctuation",
"http://example.com,\nhttp://example.com;\nhttp://example.com\\\nhttp://example.com.\nhttp://example.com:\nhttp://example.com!\nhttp://example.com?\nhttp://example.com)\nhttp://example.com/url_with_(brackets)\n(http://example.com/url_without_brackets)\nhttp://example.com/url_with_entity \nhttp://example.com/url_with_entity \nhttp://example.com/url_with_entity \nhttp://example.com/url_with_entity<nowiki/><\nhttp://example.com/url_with_entity<\nhttp://example.com/url_with_entity<\n");
@@ -1839,6 +1839,12 @@
add("selser", "Definition Lists: colons occurring in tags
[[3,[4],0,[[2]],4,0,4,[4],0,[[2]],2,[[4]],2,0,0,0,0,4]]",
":5lkbigrdwdx11yvi\n;'''cqslr7dvsnd5z5mia:b'''\n:
masspab3x9don7b9\n;<i>a:b</i>\n:
oa29nopebnoy9zfr\n;98d7as2k961ug14i\n;<div>1bwhvaem3l0izfra:b</div>\n:
vnpj9u2knmmzehfr\n;<div>zv7k43lu5scq5mi\n:
1f68p993haor\n:b</div>\n;{{echo|a:b}}\n: hxhtxsqncdi");
add("selser", "Definition Lists: colons occurring in tags
[[0,0,4,[2],3,[4],0,[[3]],4,[[3]],0,2,3,0,0,0,0,[0,0,1]]]", ";a:b\n:
h3264ujrqrkq33di\n;h56kdmfdrrv34n29'''a:b'''\n;fxo6p8aww4p9zfr\n;<span></span>\n:
h438k9e0o3aexw29\n;<div></div>\n:
diwu40dj1dims4i\n;<div>a\n:b</div>\n;{{echo|a:b}}\n;{{echo|''a:b''}}\n;;;''a:b''");
add("selser", "Definition Lists: colons occurring in tags [1]",
";a:b\n;'''a:b'''\n;<i>a:b</i>\n;<span>a:b</span>\n;<div>a:b</div>\n;<div>a\n:b</div>\n;{{echo|a:b}}\n;{{echo|''a:b''}}\n;;;''a:b''");
+add("selser", "Definition Lists: template interaction [[2],4,[3]]", ":
fhmam5fy8tsgiudi\n::{{definition_list}}\nmdbj1ap0nlba9k9\n");
+add("selser", "Definition Lists: template interaction [[2],0,1]", ":
6tno4vwr15tp4x6r\n::{{definition_list}}\n\n:one\n::{{definition_list}}\n:::two\n:::three\n::four");
+add("selser", "Definition Lists: template interaction [[2],4,4]", ":
cx9229zg50khjjor\n::{{definition_list}}\ns3c1hwrvl262mx6r\n\nrgau1w5fm9529\n");
+add("selser", "Definition Lists: template interaction [2,0,3]",
"vm4ub34eb3ej0pb9\n::{{definition_list}}\n");
+add("selser", "Definition Lists: template interaction [2,2,4]",
"kmod6mh9sjaif6r\n::{{definition_list}}\nbe75tgv7lksp2e29\n\nx0t3zoho6d48ia4i\n");
+add("selser", "Definition Lists: template interaction [2,2,1]",
"vkpanwv1uhzlrf6r\n::{{definition_list}}\nawinsivdpgxbhuxr\n\n:one\n::{{definition_list}}\n:::two\n:::three\n::four");
add("selser", "BUG 289: \">\"-token in bracketed URL [2]",
"ll0lxyd1rfgpsyvi\n\n[http://www.example.com/<hello> stuff]");
add("selser", "BUG 289: \">\"-token in bracketed URL [1]",
"[http://www.example.com/<hello> stuff]");
add("selser", "BUG 289: \">\"-token in bracketed URL [[2]]",
"kemi29jie4b1emi[http://www.example.com/<hello> stuff]");
--
To view, visit https://gerrit.wikimedia.org/r/223603
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Iab988c9fb28d6191ef22fdd9a7adac50907ac75b
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Arlolra <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits