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.Literal('### '),
|
||||||
rr.Ref('singleline-wikichunk'),
|
rr.Ref('singleline-wikichunk'),
|
||||||
rr.EndOfLine())),
|
rr.EndOfLine())),
|
||||||
'list-pre': rr.Node('pre', rr.Sequence(
|
'list-pre': rr.Node('preline', rr.Sequence(
|
||||||
rr.StartOfLine(),
|
rr.StartOfLine(),
|
||||||
rr.Literal(' '),
|
rr.Literal(' '),
|
||||||
rr.SingleLineText(),
|
rr.SingleLineText(),
|
||||||
|
rr.Insert('\n'),
|
||||||
rr.EndOfLine())),
|
rr.EndOfLine())),
|
||||||
'list-ulli1': rr.Node('ulli1', rr.Sequence(
|
'list-ulli1': rr.Node('ulli1', rr.Sequence(
|
||||||
rr.StartOfLine(),
|
rr.StartOfLine(),
|
||||||
@@ -137,14 +138,14 @@ mediawiki = rr.Parser({
|
|||||||
rr.Literal("''"),
|
rr.Literal("''"),
|
||||||
rr.Ref('multiline-wikichunk'),
|
rr.Ref('multiline-wikichunk'),
|
||||||
rr.Literal("''"))),
|
rr.Literal("''"))),
|
||||||
'multiline-img': rr.Node('imgtemp', rr.Sequence(
|
'multiline-figure': rr.Node('figure', rr.Sequence(
|
||||||
rr.Literal('[[File:'),
|
rr.Literal('[[File:'),
|
||||||
rr.Node('src', rr.SingleLineText()),
|
rr.Node('src', rr.SingleLineText()),
|
||||||
rr.ZeroOrMore(rr.Sequence(
|
rr.ZeroOrMore(rr.Sequence(
|
||||||
rr.Literal('|'),
|
rr.Literal('|'),
|
||||||
rr.Node('option', rr.SingleLineText()))),
|
rr.Node('option', rr.SingleLineText()))),
|
||||||
rr.Literal('|'),
|
rr.Literal('|'),
|
||||||
rr.Node('caption', rr.Ref('multiline-wikichunk')),
|
rr.Node('figcaption', rr.Ref('multiline-wikichunk')),
|
||||||
rr.Literal(']]'))),
|
rr.Literal(']]'))),
|
||||||
'multiline-nowiki': rr.Sequence(
|
'multiline-nowiki': rr.Sequence(
|
||||||
rr.Literal('<nowiki>'),
|
rr.Literal('<nowiki>'),
|
||||||
@@ -245,7 +246,7 @@ mediawiki = rr.Parser({
|
|||||||
rr.Ref('list-ulli2'),
|
rr.Ref('list-ulli2'),
|
||||||
rr.Ref('list-ulli3'),
|
rr.Ref('list-ulli3'),
|
||||||
|
|
||||||
rr.Ref('multiline-img'),
|
rr.Ref('multiline-figure'),
|
||||||
rr.Ref('multiline-a'),
|
rr.Ref('multiline-a'),
|
||||||
rr.Ref('multiline-bi'),
|
rr.Ref('multiline-bi'),
|
||||||
rr.Ref('multiline-b'),
|
rr.Ref('multiline-b'),
|
||||||
@@ -306,5 +307,10 @@ mediawiki = rr.Parser({
|
|||||||
rr.GroupSiblings('ol', ['olli3']),
|
rr.GroupSiblings('ol', ['olli3']),
|
||||||
rr.RenameElement('olli1', 'li'),
|
rr.RenameElement('olli1', 'li'),
|
||||||
rr.RenameElement('olli2', '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 ============ */
|
/* ============ 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} parentName
|
||||||
* @param {string} childNames
|
* @param {string} childNames
|
||||||
@@ -767,6 +811,10 @@ rr.RenameElement = function(oldName, newName) {
|
|||||||
for (var i = 0; i < node.childNodes.length; i++) {
|
for (var i = 0; i < node.childNodes.length; i++) {
|
||||||
newNode.appendChild(node.childNodes[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);
|
node.parentNode.replaceChild(newNode, node);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
13
test.js
13
test.js
@@ -34,7 +34,8 @@ QUnit.test('Base', function(assert) {
|
|||||||
': But blockquotes are easy',
|
': But blockquotes are easy',
|
||||||
':: Even larger ones',
|
':: Even larger ones',
|
||||||
'::::: And really huge 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');
|
].join('\n');
|
||||||
|
|
||||||
var expected = [
|
var expected = [
|
||||||
@@ -55,8 +56,8 @@ QUnit.test('Base', function(assert) {
|
|||||||
"<def>I don't really understand what a definition is</def><blockquote>",
|
"<def>I don't really understand what a definition is</def><blockquote>",
|
||||||
'But blockquotes are easy</blockquote><blockquote2>Even larger ones',
|
'But blockquotes are easy</blockquote><blockquote2>Even larger ones',
|
||||||
'</blockquote2><blockquote5>And really huge ones</blockquote5><pre>This ',
|
'</blockquote2><blockquote5>And really huge ones</blockquote5><pre>This ',
|
||||||
'line is pre-formatted and <del>not interpolated</del>',
|
'line is pre-formatted and <del>not interpolated</del>\nThis ',
|
||||||
'</pre></p>'
|
'line is also pre-formatted\n</pre></p>'
|
||||||
].join('');
|
].join('');
|
||||||
|
|
||||||
assert.equal(mediawiki.parseFromString(content).innerHTML, expected);
|
assert.equal(mediawiki.parseFromString(content).innerHTML, expected);
|
||||||
@@ -91,15 +92,15 @@ QUnit.test('Link', function(assert) {
|
|||||||
assert.equal(mediawiki.parseFromString(content).innerHTML, expected);
|
assert.equal(mediawiki.parseFromString(content).innerHTML, expected);
|
||||||
});
|
});
|
||||||
|
|
||||||
QUnit.test('Image', function(assert) {
|
QUnit.test('Figure', function(assert) {
|
||||||
assert.expect(1);
|
assert.expect(1);
|
||||||
var content = [
|
var content = [
|
||||||
"[[File:http://www.example.com/foo|Test image ''with formatting'']]"
|
"[[File:http://www.example.com/foo|Test image ''with formatting'']]"
|
||||||
].join('\n');
|
].join('\n');
|
||||||
|
|
||||||
var expected = [
|
var expected = [
|
||||||
'<p><imgtemp><src>http://www.example.com/foo</src>',
|
'<p><figure><img src=\"http://www.example.com/foo\"><figcaption>Test ',
|
||||||
'<caption>Test image <i>with formatting</i></caption></imgtemp></p>'
|
'image <i>with formatting</i></figcaption></figure></p>'
|
||||||
].join('');
|
].join('');
|
||||||
|
|
||||||
assert.equal(mediawiki.parseFromString(content).innerHTML, expected);
|
assert.equal(mediawiki.parseFromString(content).innerHTML, expected);
|
||||||
|
|||||||
Reference in New Issue
Block a user