From d03cbb436abf85897824b1568c2d7bc8cd9b7a8a Mon Sep 17 00:00:00 2001 From: Krinkle Date: Thu, 1 Sep 2011 15:28:28 +0000 Subject: [PATCH] Fix bad escaping in mw.message for inexistent messages (bug 30684) mw.message('some-inexistent-message').escaped() should be <some-inexistent-message> instead of . --- RELEASE-NOTES-1.19 | 1 + resources/mediawiki/mediawiki.js | 7 ++++++- .../qunit/suites/resources/mediawiki/mediawiki.test.js | 10 +++++++--- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/RELEASE-NOTES-1.19 b/RELEASE-NOTES-1.19 index 805b98099c..8524624e3a 100644 --- a/RELEASE-NOTES-1.19 +++ b/RELEASE-NOTES-1.19 @@ -77,6 +77,7 @@ production. * Show --batch-size option in help of maintenance scripts that support it * (bug 4381) Magic quotes cleaning is not comprehensive, key strings not unescaped +* (bug 30684) Fix bad escaping in mw.message for inexistent messages (i.e. ) === API changes in 1.19 === * (bug 19838) siprop=interwikimap can now use the interwiki cache. diff --git a/resources/mediawiki/mediawiki.js b/resources/mediawiki/mediawiki.js index 86fb82d718..cf89e03511 100644 --- a/resources/mediawiki/mediawiki.js +++ b/resources/mediawiki/mediawiki.js @@ -146,8 +146,13 @@ window.mw = window.mediaWiki = new ( function( $ ) { * @return string Message as a string in the current form or if key does not exist. */ toString: function() { + if ( !this.map.exists( this.key ) ) { - // Return if key does not exist + // Use as text if key does not exist + if ( this.format !== 'plain' ) { + // format 'escape' and 'parse' need to have the brackets and key html escaped + return mw.html.escape( '<' + this.key + '>' ); + } return '<' + this.key + '>'; } var text = this.map.get( this.key ), diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.test.js index 70e3a22687..ffb88b1dd9 100644 --- a/tests/qunit/suites/resources/mediawiki/mediawiki.test.js +++ b/tests/qunit/suites/resources/mediawiki/mediawiki.test.js @@ -80,7 +80,7 @@ test( 'mw.config', function() { }); test( 'mw.message & mw.messages', function() { - expect(16); + expect(17); ok( mw.messages, 'messages defined' ); ok( mw.messages instanceof mw.Map, 'mw.messages instance of mw.Map' ); @@ -113,11 +113,15 @@ test( 'mw.message & mw.messages', function() { var goodbye = mw.message( 'goodbye' ); strictEqual( goodbye.exists(), false, 'Message.exists returns false for inexisting messages' ); - equal( goodbye.toString(), '', 'Message.toString returns if key does not exist' ); + equal( goodbye.plain(), '', 'Message.toString returns plain if format is "plain" and key does not exist' ); + // bug 30684 + equal( goodbye.escaped(), '<goodbye>', 'Message.toString returns properly escaped <key> if format is "escaped" and key does not exist' ); }); test( 'mw.msg', function() { - expect(2); + expect(3); + + ok( mw.messages.set( 'hello', 'Hello awesome world' ), 'mw.messages.set: Register' ); equal( mw.msg( 'hello' ), 'Hello awesome world', 'Gets message with default options (existing message)' ); equal( mw.msg( 'goodbye' ), '', 'Gets message with default options (inexisting message)' ); -- 2.20.1