/*______________ | ______ | U I Z E J A V A S C R I P T F R A M E W O R K | / / | --------------------------------------------------- | / O / | MODULE : Uize.Loc.Plurals.Util Package | / / / | | / / / /| | ONLINE : http://uize.com | /____/ /__/_| | COPYRIGHT : (c)2014-2016 UIZE | /___ | LICENSE : Available under MIT License or GNU General Public License |_______________| http://uize.com/license.html */ /* Module Meta Data type: Package importance: 1 codeCompleteness: 5 docCompleteness: 5 */ /*? Introduction The =Uize.Loc.Plurals.Util= module provides some utility methods that are used by the various language specific plural modules. *DEVELOPERS:* `Chris van Rensburg` */ Uize.module ({ name:'Uize.Loc.Plurals.Util', builder:function () { 'use strict'; var _isList = Uize.isList, /*** references to static methods used internally ***/ _resolveValue, _getNumberInfo, _within ; return Uize.package ({ resolveValue:_resolveValue = function (_value) { /*** when the value is a params object, find the first number param ***/ if (Uize.isPlainObject (_value)) { for (var _key in _value) { if (typeof _value [_key] == 'number') { _value = _value [_key]; break; } } } return _value; }, getNumberInfo:_getNumberInfo = function (_value) { var _valueStr = (_value = _resolveValue (_value)) + '', _integerAndFractional = _valueStr.split ('.'), _fractional = _integerAndFractional [1] || '', _fractionalWithoutTrailing = _fractional.replace (/0+$/,''), n = Math.abs (+_value) ; return { n:n, // absolute value of the source number (integer and decimals) i:Math.floor (n), // integer digits of n v:_fractional.length, // number of visible fraction digits in n, with trailing zeros w:_fractionalWithoutTrailing.length, // number of visible fraction digits in n, without trailing zeros f:+_fractional, // visible fractional digits in n, with trailing zeros t:+_fractionalWithoutTrailing // visible fractional digits in n, without trailing zeros }; }, getPluralCategory:function (_value,_pluralRulesFunction) { var _numberInfo = _getNumberInfo (_value); return _pluralRulesFunction ( _numberInfo.n, _numberInfo.i, _numberInfo.v, _numberInfo.w, _numberInfo.f, _numberInfo.t, _within ); }, within:_within = function (_value,_rangeItems) { var _result = false; for ( var _rangeItemNo = -1, _rangeItemsLength = _rangeItems.length, _rangeItem; ++_rangeItemNo < _rangeItemsLength && !( _result = _isList (_rangeItem = _rangeItems [_rangeItemNo]) ? _value >= _rangeItem [0] && _value <= _rangeItem [1] : _value == _rangeItem ) ; ); return _result; } }); } });