JavaScript: change filter application strategy and grouping/extraction code to work around ordering issues.
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
mediawiki = rr.Parser({
|
||||
'list-blockquote1': rr.Node('blockquote', rr.Sequence(
|
||||
'list-blockquote1': rr.Node('blockquote1', rr.Sequence(
|
||||
rr.StartOfLine(),
|
||||
rr.Literal(': '),
|
||||
rr.Ref('singleline-wikichunk'),
|
||||
@@ -313,5 +313,18 @@ mediawiki = rr.Parser({
|
||||
rr.SplitElementAndNest('src', ['imgtemp', 'src']),
|
||||
rr.ChildToAttribute('imgtemp', 'src'),
|
||||
rr.RenameElement('imgtemp', 'img'),
|
||||
rr.ChildToAttribute('a', 'href')
|
||||
rr.ChildToAttribute('a', 'href'),
|
||||
rr.GroupSiblings('blockquote', [
|
||||
'blockquote1', 'blockquote2', 'blockquote3', 'blockquote4',
|
||||
'blockquote5']),
|
||||
rr.GroupSiblings('blockquote', [
|
||||
'blockquote2', 'blockquote3', 'blockquote4', 'blockquote5']),
|
||||
rr.GroupSiblings('blockquote', ['blockquote3', 'blockquote4', 'blockquote5']),
|
||||
rr.GroupSiblings('blockquote', ['blockquote4', 'blockquote5']),
|
||||
rr.GroupSiblings('blockquote', ['blockquote5']),
|
||||
rr.ExtractElement('blockquote1'),
|
||||
rr.ExtractElement('blockquote2'),
|
||||
rr.ExtractElement('blockquote3'),
|
||||
rr.ExtractElement('blockquote4'),
|
||||
rr.ExtractElement('blockquote5')
|
||||
]);
|
||||
|
||||
@@ -761,7 +761,7 @@ rr.ExtractElement = function(nodeName) {
|
||||
}
|
||||
var parentNode = node.parentNode;
|
||||
for (var i = 0; i < node.childNodes.length; i++) {
|
||||
parentNode.appendChild(node.childNodes[i]);
|
||||
parentNode.insertBefore(node.childNodes[i], node);
|
||||
}
|
||||
parentNode.removeChild(node);
|
||||
parentNode.normalize();
|
||||
@@ -783,15 +783,17 @@ rr.GroupSiblings = function(parentName, childNames) {
|
||||
if (childNames.indexOf(node.nodeName) == -1) {
|
||||
return;
|
||||
}
|
||||
if (node.previousSibling &&
|
||||
node.previousSibling.nodeName == parentName) {
|
||||
// Group with previous node.
|
||||
node.previousSibling.appendChild(node);
|
||||
return;
|
||||
var nodes = [];
|
||||
for (var iterNode = node;
|
||||
iterNode && childNames.indexOf(iterNode.nodeName) != -1;
|
||||
iterNode = iterNode.nextSibling) {
|
||||
nodes.push(iterNode);
|
||||
}
|
||||
var newNode = document.createElement(parentName);
|
||||
node.parentNode.replaceChild(newNode, node);
|
||||
newNode.appendChild(node);
|
||||
for (var i = 0; i < nodes.length; i++) {
|
||||
newNode.appendChild(nodes[i]);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
@@ -859,9 +861,8 @@ rr.SplitElementAndNest = function(originalName, newNames) {
|
||||
*/
|
||||
rr.ApplyFilter = function(node, filter) {
|
||||
filter(node);
|
||||
var children = Array.prototype.slice.call(node.childNodes);
|
||||
for (var i = 0; i < children.length; i++) {
|
||||
rr.ApplyFilter(children[i], filter);
|
||||
for (var i = 0; i < node.childNodes.length; i++) {
|
||||
rr.ApplyFilter(node.childNodes[i], filter);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
9
test.js
9
test.js
@@ -54,10 +54,11 @@ QUnit.test('Base', function(assert) {
|
||||
'</li></ul></ul><li>Item 1c</li></ul><ol><li>Item 1a</li><li>Item 1b</li>',
|
||||
'<ol><li>Item 2</li><ol><li>Item 3</li></ol></ol><li>Item 1c</li></ol>',
|
||||
"<def>I don't really understand what a definition is</def><blockquote>",
|
||||
'But blockquotes are easy</blockquote><blockquote2>Even larger ones',
|
||||
'</blockquote2><blockquote5>And really huge ones</blockquote5><pre>This ',
|
||||
'line is pre-formatted and <del>not interpolated</del>\nThis ',
|
||||
'line is also pre-formatted\n</pre></p>'
|
||||
'But blockquotes are easy<blockquote>Even larger ones<blockquote>',
|
||||
'<blockquote><blockquote>And really huge ones</blockquote></blockquote>',
|
||||
'</blockquote></blockquote></blockquote><pre>This line is pre-formatted ',
|
||||
'and <del>not interpolated</del>\nThis line is also ',
|
||||
'pre-formatted\n</pre></p>'
|
||||
].join('');
|
||||
|
||||
assert.equal(mediawiki.parseFromString(content).innerHTML, expected);
|
||||
|
||||
2
test.py
2
test.py
@@ -50,4 +50,4 @@ code looks like <code>this</code>. Fixed width text looks like
|
||||
stop <u>this from being underlined</u>, or just try
|
||||
<pre>interrupting cow style.</pre><blockquote>This is a blockquote</blockquote></p><p><h2>Header 2</h2><h3>Header 3 <i>with italics</i></h3><h4>Header 4</h4><h5>Header 5</h5><h6>Header 6</h6><hr></hr><ul><li>Item 1a</li><li>Item 1b</li><ul><li>Item 2</li><ul><li>Item 3</li></ul></ul><li>Item 1c</li></ul><ol><li>Item 1a</li><li>Item 1b</li><ol><li>Item 2</li><ol><li>Item 3</li></ol></ol><li>Item 1c</li></ol><def>I don't really understand what a definition is</def><blockquote>But blockquotes are easy</blockquote><blockquote2>Even larger ones</blockquote2><blockquote5>And really huge ones</blockquote5><pre>This line is pre-formatted and <del>not interpolated</del>
|
||||
This line is also pre-formatted
|
||||
</pre></p></wikidoc>"""
|
||||
</pre></p></wikidoc>""", result
|
||||
|
||||
Reference in New Issue
Block a user