From: Santhosh Thottingal Date: Tue, 26 Aug 2014 04:09:17 +0000 (+0530) Subject: Support nesting of expressions in parameters of explicit plural forms X-Git-Tag: 1.31.0-rc.0~14273 X-Git-Url: http://git.cyclocoop.org/?a=commitdiff_plain;h=e16ca154f47b0d95060c9f7663c74fa11f848c09;p=lhc%2Fweb%2Fwiklou.git Support nesting of expressions in parameters of explicit plural forms Bug: 69993 Change-Id: I15c167f245ba0842fc77fb4e03e380c40784ee1b --- diff --git a/resources/src/mediawiki/mediawiki.jqueryMsg.js b/resources/src/mediawiki/mediawiki.jqueryMsg.js index 3f778d8463..a81730e514 100644 --- a/resources/src/mediawiki/mediawiki.jqueryMsg.js +++ b/resources/src/mediawiki/mediawiki.jqueryMsg.js @@ -1129,9 +1129,16 @@ * @return {string} selected pluralized form according to current language */ plural: function ( nodes ) { - var forms, count; + var forms, formIndex, node, count; count = parseFloat( this.language.convertNumber( nodes[0], true ) ); forms = nodes.slice( 1 ); + for ( formIndex = 0; formIndex < forms.length; formIndex++ ) { + node = forms[formIndex]; + if ( node.jquery && node.hasClass( 'mediaWiki_htmlEmitter' ) ) { + // This is a nested node, already expanded. + forms[formIndex] = forms[formIndex].html(); + } + } return forms.length ? this.language.convertPlural( count, forms ) : ''; }, diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js index afa57ee375..906fd27f49 100644 --- a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js +++ b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js @@ -40,7 +40,8 @@ 'gender-msg-currentuser': '{{GENDER:|blue|pink|green}}', 'plural-msg': 'Found $1 {{PLURAL:$1|item|items}}', - + // See https://bugzilla.wikimedia.org/69993 + 'plural-msg-explicit-forms-nested': 'Found {{PLURAL:$1|$1 results|0=no results in {{SITENAME}}|1=$1 result}}', // Assume the grammar form grammar_case_foo is not valid in any language 'grammar-msg': 'Przeszukaj {{GRAMMAR:grammar_case_foo|{{SITENAME}}}}', @@ -134,10 +135,13 @@ ); } ); - QUnit.test( 'Plural', 3, function ( assert ) { + QUnit.test( 'Plural', 6, function ( assert ) { assert.equal( formatParse( 'plural-msg', 0 ), 'Found 0 items', 'Plural test for english with zero as count' ); assert.equal( formatParse( 'plural-msg', 1 ), 'Found 1 item', 'Singular test for english' ); assert.equal( formatParse( 'plural-msg', 2 ), 'Found 2 items', 'Plural test for english' ); + assert.equal( formatParse( 'plural-msg-explicit-forms-nested', 6 ), 'Found 6 results', 'Plural message with explicit plural forms' ); + assert.equal( formatParse( 'plural-msg-explicit-forms-nested', 0 ), 'Found no results in ' + mw.config.get( 'wgSiteName' ), 'Plural message with explicit plural forms, with nested {{SITENAME}}' ); + assert.equal( formatParse( 'plural-msg-explicit-forms-nested', 1 ), 'Found 1 result', 'Plural message with explicit plural forms with placeholder nested' ); } ); QUnit.test( 'Gender', 15, function ( assert ) {