From ec295365d4b4a435b5b2fc37c785b8aabaf511e3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bartosz=20Dziewo=C5=84ski?= Date: Thu, 12 May 2016 00:21:34 +0200 Subject: [PATCH] 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 --- .../src/mediawiki/mediawiki.jqueryMsg.js | 20 ++++++++++++++++ .../mediawiki/mediawiki.jqueryMsg.test.js | 23 +++++++++++++++++++ 2 files changed, 43 insertions(+) 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}}' ); -- 2.20.1