Add link support to mediawiki grammer. Fix a bug in rr.Node()
This commit is contained in:
@@ -99,6 +99,12 @@ var mediawiki = {
|
||||
rr.Ref('singleline-wikichunk'),
|
||||
rr.EndOfLine())),
|
||||
|
||||
'multiline-a': rr.Node('a', rr.Sequence(
|
||||
rr.Literal('[['),
|
||||
rr.Node('href', rr.SingleLineText()),
|
||||
rr.Literal('|'),
|
||||
rr.Ref('multiline-wikichunk'),
|
||||
rr.Literal(']]'))),
|
||||
'multiline-b': rr.Node('b', rr.Sequence(
|
||||
rr.Literal("'''"),
|
||||
rr.Ref('multiline-wikichunk'),
|
||||
@@ -152,6 +158,12 @@ var mediawiki = {
|
||||
rr.Ref('multiline-wikichunk'),
|
||||
rr.Literal('</ins>'))),
|
||||
|
||||
'singleline-a': rr.Node('a', rr.Sequence(
|
||||
rr.Literal('[['),
|
||||
rr.Node('href', rr.SingleLineText()),
|
||||
rr.Literal('|'),
|
||||
rr.Ref('singleline-wikichunk'),
|
||||
rr.Literal(']]'))),
|
||||
'singleline-b': rr.Node('b', rr.Sequence(
|
||||
rr.Literal("'''"),
|
||||
rr.Ref('singleline-wikichunk'),
|
||||
@@ -224,7 +236,8 @@ var mediawiki = {
|
||||
rr.Ref('list-ulli2'),
|
||||
rr.Ref('list-ulli3'),
|
||||
|
||||
rr.Ref('multiline-bi'),
|
||||
rr.Ref('multiline-a'),
|
||||
rr.Ref('multiline-bi'), // before b and i
|
||||
rr.Ref('multiline-b'),
|
||||
rr.Ref('multiline-blockquote'),
|
||||
rr.Ref('multiline-code'),
|
||||
@@ -243,7 +256,8 @@ var mediawiki = {
|
||||
rr.MultiLineText())),
|
||||
|
||||
'singleline-wikichunk': rr.ZeroOrMore(rr.Or(
|
||||
rr.Ref('singleline-bi'),
|
||||
rr.Ref('singleline-a'),
|
||||
rr.Ref('singleline-bi'), // before b and i
|
||||
rr.Ref('singleline-b'),
|
||||
rr.Ref('singleline-code'),
|
||||
rr.Ref('singleline-comment'),
|
||||
|
||||
@@ -304,7 +304,7 @@ rr.Node_.prototype.match = function(context) {
|
||||
var node = document.createElement(this.name_);
|
||||
var nodes = next['value']['nodes'];
|
||||
for (var i = 0; i < nodes.length; i++) {
|
||||
node.appendChild(nodes[i]);
|
||||
node.appendChild(nodes[i].cloneNode(true));
|
||||
}
|
||||
node.normalize();
|
||||
return {
|
||||
|
||||
16
test.js
16
test.js
@@ -81,3 +81,19 @@ QUnit.test('singleline-wikichunk', function(assert) {
|
||||
var iterable = context.rules['wikidoc'].match(context);
|
||||
assert.equal(iterable.next().value.nodes[0].innerHTML, expected);
|
||||
});
|
||||
|
||||
QUnit.test('Link', function(assert) {
|
||||
assert.expect(1);
|
||||
var content = [
|
||||
"[[http://www.example.com/foo|Test text ''with formatting'']]"
|
||||
].join('\n');
|
||||
|
||||
var expected = [
|
||||
'<p><a><href>http://www.example.com/foo</href>',
|
||||
'Test text <i>with formatting</i></a></p>'
|
||||
].join('');
|
||||
|
||||
var context = new rr.Context(mediawiki, content);
|
||||
var iterable = context.rules['wikidoc'].match(context);
|
||||
assert.equal(iterable.next().value.nodes[0].innerHTML, expected);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user