55 lines
1.5 KiB
JavaScript
55 lines
1.5 KiB
JavaScript
|
dojo.provide("dojox.charting.scaler.common");
|
||
|
|
||
|
(function(){
|
||
|
var eq = function(/*Number*/ a, /*Number*/ b){
|
||
|
// summary: compare two FP numbers for equality
|
||
|
return Math.abs(a - b) <= 1e-6 * (Math.abs(a) + Math.abs(b)); // Boolean
|
||
|
};
|
||
|
|
||
|
dojo.mixin(dojox.charting.scaler.common, {
|
||
|
findString: function(/*String*/ val, /*Array*/ text){
|
||
|
val = val.toLowerCase();
|
||
|
for(var i = 0; i < text.length; ++i){
|
||
|
if(val == text[i]){ return true; }
|
||
|
}
|
||
|
return false;
|
||
|
},
|
||
|
getNumericLabel: function(/*Number*/ number, /*Number*/ precision, /*Object*/ kwArgs){
|
||
|
var def = kwArgs.fixed ?
|
||
|
number.toFixed(precision < 0 ? -precision : 0) :
|
||
|
number.toString();
|
||
|
if(kwArgs.labelFunc){
|
||
|
var r = kwArgs.labelFunc(def, number, precision);
|
||
|
if(r){ return r; }
|
||
|
// else fall through to the regular labels search
|
||
|
}
|
||
|
if(kwArgs.labels){
|
||
|
// classic binary search
|
||
|
var l = kwArgs.labels, lo = 0, hi = l.length;
|
||
|
while(lo < hi){
|
||
|
var mid = Math.floor((lo + hi) / 2), val = l[mid].value;
|
||
|
if(val < number){
|
||
|
lo = mid + 1;
|
||
|
}else{
|
||
|
hi = mid;
|
||
|
}
|
||
|
}
|
||
|
// lets take into account FP errors
|
||
|
if(lo < l.length && eq(l[lo].value, number)){
|
||
|
return l[lo].text;
|
||
|
}
|
||
|
--lo;
|
||
|
if(lo >= 0 && lo < l.length && eq(l[lo].value, number)){
|
||
|
return l[lo].text;
|
||
|
}
|
||
|
lo += 2;
|
||
|
if(lo < l.length && eq(l[lo].value, number)){
|
||
|
return l[lo].text;
|
||
|
}
|
||
|
// otherwise we will produce a number
|
||
|
}
|
||
|
return def;
|
||
|
}
|
||
|
});
|
||
|
})();
|