Parser can take mw.user too along with male, female for {{gender:$1|..}}
authorSanthosh Thottingal <santhosh@users.mediawiki.org>
Mon, 2 Jan 2012 12:21:34 +0000 (12:21 +0000)
committerSanthosh Thottingal <santhosh@users.mediawiki.org>
Mon, 2 Jan 2012 12:21:34 +0000 (12:21 +0000)
If the parameter passed is mw.user, use the gender from mw.user.options. If not, use the passed gender.
Update the qunit tests.
Update the documentation.
Followup r107811

resources/mediawiki.language/mediawiki.language.js
resources/mediawiki/mediawiki.jqueryMsg.js
tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js

index ee57a82..4abfa4b 100644 (file)
@@ -98,12 +98,12 @@ mw.language = {
        },
        /**
         * Provides an alternative text depending on specified gender.
-        * Usage {{gender:username|masculine|feminine|neutral}}.
+        * Usage {{gender:[gender|user object]|masculine|feminine|neutral}}.
         * If second or third parameter are not specified, masculine is used.
         * 
         * These details may be overriden per language.
         *
-        * @param gender string
+        * @param gender string male, female, or anything else for neutral.
         * @param forms array List of gender forms
         *
         * @return string
index 1866352..7a7c12b 100644 (file)
 
                /**
                 * Transform parsed structure into gender
-                * @param {Array} of nodes, [ {String}, {String}, {String} ... ] 
+                * Usage {{gender:[gender| mw.user object ] | masculine|feminine|neutral}}.
+                * @param {Array} of nodes, [ {String|mw.User}, {String}, {String} , {String} ] 
                 * @return {String} selected gender form according to current language
                 */
                gender: function( nodes ) { 
-                       var gender = nodes[0];
+                       var gender;
+                       if  ( nodes[0] && nodes[0].options instanceof mw.Map ){
+                               gender = nodes[0].options.get( 'gender' )
+                       } else {
+                               gender = nodes[0];
+                       }
                        var forms = nodes.slice(1);
                        return this.language.gender( gender, forms );
                }
index bc328b4..1732d05 100644 (file)
@@ -17,13 +17,18 @@ test( 'mw.jqueryMsg Plural', function() {
 
 
 test( 'mw.jqueryMsg Gender', function() {
-       expect( 14 );
+       expect( 16 );
        //TODO: These tests should be for mw.msg once mw.msg integrated with mw.jqueryMsg
+       var user = mw.user;
+       user.options.set( 'gender', 'male' );
        var parser = mw.jqueryMsg.getMessageFunction();
        ok( parser, 'Parser Function initialized' );
        //TODO: English may not be the best language for these tests. Use a language like Arabic or Russian
        ok( mw.messages.set( 'gender-msg', '$1 reverted {{GENDER:$2|his|her|their}} last edit' ), 'mw.messages.set: Register' );
        equal( parser( 'gender-msg', 'Bob', 'male' ) , 'Bob reverted his last edit', 'Gender masculine' );
+       equal( parser( 'gender-msg', 'Bob', user ) , 'Bob reverted his last edit', 'Gender masculine' );
+       user.options.set( 'gender', 'unknown' );
+       equal( parser( 'gender-msg', 'They', user ) , 'They reverted their last edit', 'Gender masculine' );
        equal( parser( 'gender-msg', 'Alice', 'female' ) , 'Alice reverted her last edit', 'Gender feminine' );
        equal( parser( 'gender-msg', 'User' ) , 'User reverted their last edit', 'Gender neutral' );
        equal( parser( 'gender-msg', 'User', 'unknown' ) , 'User reverted their last edit', 'Gender neutral' );