Merge "jqueryMsg: Allow sneaking in non-qqx JavaScript messages in qqx mode"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Sat, 18 May 2019 09:01:37 +0000 (09:01 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sat, 18 May 2019 09:01:37 +0000 (09:01 +0000)
resources/src/mediawiki.base/mediawiki.base.js
resources/src/mediawiki.jqueryMsg/mediawiki.jqueryMsg.js
tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.test.js

index 9016c7c..00a74fe 100644 (file)
                 * @return {string} Parsed message
                 */
                parser: function () {
-                       var text;
-                       if ( mw.config.get( 'wgUserLanguage' ) === 'qqx' ) {
+                       var text = this.map.get( this.key );
+                       if (
+                               mw.config.get( 'wgUserLanguage' ) === 'qqx' &&
+                               ( !text || text === '(' + this.key + ')' )
+                       ) {
                                text = '(' + this.key + '$*)';
-                       } else {
-                               text = this.map.get( this.key );
                        }
                        return mw.format.apply( null, [ text ].concat( this.parameters ) );
                },
index 6416612..e0c9833 100644 (file)
@@ -317,13 +317,14 @@ mw.jqueryMsg.Parser.prototype = {
                var wikiText;
 
                if ( !Object.prototype.hasOwnProperty.call( this.astCache, key ) ) {
-                       if ( mw.config.get( 'wgUserLanguage' ) === 'qqx' ) {
+                       wikiText = this.settings.messages.get( key );
+                       if (
+                               mw.config.get( 'wgUserLanguage' ) === 'qqx' &&
+                               ( !wikiText || wikiText === '(' + key + ')' )
+                       ) {
                                wikiText = '(' + key + '$*)';
-                       } else {
-                               wikiText = this.settings.messages.get( key );
-                               if ( typeof wikiText !== 'string' ) {
-                                       wikiText = '⧼' + key + '⧽';
-                               }
+                       } else if ( typeof wikiText !== 'string' ) {
+                               wikiText = '⧼' + key + '⧽';
                        }
                        wikiText = mw.internalDoTransformFormatForQqx( wikiText, replacements );
                        this.astCache[ key ] = this.wikiTextToAst( wikiText );
index 1c7d8ee..2fcf61e 100644 (file)
                );
 
                mw.config.set( 'wgUserLanguage', 'qqx' );
+
                $bar = $( '<b>' ).text( 'bar' );
-               assert.strictEqual( mw.message( 'foo', $bar, 'baz' ).parse(), '(foo: <b>bar</b>, baz)', 'qqx message with parameters' );
+               mw.messages.set( 'qqx-message', '(qqx-message)' );
+               mw.messages.set( 'non-qqx-message', '<b>hello world</b>' );
+
+               assert.strictEqual( mw.message( 'missing-message' ).parse(), '(missing-message)', 'qqx message (missing)' );
+               assert.strictEqual( mw.message( 'missing-message', $bar, 'baz' ).parse(), '(missing-message: <b>bar</b>, baz)', 'qqx message (missing) with parameters' );
+               assert.strictEqual( mw.message( 'qqx-message' ).parse(), '(qqx-message)', 'qqx message (defined)' );
+               assert.strictEqual( mw.message( 'qqx-message', $bar, 'baz' ).parse(), '(qqx-message: <b>bar</b>, baz)', 'qqx message (defined) with parameters' );
+               assert.strictEqual( mw.message( 'non-qqx-message' ).parse(), '<b>hello world</b>', 'non-qqx message in qqx mode' );
        } );
 
        QUnit.test( 'setParserDefaults', function ( assert ) {
index 425e18e..08262b2 100644 (file)
                );
 
                mw.config.set( 'wgUserLanguage', 'qqx' );
-               assert.strictEqual( mw.message( 'foo' ).plain(), '(foo)', 'qqx message' );
-               assert.strictEqual( mw.message( 'foo', 'bar', 'baz' ).plain(), '(foo: bar, baz)', 'qqx message with parameters' );
+
+               mw.messages.set( 'qqx-message', '(qqx-message)' );
+               mw.messages.set( 'non-qqx-message', 'hello world' );
+
+               assert.strictEqual( mw.message( 'missing-message' ).plain(), '(missing-message)', 'qqx message (missing)' );
+               assert.strictEqual( mw.message( 'missing-message', 'bar', 'baz' ).plain(), '(missing-message: bar, baz)', 'qqx message (missing) with parameters' );
+               assert.strictEqual( mw.message( 'qqx-message' ).plain(), '(qqx-message)', 'qqx message (defined)' );
+               assert.strictEqual( mw.message( 'qqx-message', 'bar', 'baz' ).plain(), '(qqx-message: bar, baz)', 'qqx message (defined) with parameters' );
+               assert.strictEqual( mw.message( 'non-qqx-message' ).plain(), 'hello world', 'non-qqx message in qqx mode' );
        } );
 
        QUnit.test( 'mw.msg', function ( assert ) {