source: Dev/branches/rest-dojo-ui/client/dojox/charting/scaler/common.js @ 256

Last change on this file since 256 was 256, checked in by hendrikvanantwerpen, 13 years ago

Reworked project structure based on REST interaction and Dojo library. As
soon as this is stable, the old jQueryUI branch can be removed (it's
kept for reference).

File size: 2.1 KB
Line 
1define(["dojo/_base/lang"], function(lang){
2
3        var eq = function(/*Number*/ a, /*Number*/ b){
4                // summary: compare two FP numbers for equality
5                return Math.abs(a - b) <= 1e-6 * (Math.abs(a) + Math.abs(b));   // Boolean
6        };
7       
8        var common = lang.getObject("dojox.charting.scaler.common", true);
9       
10        var testedModules = {};
11
12        return lang.mixin(common, {
13                doIfLoaded: function(moduleName, ifloaded, ifnotloaded){
14                        if(testedModules[moduleName] == undefined){
15                                try{
16                                        testedModules[moduleName] = require(moduleName);
17                                }catch(e){
18                                        testedModules[moduleName] = null;
19                                }
20                        }
21                        if(testedModules[moduleName]){
22                                return ifloaded(testedModules[moduleName]);
23                        }else{
24                                return ifnotloaded();
25                        }
26                },
27                findString: function(/*String*/ val, /*Array*/ text){
28                        val = val.toLowerCase();
29                        for(var i = 0; i < text.length; ++i){
30                                if(val == text[i]){ return true; }
31                        }
32                        return false;
33                },
34                getNumericLabel: function(/*Number*/ number, /*Number*/ precision, /*Object*/ kwArgs){
35                        var def = "";
36                        common.doIfLoaded("dojo/number", function(numberLib){
37                                def = (kwArgs.fixed ? numberLib.format(number, {places : precision < 0 ? -precision : 0}) :
38                                        numberLib.format(number)) || "";
39                        }, function(){
40                                def = kwArgs.fixed ? number.toFixed(precision < 0 ? -precision : 0) : number.toString();
41                        });
42                        if(kwArgs.labelFunc){
43                                var r = kwArgs.labelFunc(def, number, precision);
44                                if(r){ return r; }
45                                // else fall through to the regular labels search
46                        }
47                        if(kwArgs.labels){
48                                // classic binary search
49                                var l = kwArgs.labels, lo = 0, hi = l.length;
50                                while(lo < hi){
51                                        var mid = Math.floor((lo + hi) / 2), val = l[mid].value;
52                                        if(val < number){
53                                                lo = mid + 1;
54                                        }else{
55                                                hi = mid;
56                                        }
57                                }
58                                // lets take into account FP errors
59                                if(lo < l.length && eq(l[lo].value, number)){
60                                        return l[lo].text;
61                                }
62                                --lo;
63                                if(lo >= 0 && lo < l.length && eq(l[lo].value, number)){
64                                        return l[lo].text;
65                                }
66                                lo += 2;
67                                if(lo < l.length && eq(l[lo].value, number)){
68                                        return l[lo].text;
69                                }
70                                // otherwise we will produce a number
71                        }
72                        return def;
73                }
74        });
75});
Note: See TracBrowser for help on using the repository browser.