List of pre-formatted line support. Real image conversion to figure support.
This commit is contained in:
@@ -78,10 +78,11 @@ mediawiki = rr.Parser({
|
||||
rr.Literal('### '),
|
||||
rr.Ref('singleline-wikichunk'),
|
||||
rr.EndOfLine())),
|
||||
'list-pre': rr.Node('pre', rr.Sequence(
|
||||
'list-pre': rr.Node('preline', rr.Sequence(
|
||||
rr.StartOfLine(),
|
||||
rr.Literal(' '),
|
||||
rr.SingleLineText(),
|
||||
rr.Insert('\n'),
|
||||
rr.EndOfLine())),
|
||||
'list-ulli1': rr.Node('ulli1', rr.Sequence(
|
||||
rr.StartOfLine(),
|
||||
@@ -137,14 +138,14 @@ mediawiki = rr.Parser({
|
||||
rr.Literal("''"),
|
||||
rr.Ref('multiline-wikichunk'),
|
||||
rr.Literal("''"))),
|
||||
'multiline-img': rr.Node('imgtemp', rr.Sequence(
|
||||
'multiline-figure': rr.Node('figure', rr.Sequence(
|
||||
rr.Literal('[[File:'),
|
||||
rr.Node('src', rr.SingleLineText()),
|
||||
rr.ZeroOrMore(rr.Sequence(
|
||||
rr.Literal('|'),
|
||||
rr.Node('option', rr.SingleLineText()))),
|
||||
rr.Literal('|'),
|
||||
rr.Node('caption', rr.Ref('multiline-wikichunk')),
|
||||
rr.Node('figcaption', rr.Ref('multiline-wikichunk')),
|
||||
rr.Literal(']]'))),
|
||||
'multiline-nowiki': rr.Sequence(
|
||||
rr.Literal('<nowiki>'),
|
||||
@@ -245,7 +246,7 @@ mediawiki = rr.Parser({
|
||||
rr.Ref('list-ulli2'),
|
||||
rr.Ref('list-ulli3'),
|
||||
|
||||
rr.Ref('multiline-img'),
|
||||
rr.Ref('multiline-figure'),
|
||||
rr.Ref('multiline-a'),
|
||||
rr.Ref('multiline-bi'),
|
||||
rr.Ref('multiline-b'),
|
||||
@@ -306,5 +307,10 @@ mediawiki = rr.Parser({
|
||||
rr.GroupSiblings('ol', ['olli3']),
|
||||
rr.RenameElement('olli1', 'li'),
|
||||
rr.RenameElement('olli2', 'li'),
|
||||
rr.RenameElement('olli3', 'li')
|
||||
rr.RenameElement('olli3', 'li'),
|
||||
rr.GroupSiblings('pre', ['preline']),
|
||||
rr.ExtractElement('preline'),
|
||||
rr.SplitElementAndNest('src', ['imgtemp', 'src']),
|
||||
rr.ChildToAttribute('imgtemp', 'src'),
|
||||
rr.RenameElement('imgtemp', 'img')
|
||||
]);
|
||||
|
||||
@@ -725,6 +725,50 @@ rr.SingleLineText = function() {
|
||||
/* ============ Filter factories ============ */
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} parentName
|
||||
* @param {string} childName
|
||||
* @return {rr.typeFilter}
|
||||
*/
|
||||
rr.ChildToAttribute = function(parentName, childName) {
|
||||
parentName = parentName.toUpperCase();
|
||||
childName = childName.toUpperCase();
|
||||
return function(node) {
|
||||
if (node.nodeName != parentName) {
|
||||
return;
|
||||
}
|
||||
for (var i = 0; i < node.childNodes.length; i++) {
|
||||
var childNode = node.childNodes[i];
|
||||
if (childNode.nodeName == childName) {
|
||||
node.setAttribute(childName, childNode.textContent);
|
||||
node.removeChild(childNode);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} nodeName
|
||||
* @return {rr.typeFilter}
|
||||
*/
|
||||
rr.ExtractElement = function(nodeName) {
|
||||
nodeName = nodeName.toUpperCase();
|
||||
return function(node) {
|
||||
if (node.nodeName != nodeName) {
|
||||
return;
|
||||
}
|
||||
var parentNode = node.parentNode;
|
||||
for (var i = 0; i < node.childNodes.length; i++) {
|
||||
parentNode.appendChild(node.childNodes[i]);
|
||||
}
|
||||
parentNode.removeChild(node);
|
||||
parentNode.normalize();
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} parentName
|
||||
* @param {string} childNames
|
||||
@@ -767,6 +811,10 @@ rr.RenameElement = function(oldName, newName) {
|
||||
for (var i = 0; i < node.childNodes.length; i++) {
|
||||
newNode.appendChild(node.childNodes[i]);
|
||||
}
|
||||
for (var i = 0; i < node.attributes.length; i++) {
|
||||
var attribute = node.attributes[i];
|
||||
newNode.setAttribute(attribute.name, attribute.value);
|
||||
}
|
||||
node.parentNode.replaceChild(newNode, node);
|
||||
};
|
||||
};
|
||||
|
||||
13
test.js
13
test.js
@@ -34,7 +34,8 @@ QUnit.test('Base', function(assert) {
|
||||
': But blockquotes are easy',
|
||||
':: Even larger ones',
|
||||
'::::: And really huge ones',
|
||||
' This line is pre-formatted and <del>not interpolated</del>'
|
||||
' This line is pre-formatted and <del>not interpolated</del>',
|
||||
' This line is also pre-formatted'
|
||||
].join('\n');
|
||||
|
||||
var expected = [
|
||||
@@ -55,8 +56,8 @@ QUnit.test('Base', function(assert) {
|
||||
"<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>',
|
||||
'</pre></p>'
|
||||
'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);
|
||||
@@ -91,15 +92,15 @@ QUnit.test('Link', function(assert) {
|
||||
assert.equal(mediawiki.parseFromString(content).innerHTML, expected);
|
||||
});
|
||||
|
||||
QUnit.test('Image', function(assert) {
|
||||
QUnit.test('Figure', function(assert) {
|
||||
assert.expect(1);
|
||||
var content = [
|
||||
"[[File:http://www.example.com/foo|Test image ''with formatting'']]"
|
||||
].join('\n');
|
||||
|
||||
var expected = [
|
||||
'<p><imgtemp><src>http://www.example.com/foo</src>',
|
||||
'<caption>Test image <i>with formatting</i></caption></imgtemp></p>'
|
||||
'<p><figure><img src=\"http://www.example.com/foo\"><figcaption>Test ',
|
||||
'image <i>with formatting</i></figcaption></figure></p>'
|
||||
].join('');
|
||||
|
||||
assert.equal(mediawiki.parseFromString(content).innerHTML, expected);
|
||||
|
||||
Reference in New Issue
Block a user