X-Git-Url: https://git.cyclocoop.org/%27.WWW_URL.%27admin/?a=blobdiff_plain;f=resources%2Fsrc%2Fmediawiki.language%2Fmediawiki.language.numbers.js;h=2392089cc204bd04f28f53c8bd29ace740e0fd0f;hb=af7635ad4843aac1c047003836cadc3f7933d540;hp=10ceecc48dd6c420e017b0010cab4da6622d1cb9;hpb=a3b1ef7c21ba9af94f611f6ca1d64e75710db176;p=lhc%2Fweb%2Fwiklou.git diff --git a/resources/src/mediawiki.language/mediawiki.language.numbers.js b/resources/src/mediawiki.language/mediawiki.language.numbers.js index 10ceecc48d..2392089cc2 100644 --- a/resources/src/mediawiki.language/mediawiki.language.numbers.js +++ b/resources/src/mediawiki.language/mediawiki.language.numbers.js @@ -66,9 +66,10 @@ * @private * @param {number} value the number to be formatted, ignores sign * @param {string} pattern the number portion of a pattern (e.g. `#,##0.00`) - * @param {Object} [options] If provided, both option keys must be present: + * @param {Object} [options] If provided, all option keys must be present: * @param {string} options.decimal The decimal separator. Defaults to: `'.'`. * @param {string} options.group The group separator. Defaults to: `','`. + * @param {number|null} options.minimumGroupingDigits * @return {string} */ function commafyNumber( value, pattern, options ) { @@ -143,17 +144,22 @@ } } - for ( whole = valueParts[ 0 ]; whole; ) { - off = groupSize ? whole.length - groupSize : 0; - pieces.push( ( off > 0 ) ? whole.slice( off ) : whole ); - whole = ( off > 0 ) ? whole.slice( 0, off ) : ''; - - if ( groupSize2 ) { - groupSize = groupSize2; - groupSize2 = null; + if ( + options.minimumGroupingDigits === null || + valueParts[ 0 ].length >= groupSize + options.minimumGroupingDigits + ) { + for ( whole = valueParts[ 0 ]; whole; ) { + off = groupSize ? whole.length - groupSize : 0; + pieces.push( ( off > 0 ) ? whole.slice( off ) : whole ); + whole = ( off > 0 ) ? whole.slice( 0, off ) : ''; + + if ( groupSize2 ) { + groupSize = groupSize2; + groupSize2 = null; + } } + valueParts[ 0 ] = pieces.reverse().join( options.group ); } - valueParts[ 0 ] = pieces.reverse().join( options.group ); return valueParts.join( options.decimal ); } @@ -194,7 +200,7 @@ */ convertNumber: function ( num, integer ) { var transformTable, digitTransformTable, separatorTransformTable, - i, numberString, convertedNumber, pattern; + i, numberString, convertedNumber, pattern, minimumGroupingDigits; // Quick shortcut for plain numbers if ( integer && parseInt( num, 10 ) === num ) { @@ -220,16 +226,22 @@ // When unformatting, we just use separatorTransformTable. pattern = mw.language.getData( mw.config.get( 'wgUserLanguage' ), 'digitGroupingPattern' ) || '#,##0.###'; - numberString = mw.language.commafy( num, pattern ); + minimumGroupingDigits = mw.language.getData( mw.config.get( 'wgUserLanguage' ), + 'minimumGroupingDigits' ) || null; + numberString = mw.language.commafy( num, pattern, minimumGroupingDigits ); } - convertedNumber = ''; - for ( i = 0; i < numberString.length; i++ ) { - if ( transformTable.hasOwnProperty( numberString[ i ] ) ) { - convertedNumber += transformTable[ numberString[ i ] ]; - } else { - convertedNumber += numberString[ i ]; + if ( transformTable ) { + convertedNumber = ''; + for ( i = 0; i < numberString.length; i++ ) { + if ( transformTable.hasOwnProperty( numberString[ i ] ) ) { + convertedNumber += transformTable[ numberString[ i ] ]; + } else { + convertedNumber += numberString[ i ]; + } } + } else { + convertedNumber = numberString; } if ( integer ) { @@ -267,10 +279,11 @@ * * @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 ) { + commafy: function ( value, pattern, minimumGroupingDigits ) { var numberPattern, transformTable = mw.language.getSeparatorTransformTable(), group = transformTable[ ',' ] || ',', @@ -281,12 +294,14 @@ 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 } ) );