Bartosz Dziewoński has uploaded a new change for review.
https://gerrit.wikimedia.org/r/113307
Change subject: mediawiki.jqueryMsg: Don't throw parse errors in the user's face
......................................................................
mediawiki.jqueryMsg: Don't throw parse errors in the user's face
Log them to the console instead, displaying unparsed text.
Added tests for this behavior.
Change-Id: I8290387e1e85ad68f0198c6c8e4cd5e4c74832d3
---
M resources/mediawiki/mediawiki.jqueryMsg.js
M tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
2 files changed, 42 insertions(+), 6 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core
refs/changes/07/113307/1
diff --git a/resources/mediawiki/mediawiki.jqueryMsg.js
b/resources/mediawiki/mediawiki.jqueryMsg.js
index e4a9316..c39f38c 100644
--- a/resources/mediawiki/mediawiki.jqueryMsg.js
+++ b/resources/mediawiki/mediawiki.jqueryMsg.js
@@ -122,7 +122,14 @@
try {
return parser.parse( key, argsArray );
} catch ( e ) {
- return $( '<span>' ).text( key + ': ' +
e.message );
+ var fallback = parser.settings.messages.get(
key );
+ // 'text' should not be escaped; 'plain' never
reaches here; 'parse' is escaped later
+ if ( parser.settings.format === 'escaped' ) {
+ fallback = mw.html.escape( fallback );
+ }
+
+ mw.log.warn( 'mediawiki.jqueryMsg: ' + key + ':
' + e.message );
+ return $( '<span>' ).text( fallback );
}
};
}
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
index 6e13e13..700341f 100644
--- a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
+++ b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
@@ -1,6 +1,7 @@
( function ( mw, $ ) {
- var mwLanguageCache = {}, formatText, formatParse, formatnumTests,
specialCharactersPageName,
- expectedListUsers, expectedEntrypoints;
+ var mwLanguageCache = {}, formatText, formatEscaped, formatParse,
+ formatnumTests, specialCharactersPageName,
+ expectedListUsers, expectedEntrypoints, fakeLog;
// When the expected result is the same in both modes
function assertBothModes( assert, parserArguments, expectedResult,
assertMessage ) {
@@ -48,7 +49,9 @@
formatText = mw.jqueryMsg.getMessageFunction( {
format: 'text'
} );
-
+ formatEscaped = mw.jqueryMsg.getMessageFunction( {
+ format: 'escaped'
+ } );
formatParse = mw.jqueryMsg.getMessageFunction( {
format: 'parse'
} );
@@ -274,8 +277,8 @@
mw.messages.set( 'pipe-trick', '[[Tampa, Florida|]]' );
assert.equal(
formatParse( 'pipe-trick' ),
- 'pipe-trick: Parse error at position 0 in input:
[[Tampa, Florida|]]',
- 'Pipe trick should return error string.'
+ '[[Tampa, Florida|]]',
+ 'Pipe trick should not be parsed.'
);
expectedMultipleBars = '<a title="Main Page"
href="/wiki/Main_Page">Main|Page</a>';
@@ -710,4 +713,30 @@
);
} );
+ QUnit.test( 'Behavior in case of invalid wikitext', 4, function (
assert ) {
+ var logSpy = this.sandbox.spy( mw.log, 'warn' );
+
+ mw.messages.set( 'invalid-wikitext', '<b>{{FAIL}}</b>' );
+
+ assert.equal(
+ formatParse( 'invalid-wikitext' ),
+ '<b>{{FAIL}}</b>',
+ 'Invalid wikitext: \'parse\' format'
+ );
+
+ assert.equal(
+ formatEscaped( 'invalid-wikitext' ),
+ '<b>{{FAIL}}</b>',
+ 'Invalid wikitext: \'escaped\' format'
+ );
+
+ assert.equal(
+ formatText( 'invalid-wikitext' ),
+ '<b>{{FAIL}}</b>',
+ 'Invalid wikitext: \'text\' format'
+ );
+
+ assert.equal( logSpy.callCount, 3, 'mw.log.warn calls' );
+ } );
+
}( mediaWiki, jQuery ) );
--
To view, visit https://gerrit.wikimedia.org/r/113307
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I8290387e1e85ad68f0198c6c8e4cd5e4c74832d3
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Bartosz Dziewoński <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits