From: Bartosz DziewoƄski Date: Wed, 11 May 2016 22:21:34 +0000 (+0200) Subject: mediawiki.jqueryMsg: Implement `` support X-Git-Tag: 1.31.0-rc.0~6957^2 X-Git-Url: http://git.cyclocoop.org/%7B%7B%20url_for%28%27admin_vote_add%27%29%20%7D%7D?a=commitdiff_plain;h=ec295365d4b4a435b5b2fc37c785b8aabaf511e3;p=lhc%2Fweb%2Fwiklou.git mediawiki.jqueryMsg: Implement `` support Only `...` is supported (self-closing `` is not). Anything inside the tag is treated as plain text and returned as-is (but escaped, if necessary, as usual). Bug: T47173 Change-Id: I9b037907470595753ef19374c87a6513b631eef8 --- diff --git a/resources/src/mediawiki/mediawiki.jqueryMsg.js b/resources/src/mediawiki/mediawiki.jqueryMsg.js index e905f69b71..8a89fbcf6e 100644 --- a/resources/src/mediawiki/mediawiki.jqueryMsg.js +++ b/resources/src/mediawiki/mediawiki.jqueryMsg.js @@ -775,6 +775,25 @@ return result; } + // ... tag. The tags are stripped and the contents are returned unparsed. + function nowiki() { + var parsedResult, plainText, + result = null; + + parsedResult = sequence( [ + makeStringParser( '' ), + // We use a greedy non-backtracking parser, so we must ensure here that we don't take too much + makeRegexParser( /^.*?(?=<\/nowiki>)/ ), + makeStringParser( '' ) + ] ); + if ( parsedResult !== null ) { + plainText = parsedResult[ 1 ]; + result = [ 'CONCAT' ].concat( plainText ); + } + + return result; + } + templateName = transform( // see $wgLegalTitleChars // not allowing : due to the need to catch "PLURAL:$1" @@ -862,6 +881,7 @@ wikilink, extlink, replacement, + nowiki, html, literal ] ); diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js index ee948bb806..8c966970fc 100644 --- a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js +++ b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js @@ -1087,6 +1087,29 @@ ); } ); + QUnit.test( 'Nowiki', 3, function ( assert ) { + mw.messages.set( 'jquerymsg-nowiki-link', 'Foo [[bar]] baz.' ); + assert.equal( + formatParse( 'jquerymsg-nowiki-link' ), + 'Foo [[bar]] baz.', + 'Link inside nowiki is not parsed' + ); + + mw.messages.set( 'jquerymsg-nowiki-htmltag', 'Foo bar baz.' ); + assert.equal( + formatParse( 'jquerymsg-nowiki-htmltag' ), + 'Foo <b>bar</b> baz.', + 'HTML inside nowiki is not parsed and escaped' + ); + + mw.messages.set( 'jquerymsg-nowiki-template', 'Foo {{bar}} baz.' ); + assert.equal( + formatParse( 'jquerymsg-nowiki-template' ), + 'Foo {{bar}} baz.', + 'Template inside nowiki is not parsed and does not cause a parse error' + ); + } ); + QUnit.test( 'Behavior in case of invalid wikitext', 3, function ( assert ) { mw.messages.set( 'invalid-wikitext', '{{FAIL}}' );