Hard deprecate Language::commafy; deprecate mediawiki.language.commafy
Language::commafy was deprecated; it is poorly named, and its functionality is rolled into ::formatNum/::formatNumNoSeparators. Deprecate mediawiki.language.commafy for similar reasons, and because it parallels a deprecated core PHP method. Perhaps it would be worthwhile to add a new JS method in the future more closely matching the PHP ::formatNum/::formatNumNoSeparators pair. Code search: https://codesearch.wmcloud.org/search/?q=commafy%5C%28&i=nope&files=&repos= Change-Id: Id3fc5dc2c7e62495a532db93d85a6f1cb8e8cbeb
This commit is contained in:
parent
af231558d6
commit
4bc5c76129
5 changed files with 67 additions and 36 deletions
|
|
@ -345,6 +345,10 @@ because of Phabricator reports.
|
|||
- findVariantLink
|
||||
- convertTitle
|
||||
- updateConversionTable
|
||||
- commafy
|
||||
* The mw.language.commafy client-side method has been deprecated, to match
|
||||
the deprecation of Language::commafy. Use mw.language.convertNumber
|
||||
instead.
|
||||
* …
|
||||
|
||||
=== Other changes in 1.36 ===
|
||||
|
|
|
|||
|
|
@ -3425,6 +3425,7 @@ class Language {
|
|||
* @return string
|
||||
*/
|
||||
public function commafy( $number ) {
|
||||
wfDeprecated( __METHOD__, '1.36' );
|
||||
// Validate the input argument.
|
||||
if ( $number === null || $number === '' ) {
|
||||
return '';
|
||||
|
|
|
|||
|
|
@ -164,6 +164,43 @@
|
|||
return valueParts.join( options.decimal );
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply pattern to format value as a string.
|
||||
*
|
||||
* Using patterns from [Unicode TR35](https://www.unicode.org/reports/tr35/#Number_Format_Patterns).
|
||||
*
|
||||
* @param {number} value
|
||||
* @param {string} pattern Pattern string as described by Unicode TR35
|
||||
* @param {number|null} [minimumGroupingDigits=null]
|
||||
* @throws {Error} If unable to find a number expression in `pattern`.
|
||||
* @return {string}
|
||||
* @private
|
||||
*/
|
||||
function commafyInternal( value, pattern, minimumGroupingDigits ) {
|
||||
var numberPattern,
|
||||
transformTable = mw.language.getSeparatorTransformTable(),
|
||||
group = transformTable[ ',' ] || ',',
|
||||
numberPatternRE = /[#0,]*[#0](?:\.0*#*)?/, // not precise, but good enough
|
||||
decimal = transformTable[ '.' ] || '.',
|
||||
patternList = pattern.split( ';' ),
|
||||
positivePattern = patternList[ 0 ];
|
||||
|
||||
pattern = patternList[ ( value < 0 ) ? 1 : 0 ] || ( '-' + positivePattern );
|
||||
numberPattern = positivePattern.match( numberPatternRE );
|
||||
|
||||
minimumGroupingDigits = minimumGroupingDigits !== undefined ? minimumGroupingDigits : null;
|
||||
|
||||
if ( !numberPattern ) {
|
||||
throw new Error( 'unable to find a number expression in pattern: ' + pattern );
|
||||
}
|
||||
|
||||
return pattern.replace( numberPatternRE, commafyNumber( value, numberPattern[ 0 ], {
|
||||
minimumGroupingDigits: minimumGroupingDigits,
|
||||
decimal: decimal,
|
||||
group: group
|
||||
} ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to flip transformation tables.
|
||||
*
|
||||
|
|
@ -226,7 +263,7 @@
|
|||
'digitGroupingPattern' ) || '#,##0.###';
|
||||
minimumGroupingDigits = mw.language.getData( mw.config.get( 'wgUserLanguage' ),
|
||||
'minimumGroupingDigits' ) || null;
|
||||
numberString = mw.language.commafy( num, pattern, minimumGroupingDigits );
|
||||
numberString = commafyInternal( num, pattern, minimumGroupingDigits );
|
||||
}
|
||||
|
||||
if ( transformTable ) {
|
||||
|
|
@ -268,43 +305,25 @@
|
|||
getSeparatorTransformTable: function () {
|
||||
return mw.language.getData( mw.config.get( 'wgUserLanguage' ),
|
||||
'separatorTransformTable' ) || [];
|
||||
},
|
||||
|
||||
/**
|
||||
* Apply pattern to format value as a string.
|
||||
*
|
||||
* Using patterns from [Unicode TR35](https://www.unicode.org/reports/tr35/#Number_Format_Patterns).
|
||||
*
|
||||
* @param {number} value
|
||||
* @param {string} pattern Pattern string as described by Unicode TR35
|
||||
* @param {number|null} [minimumGroupingDigits=null]
|
||||
* @throws {Error} If unable to find a number expression in `pattern`.
|
||||
* @return {string}
|
||||
*/
|
||||
commafy: function ( value, pattern, minimumGroupingDigits ) {
|
||||
var numberPattern,
|
||||
transformTable = mw.language.getSeparatorTransformTable(),
|
||||
group = transformTable[ ',' ] || ',',
|
||||
numberPatternRE = /[#0,]*[#0](?:\.0*#*)?/, // not precise, but good enough
|
||||
decimal = transformTable[ '.' ] || '.',
|
||||
patternList = pattern.split( ';' ),
|
||||
positivePattern = patternList[ 0 ];
|
||||
|
||||
pattern = patternList[ ( value < 0 ) ? 1 : 0 ] || ( '-' + positivePattern );
|
||||
numberPattern = positivePattern.match( numberPatternRE );
|
||||
minimumGroupingDigits = minimumGroupingDigits !== undefined ? minimumGroupingDigits : null;
|
||||
|
||||
if ( !numberPattern ) {
|
||||
throw new Error( 'unable to find a number expression in pattern: ' + pattern );
|
||||
}
|
||||
|
||||
return pattern.replace( numberPatternRE, commafyNumber( value, numberPattern[ 0 ], {
|
||||
minimumGroupingDigits: minimumGroupingDigits,
|
||||
decimal: decimal,
|
||||
group: group
|
||||
} ) );
|
||||
}
|
||||
|
||||
} );
|
||||
|
||||
/**
|
||||
* Apply pattern to format value as a string.
|
||||
*
|
||||
* Using patterns from [Unicode TR35](https://www.unicode.org/reports/tr35/#Number_Format_Patterns).
|
||||
*
|
||||
* @method commafy
|
||||
* @deprecated This function will be made private in a future release;
|
||||
* it is poorly named, corresponds to a deprecated function in core, and
|
||||
* its functionality should be rolled into convertNumber().
|
||||
* @param {number} value
|
||||
* @param {string} pattern Pattern string as described by Unicode TR35
|
||||
* @param {number|null} [minimumGroupingDigits=null]
|
||||
* @throws {Error} If unable to find a number expression in `pattern`.
|
||||
* @return {string}
|
||||
*/
|
||||
mw.log.deprecate( mw.language, 'commafy', commafyInternal, 'Use mw.language.convertNumber instead', 'mw.language.commafy' );
|
||||
|
||||
}() );
|
||||
|
|
|
|||
|
|
@ -1762,6 +1762,7 @@ class LanguageIntegrationTest extends LanguageClassesTestCase {
|
|||
* @dataProvider provideCommafyData
|
||||
*/
|
||||
public function testCommafy( $number, $numbersWithCommas ) {
|
||||
$this->hideDeprecated( 'Language::commafy' );
|
||||
$this->hideDeprecated( 'Language::formatNum with a non-numeric string' );
|
||||
$this->assertEquals(
|
||||
$numbersWithCommas,
|
||||
|
|
|
|||
|
|
@ -64,6 +64,12 @@
|
|||
assert.strictEqual( mw.language.convertNumber( 180 ), '180', 'formatting 3-digit with minimumGroupingDigits=2' );
|
||||
assert.strictEqual( mw.language.convertNumber( 1800 ), '1800', 'formatting 4-digit with minimumGroupingDigits=2' );
|
||||
assert.strictEqual( mw.language.convertNumber( 18000 ), '18.000', 'formatting 5-digit with minimumGroupingDigits=2' );
|
||||
|
||||
mw.language.setData( 'en', 'minimumGroupingDigits', 3 );
|
||||
assert.strictEqual( mw.language.convertNumber( 180 ), '180', 'formatting 3-digit with minimumGroupingDigits=3' );
|
||||
assert.strictEqual( mw.language.convertNumber( 1800 ), '1800', 'formatting 4-digit with minimumGroupingDigits=3' );
|
||||
assert.strictEqual( mw.language.convertNumber( 18000 ), '18000', 'formatting 5-digit with minimumGroupingDigits=3' );
|
||||
assert.strictEqual( mw.language.convertNumber( 180000 ), '180.000', 'formatting 6-digit with minimumGroupingDigits=3' );
|
||||
} );
|
||||
|
||||
QUnit.test( 'mw.language.convertNumber - digitTransformTable', function ( assert ) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue