tt-rss/lib/dojo/number.js

312 lines
7.2 KiB
JavaScript
Raw Normal View History

/*
Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
if(!dojo._hasResource["dojo.number"]){
dojo._hasResource["dojo.number"]=true;
dojo.provide("dojo.number");
dojo.require("dojo.i18n");
dojo.requireLocalization("dojo.cldr","number",null,"ROOT,ar,ca,cs,da,de,el,en,en-au,en-gb,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh");
dojo.require("dojo.string");
dojo.require("dojo.regexp");
dojo.number.format=function(_1,_2){
_2=dojo.mixin({},_2||{});
var _3=dojo.i18n.normalizeLocale(_2.locale),_4=dojo.i18n.getLocalization("dojo.cldr","number",_3);
_2.customs=_4;
var _5=_2.pattern||_4[(_2.type||"decimal")+"Format"];
if(isNaN(_1)||Math.abs(_1)==Infinity){
return null;
}
return dojo.number._applyPattern(_1,_5,_2);
};
dojo.number._numberPatternRE=/[#0,]*[#0](?:\.0*#*)?/;
dojo.number._applyPattern=function(_6,_7,_8){
_8=_8||{};
var _9=_8.customs.group,_a=_8.customs.decimal,_b=_7.split(";"),_c=_b[0];
_7=_b[(_6<0)?1:0]||("-"+_c);
if(_7.indexOf("%")!=-1){
_6*=100;
}else{
if(_7.indexOf("‰")!=-1){
_6*=1000;
}else{
if(_7.indexOf("¤")!=-1){
_9=_8.customs.currencyGroup||_9;
_a=_8.customs.currencyDecimal||_a;
_7=_7.replace(/\u00a4{1,3}/,function(_d){
var _e=["symbol","currency","displayName"][_d.length-1];
return _8[_e]||_8.currency||"";
});
}else{
if(_7.indexOf("E")!=-1){
throw new Error("exponential notation not supported");
}
}
}
}
var _f=dojo.number._numberPatternRE;
var _10=_c.match(_f);
if(!_10){
throw new Error("unable to find a number expression in pattern: "+_7);
}
if(_8.fractional===false){
_8.places=0;
}
return _7.replace(_f,dojo.number._formatAbsolute(_6,_10[0],{decimal:_a,group:_9,places:_8.places,round:_8.round}));
};
dojo.number.round=function(_11,_12,_13){
var _14=10/(_13||10);
return (_14*+_11).toFixed(_12)/_14;
};
if((0.9).toFixed()==0){
(function(){
var _15=dojo.number.round;
dojo.number.round=function(v,p,m){
var d=Math.pow(10,-p||0),a=Math.abs(v);
if(!v||a>=d||a*Math.pow(10,p+1)<5){
d=0;
}
return _15(v,p,m)+(v>0?d:-d);
};
})();
}
dojo.number._formatAbsolute=function(_16,_17,_18){
_18=_18||{};
if(_18.places===true){
_18.places=0;
}
if(_18.places===Infinity){
_18.places=6;
}
var _19=_17.split("."),_1a=typeof _18.places=="string"&&_18.places.indexOf(","),_1b=_18.places;
if(_1a){
_1b=_18.places.substring(_1a+1);
}else{
if(!(_1b>=0)){
_1b=(_19[1]||[]).length;
}
}
if(!(_18.round<0)){
_16=dojo.number.round(_16,_1b,_18.round);
}
var _1c=String(Math.abs(_16)).split("."),_1d=_1c[1]||"";
if(_19[1]||_18.places){
if(_1a){
_18.places=_18.places.substring(0,_1a);
}
var pad=_18.places!==undefined?_18.places:(_19[1]&&_19[1].lastIndexOf("0")+1);
if(pad>_1d.length){
_1c[1]=dojo.string.pad(_1d,pad,"0",true);
}
if(_1b<_1d.length){
_1c[1]=_1d.substr(0,_1b);
}
}else{
if(_1c[1]){
_1c.pop();
}
}
var _1e=_19[0].replace(",","");
pad=_1e.indexOf("0");
if(pad!=-1){
pad=_1e.length-pad;
if(pad>_1c[0].length){
_1c[0]=dojo.string.pad(_1c[0],pad);
}
if(_1e.indexOf("#")==-1){
_1c[0]=_1c[0].substr(_1c[0].length-pad);
}
}
var _1f=_19[0].lastIndexOf(","),_20,_21;
if(_1f!=-1){
_20=_19[0].length-_1f-1;
var _22=_19[0].substr(0,_1f);
_1f=_22.lastIndexOf(",");
if(_1f!=-1){
_21=_22.length-_1f-1;
}
}
var _23=[];
for(var _24=_1c[0];_24;){
var off=_24.length-_20;
_23.push((off>0)?_24.substr(off):_24);
_24=(off>0)?_24.slice(0,off):"";
if(_21){
_20=_21;
delete _21;
}
}
_1c[0]=_23.reverse().join(_18.group||",");
return _1c.join(_18.decimal||".");
};
dojo.number.regexp=function(_25){
return dojo.number._parseInfo(_25).regexp;
};
dojo.number._parseInfo=function(_26){
_26=_26||{};
var _27=dojo.i18n.normalizeLocale(_26.locale),_28=dojo.i18n.getLocalization("dojo.cldr","number",_27),_29=_26.pattern||_28[(_26.type||"decimal")+"Format"],_2a=_28.group,_2b=_28.decimal,_2c=1;
if(_29.indexOf("%")!=-1){
_2c/=100;
}else{
if(_29.indexOf("‰")!=-1){
_2c/=1000;
}else{
var _2d=_29.indexOf("¤")!=-1;
if(_2d){
_2a=_28.currencyGroup||_2a;
_2b=_28.currencyDecimal||_2b;
}
}
}
var _2e=_29.split(";");
if(_2e.length==1){
_2e.push("-"+_2e[0]);
}
var re=dojo.regexp.buildGroupRE(_2e,function(_2f){
_2f="(?:"+dojo.regexp.escapeString(_2f,".")+")";
return _2f.replace(dojo.number._numberPatternRE,function(_30){
var _31={signed:false,separator:_26.strict?_2a:[_2a,""],fractional:_26.fractional,decimal:_2b,exponent:false},_32=_30.split("."),_33=_26.places;
if(_32.length==1&&_2c!=1){
_32[1]="###";
}
if(_32.length==1||_33===0){
_31.fractional=false;
}else{
if(_33===undefined){
_33=_26.pattern?_32[1].lastIndexOf("0")+1:Infinity;
}
if(_33&&_26.fractional==undefined){
_31.fractional=true;
}
if(!_26.places&&(_33<_32[1].length)){
_33+=","+_32[1].length;
}
_31.places=_33;
}
var _34=_32[0].split(",");
if(_34.length>1){
_31.groupSize=_34.pop().length;
if(_34.length>1){
_31.groupSize2=_34.pop().length;
}
}
return "("+dojo.number._realNumberRegexp(_31)+")";
});
},true);
if(_2d){
re=re.replace(/([\s\xa0]*)(\u00a4{1,3})([\s\xa0]*)/g,function(_35,_36,_37,_38){
var _39=["symbol","currency","displayName"][_37.length-1],_3a=dojo.regexp.escapeString(_26[_39]||_26.currency||"");
_36=_36?"[\\s\\xa0]":"";
_38=_38?"[\\s\\xa0]":"";
if(!_26.strict){
if(_36){
_36+="*";
}
if(_38){
_38+="*";
}
return "(?:"+_36+_3a+_38+")?";
}
return _36+_3a+_38;
});
}
return {regexp:re.replace(/[\xa0 ]/g,"[\\s\\xa0]"),group:_2a,decimal:_2b,factor:_2c};
};
dojo.number.parse=function(_3b,_3c){
var _3d=dojo.number._parseInfo(_3c),_3e=(new RegExp("^"+_3d.regexp+"$")).exec(_3b);
if(!_3e){
return NaN;
}
var _3f=_3e[1];
if(!_3e[1]){
if(!_3e[2]){
return NaN;
}
_3f=_3e[2];
_3d.factor*=-1;
}
_3f=_3f.replace(new RegExp("["+_3d.group+"\\s\\xa0"+"]","g"),"").replace(_3d.decimal,".");
return _3f*_3d.factor;
};
dojo.number._realNumberRegexp=function(_40){
_40=_40||{};
if(!("places" in _40)){
_40.places=Infinity;
}
if(typeof _40.decimal!="string"){
_40.decimal=".";
}
if(!("fractional" in _40)||/^0/.test(_40.places)){
_40.fractional=[true,false];
}
if(!("exponent" in _40)){
_40.exponent=[true,false];
}
if(!("eSigned" in _40)){
_40.eSigned=[true,false];
}
var _41=dojo.number._integerRegexp(_40),_42=dojo.regexp.buildGroupRE(_40.fractional,function(q){
var re="";
if(q&&(_40.places!==0)){
re="\\"+_40.decimal;
if(_40.places==Infinity){
re="(?:"+re+"\\d+)?";
}else{
re+="\\d{"+_40.places+"}";
}
}
return re;
},true);
var _43=dojo.regexp.buildGroupRE(_40.exponent,function(q){
if(q){
return "([eE]"+dojo.number._integerRegexp({signed:_40.eSigned})+")";
}
return "";
});
var _44=_41+_42;
if(_42){
_44="(?:(?:"+_44+")|(?:"+_42+"))";
}
return _44+_43;
};
dojo.number._integerRegexp=function(_45){
_45=_45||{};
if(!("signed" in _45)){
_45.signed=[true,false];
}
if(!("separator" in _45)){
_45.separator="";
}else{
if(!("groupSize" in _45)){
_45.groupSize=3;
}
}
var _46=dojo.regexp.buildGroupRE(_45.signed,function(q){
return q?"[-+]":"";
},true);
var _47=dojo.regexp.buildGroupRE(_45.separator,function(sep){
if(!sep){
return "(?:\\d+)";
}
sep=dojo.regexp.escapeString(sep);
if(sep==" "){
sep="\\s";
}else{
if(sep==" "){
sep="\\s\\xa0";
}
}
var grp=_45.groupSize,_48=_45.groupSize2;
if(_48){
var _49="(?:0|[1-9]\\d{0,"+(_48-1)+"}(?:["+sep+"]\\d{"+_48+"})*["+sep+"]\\d{"+grp+"})";
return ((grp-_48)>0)?"(?:"+_49+"|(?:0|[1-9]\\d{0,"+(grp-1)+"}))":_49;
}
return "(?:0|[1-9]\\d{0,"+(grp-1)+"}(?:["+sep+"]\\d{"+grp+"})*)";
},true);
return _46+_47;
};
}