1 if(!dojo._hasResource["dojox.charting.scaler"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
2 dojo._hasResource["dojox.charting.scaler"] = true;
3 dojo.provide("dojox.charting.scaler");
6 var deltaLimit = 3; // pixels
8 var isText = function(val, text){
9 val = val.toLowerCase();
10 for(var i = 0; i < text.length; ++i){
11 if(val == text[i]){ return true; }
16 var calcTicks = function(min, max, kwArgs, majorTick, minorTick, microTick, span){
17 kwArgs = dojo.clone(kwArgs);
19 if(kwArgs.fixUpper == "major"){ kwArgs.fixUpper = "minor"; }
20 if(kwArgs.fixLower == "major"){ kwArgs.fixLower = "minor"; }
23 if(kwArgs.fixUpper == "minor"){ kwArgs.fixUpper = "micro"; }
24 if(kwArgs.fixLower == "minor"){ kwArgs.fixLower = "micro"; }
27 if(kwArgs.fixUpper == "micro"){ kwArgs.fixUpper = "none"; }
28 if(kwArgs.fixLower == "micro"){ kwArgs.fixLower = "none"; }
30 var lowerBound = isText(kwArgs.fixLower, ["major"]) ?
31 Math.floor(min / majorTick) * majorTick :
32 isText(kwArgs.fixLower, ["minor"]) ?
33 Math.floor(min / minorTick) * minorTick :
34 isText(kwArgs.fixLower, ["micro"]) ?
35 Math.floor(min / microTick) * unit : min,
36 upperBound = isText(kwArgs.fixUpper, ["major"]) ?
37 Math.ceil(max / majorTick) * majorTick :
38 isText(kwArgs.fixUpper, ["minor"]) ?
39 Math.ceil(max / minorTick) * minorTick :
40 isText(kwArgs.fixUpper, ["unit"]) ?
41 Math.ceil(max / unit) * unit : max,
42 majorStart = (isText(kwArgs.fixLower, ["major"]) || !majorTick) ?
43 lowerBound : Math.ceil(lowerBound / majorTick) * majorTick,
44 minorStart = (isText(kwArgs.fixLower, ["major", "minor"]) || !minorTick) ?
45 lowerBound : Math.ceil(lowerBound / minorTick) * minorTick,
46 microStart = (isText(kwArgs.fixLower, ["major", "minor", "micro"]) || ! microTick) ?
47 lowerBound : Math.ceil(lowerBound / microTick) * microTick,
48 majorCount = !majorTick ? 0 : (isText(kwArgs.fixUpper, ["major"]) ?
49 Math.round((upperBound - majorStart) / majorTick) :
50 Math.floor((upperBound - majorStart) / majorTick)) + 1,
51 minorCount = !minorTick ? 0 : (isText(kwArgs.fixUpper, ["major", "minor"]) ?
52 Math.round((upperBound - minorStart) / minorTick) :
53 Math.floor((upperBound - minorStart) / minorTick)) + 1,
54 microCount = !microTick ? 0 : (isText(kwArgs.fixUpper, ["major", "minor", "micro"]) ?
55 Math.round((upperBound - microStart) / microTick) :
56 Math.floor((upperBound - microStart) / microTick)) + 1,
57 minorPerMajor = minorTick ? Math.round(majorTick / minorTick) : 0,
58 microPerMinor = microTick ? Math.round(minorTick / microTick) : 0,
59 majorPrecision = majorTick ? Math.floor(Math.log(majorTick) / Math.LN10) : 0,
60 minorPrecision = minorTick ? Math.floor(Math.log(minorTick) / Math.LN10) : 0,
61 scale = span / (upperBound - lowerBound);
62 if(!isFinite(scale)){ scale = 1; }
86 minorPerMajor: minorPerMajor,
87 microPerMinor: microPerMinor,
92 dojox.charting.scaler = function(min, max, span, kwArgs){
93 var h = {fixUpper: "none", fixLower: "none", natural: false};
95 if("fixUpper" in kwArgs){ h.fixUpper = String(kwArgs.fixUpper); }
96 if("fixLower" in kwArgs){ h.fixLower = String(kwArgs.fixLower); }
97 if("natural" in kwArgs){ h.natural = Boolean(kwArgs.natural); }
101 return calcTicks(min, max, h, 0, 0, 0, span); // Object
104 var mag = Math.floor(Math.log(max - min) / Math.LN10),
105 major = kwArgs && ("majorTick" in kwArgs) ? kwArgs.majorTick : Math.pow(10, mag),
106 minor = 0, micro = 0, ticks;
108 // calculate minor ticks
109 if(kwArgs && ("minorTick" in kwArgs)){
110 minor = kwArgs.minorTick;
114 if(!h.natural || minor > 0.9){
115 ticks = calcTicks(min, max, h, major, minor, 0, span);
116 if(ticks.scale * ticks.minor.tick > deltaLimit){ break; }
119 if(!h.natural || minor > 0.9){
120 ticks = calcTicks(min, max, h, major, minor, 0, span);
121 if(ticks.scale * ticks.minor.tick > deltaLimit){ break; }
124 if(!h.natural || minor > 0.9){
125 ticks = calcTicks(min, max, h, major, minor, 0, span);
126 if(ticks.scale * ticks.minor.tick > deltaLimit){ break; }
128 return calcTicks(min, max, h, major, 0, 0, span); // Object
132 // calculate micro ticks
133 if(kwArgs && ("microTick" in kwArgs)){
134 micro = kwArgs.microTick;
135 ticks = calcTicks(min, max, h, major, minor, micro, span);
139 if(!h.natural || micro > 0.9){
140 ticks = calcTicks(min, max, h, major, minor, micro, span);
141 if(ticks.scale * ticks.micro.tick > deltaLimit){ break; }
144 if(!h.natural || micro > 0.9){
145 ticks = calcTicks(min, max, h, major, minor, micro, span);
146 if(ticks.scale * ticks.micro.tick > deltaLimit){ break; }
149 if(!h.natural || micro > 0.9){
150 ticks = calcTicks(min, max, h, major, minor, micro, span);
151 if(ticks.scale * ticks.micro.tick > deltaLimit){ break; }
157 return micro ? ticks : calcTicks(min, max, h, major, minor, 0, span); // Object