extjs-gpl
Version:
GPL licensed version of Sencha Ext JS
125 lines (113 loc) • 3.54 kB
JavaScript
/**
* @class Ext.chart.axis.segmenter.Time
* @extends Ext.chart.axis.segmenter.Segmenter
*
* Time data type.
*/
Ext.define('Ext.chart.axis.segmenter.Time', {
extend: 'Ext.chart.axis.segmenter.Segmenter',
alias: 'segmenter.time',
config: {
/**
* @cfg {Object} step
* @cfg {String} step.unit The unit of the step (Ext.Date.DAY, Ext.Date.MONTH, etc).
* @cfg {Number} step.step The number of units for the step (1, 2, etc).
* If specified, will override the result of {@link #preferredStep}.
* For example:
*
* step: {
* unit: Ext.Date.HOUR,
* step: 1
* }
*/
step: null
},
renderer: function (value, context) {
var ExtDate = Ext.Date;
switch (context.majorTicks.unit) {
case 'y':
return ExtDate.format(value, 'Y');
case 'mo':
return ExtDate.format(value, 'Y-m');
case 'd':
return ExtDate.format(value, 'Y-m-d');
}
return ExtDate.format(value, 'Y-m-d\nH:i:s');
},
from: function (value) {
return new Date(value);
},
diff: function (min, max, unit) {
if (isFinite(min)) {
min = new Date(min);
}
if (isFinite(max)) {
max = new Date(max);
}
return Ext.Date.diff(min, max, unit);
},
updateStep: function () {
var axis = this.getAxis();
if (axis && !this.isConfiguring) {
axis.performLayout();
}
},
align: function (date, step, unit) {
if (unit === 'd' && step >= 7) {
date = Ext.Date.align(date, 'd', step);
date.setDate(date.getDate() - date.getDay() + 1);
return date;
} else {
return Ext.Date.align(date, unit, step);
}
},
add: function (value, step, unit) {
return Ext.Date.add(new Date(value), unit, step);
},
stepUnits: [
[Ext.Date.YEAR, 1, 2, 5, 10, 20, 50, 100, 200, 500],
[Ext.Date.MONTH, 1, 3, 6],
[Ext.Date.DAY, 1, 7, 14],
[Ext.Date.HOUR, 1, 6, 12],
[Ext.Date.MINUTE, 1, 5, 15, 30],
[Ext.Date.SECOND, 1, 5, 15, 30],
[Ext.Date.MILLI, 1, 2, 5, 10, 20, 50, 100, 200, 500]
],
preferredStep: function (min, estStepSize) {
if (this.getStep()) {
return this.getStep();
}
var from = new Date(+min),
to = new Date(+min + Math.ceil(estStepSize)),
units = this.stepUnits,
result, unit, diff,
i, j;
for (i = 0; i < units.length; i++) {
unit = units[i][0];
diff = this.diff(from, to, unit);
if (diff > 0) {
for (j = 1; j < units[i].length; j++) {
if (diff <= units[i][j]) {
result = {
unit: unit,
step: units[i][j]
};
break;
}
}
if (!result) {
i--;
result = {
unit: units[i][0],
step: 1
};
}
break;
}
}
if (!result) {
result = {unit: Ext.Date.DAY, step: 1}; // Default step is one Day.
}
return result;
}
});