From: Alex Monk Date: Fri, 29 Aug 2014 22:41:05 +0000 (+0100) Subject: mediawiki.language: Implement Language::listToText in JS X-Git-Tag: 1.31.0-rc.0~14185^2 X-Git-Url: http://git.cyclocoop.org/%24href?a=commitdiff_plain;h=2f0d1b81188dcbb6221f5c8a531b6bb6f50bc17d;p=lhc%2Fweb%2Fwiklou.git mediawiki.language: Implement Language::listToText in JS For I35e55658 in VisualEditor. Change-Id: I5d894f8a1cba65a3d90dfbf3e43be4e515a327d1 --- diff --git a/resources/Resources.php b/resources/Resources.php index 4a9827a2a0..cbb8301c8f 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -1106,6 +1106,11 @@ return array( 'mediawiki.cldr', ), 'targets' => array( 'desktop', 'mobile' ), + 'messages' => array( + 'and', + 'comma-separator', + 'word-separator' + ), ), 'mediawiki.cldr' => array( diff --git a/resources/src/mediawiki.language/mediawiki.language.js b/resources/src/mediawiki.language/mediawiki.language.js index a0b556914d..2e848581c0 100644 --- a/resources/src/mediawiki.language/mediawiki.language.js +++ b/resources/src/mediawiki.language/mediawiki.language.js @@ -144,8 +144,28 @@ $.extend( mw.language, { return grammarForms[form][word] || word; } return word; - } + }, + /** + * Turn a list of string into a simple list using commas and 'and'. + * + * See Language::listToText in languages/Language.php + * + * @param {string[]} list + * @return {string} + */ + listToText: function ( list ) { + var text = '', i = 0; + for ( ; i < list.length; i++ ) { + text += list[i]; + if ( list.length - 2 === i ) { + text += mw.msg( 'and' ) + mw.msg( 'word-separator' ); + } else if ( list.length - 1 !== i ) { + text += mw.msg( 'comma-separator' ); + } + } + return text; + } } ); }( mediaWiki, jQuery ) ); diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js index 3bfabe4c23..31e6fe598d 100644 --- a/tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js +++ b/tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js @@ -452,4 +452,11 @@ grammarTest( langCode, test ); } } ); + + QUnit.test( 'List to text test', 4, function ( assert ) { + assert.equal( mw.language.listToText( [] ), '', 'Blank list' ); + assert.equal( mw.language.listToText( ['a'] ), 'a', 'Single item' ); + assert.equal( mw.language.listToText( ['a', 'b'] ), 'a and b', 'Two items' ); + assert.equal( mw.language.listToText( ['a', 'b', 'c'] ), 'a, b and c', 'More than two items' ); + } ); }( mediaWiki, jQuery ) );