polardbxengine/storage/ndb/mcc/frontend/dojo/dojox/dgauges/LinearScaler.js.uncompresse...

162 lines
5.3 KiB
JavaScript

define("dojox/dgauges/LinearScaler", ["dojo/_base/lang", "dojo/_base/declare", "dojo/Stateful"], function(lang, declare, Stateful){
return declare("dojox.dgauges.LinearScaler", Stateful, {
// summary:
// The linear scaler. This scaler creates major and minor ticks regularly between
// a minimum and a maximum.
// Scalers are responsible for tick generation and various data-transform operations.
// minimum: Number
// The minimum value of the scaler. Default is 0.
minimum: 0,
// maximum: Number
// The maximum value of the scaler. Default is 100.
maximum: 100,
// snapInterval:
// Specifies the increment value to be used as snap values on this scale
// during user interaction.
// Default is 1.
snapInterval: 1,
// majorTickInterval: Number
// The interval between two major ticks.
majorTickInterval: NaN,
// minorTickInterval: Number
// The interval between two minor ticks.
minorTickInterval: NaN,
// minorTicksEnabled: Boolean
// If false, minor ticks are not generated. Default is true.
minorTicksEnabled: true,
// majorTicks:
// The array of generated major ticks. You should not set this
// property when using the scaler.
majorTicks: null,
// minorTicks:
// The array of generated minor ticks. You should not set this
// property when using the scaler.
minorTicks: null,
_computedMajorTickInterval: NaN,
_computedMinorTickInterval: NaN,
constructor: function(){
this.watchedProperties = ["minimum", "maximum", "majorTickInterval", "minorTickInterval", "snapInterval", "minorTicksEnabled"];
},
_buildMinorTickItems: function(){
// summary:
// Internal method.
// tags:
// private
var mt = this.majorTicks;
var minorTickCache = [];
if(this.maximum > this.minimum){
var majorTickCount = Math.floor((this.maximum - this.minimum) / this.getComputedMajorTickInterval()) + 1;
var minorTickCount = Math.floor(this.getComputedMajorTickInterval() / this.getComputedMinorTickInterval());
var data;
for(var i = 0; i < majorTickCount - 1; i++){
for(var j = 1; j < minorTickCount; j++){
data = {scaler: this};
data.isMinor = true;
data.value = mt[i].value + j * this.getComputedMinorTickInterval();
data.position = (Number(data.value) - this.minimum) / (this.maximum - this.minimum);
minorTickCache.push(data);
}
}
}
return minorTickCache;
},
_buildMajorTickItems: function(){
// summary:
// Internal method.
// tags:
// private
var majorTickCache = [];
if(this.maximum > this.minimum){
var majorTickCount = Math.floor((this.maximum - this.minimum) / this.getComputedMajorTickInterval()) + 1;
var data;
for(var i = 0; i < majorTickCount; i++){
data = {scaler: this};
data.isMinor = false;
data.value = this.minimum + i * this.getComputedMajorTickInterval();
data.position = (Number(data.value) - this.minimum) / (this.maximum - this.minimum);
majorTickCache.push(data);
}
}
return majorTickCache;
},
getComputedMajorTickInterval: function(){
// summary:
// The computed or user defined major tick interval.
// returns: Number
// The major tick interval used for ticks generation.
if(!isNaN(this.majorTickInterval)){
return this.majorTickInterval;
}
if(isNaN(this._computedMajorTickInterval)){
this._computedMajorTickInterval = (this.maximum - this.minimum) / 10;
}
return this._computedMajorTickInterval;
},
getComputedMinorTickInterval: function(){
// summary:
// The computed or user defined minor tick interval.
// returns: Number
// The minor tick interval used for ticks generation.
if(!isNaN(this.minorTickInterval)){
return this.minorTickInterval;
}
if(isNaN(this._computedMinorTickInterval)){
this._computedMinorTickInterval = this.getComputedMajorTickInterval() / 5;
}
return this._computedMinorTickInterval;
},
computeTicks: function(){
// summary:
// Creates or re-creates the ticks for this scaler.
// returns: Array
// An array containing all ticks (major then minor ticks).
this.majorTicks = this._buildMajorTickItems();
this.minorTicks = this.minorTicksEnabled ? this._buildMinorTickItems() : [];
return this.majorTicks.concat(this.minorTicks);
},
positionForValue: function(value){
// summary:
// Transforms a value into a relative position between 0 and 1.
// value: Number
// A value to transform.
// returns: Number
// The position between 0 and 1.
var position;
if(value == null || isNaN(value) || value <= this.minimum){
position = 0;
}
if(value >= this.maximum){
position = 1;
}
if(isNaN(position)){
position = (value - this.minimum) / (this.maximum - this.minimum);
}
return position;
},
valueForPosition: function(position){
// summary:
// Transforms a relative position (between 0 and 1) into a value.
// position: Number
// A relative position to transform.
// returns: Number
// The transformed value between minimum and maximum.
var range = Math.abs(this.minimum - this.maximum);
var value = this.minimum + range * position;
if(!isNaN(this.snapInterval) && this.snapInterval > 0){
value = Math.round((value - this.minimum) / this.snapInterval) * this.snapInterval + this.minimum;
}
return value;
}
});
});