]> git.proxmox.com Git - extjs.git/blame - extjs/packages/charts/src/chart/axis/segmenter/Time.js
add extjs 6.0.1 sources
[extjs.git] / extjs / packages / charts / src / chart / axis / segmenter / Time.js
CommitLineData
6527f429
DM
1/**\r
2 * @class Ext.chart.axis.segmenter.Time\r
3 * @extends Ext.chart.axis.segmenter.Segmenter\r
4 * \r
5 * Time data type.\r
6 */\r
7Ext.define('Ext.chart.axis.segmenter.Time', {\r
8 extend: 'Ext.chart.axis.segmenter.Segmenter',\r
9 alias: 'segmenter.time',\r
10\r
11 config: {\r
12 /**\r
13 * @cfg {Object} step\r
14 * If specified, the will override the result of {@link #preferredStep}.\r
15 */\r
16 step: null\r
17 },\r
18\r
19 renderer: function (value, context) {\r
20 var ExtDate = Ext.Date;\r
21 switch (context.majorTicks.unit) {\r
22 case 'y':\r
23 return ExtDate.format(value, 'Y');\r
24 case 'mo':\r
25 return ExtDate.format(value, 'Y-m');\r
26 case 'd':\r
27 return ExtDate.format(value, 'Y-m-d');\r
28 }\r
29 return ExtDate.format(value, 'Y-m-d\nH:i:s');\r
30 },\r
31\r
32 from: function (value) {\r
33 return new Date(value);\r
34 },\r
35\r
36 diff: function (min, max, unit) {\r
37 if (isFinite(min)) {\r
38 min = new Date(min);\r
39 }\r
40 if (isFinite(max)) {\r
41 max = new Date(max);\r
42 }\r
43 return Ext.Date.diff(min, max, unit);\r
44 },\r
45\r
46 align: function (date, step, unit) {\r
47 if (unit === 'd' && step >= 7) {\r
48 date = Ext.Date.align(date, 'd', step);\r
49 date.setDate(date.getDate() - date.getDay() + 1);\r
50 return date;\r
51 } else {\r
52 return Ext.Date.align(date, unit, step);\r
53 }\r
54 },\r
55\r
56 add: function (value, step, unit) {\r
57 return Ext.Date.add(new Date(value), unit, step);\r
58 },\r
59\r
60 stepUnits: [\r
61 [Ext.Date.YEAR, 1, 2, 5, 10, 20, 50, 100, 200, 500],\r
62 [Ext.Date.MONTH, 1, 3, 6],\r
63 [Ext.Date.DAY, 1, 7, 14],\r
64 [Ext.Date.HOUR, 1, 6, 12],\r
65 [Ext.Date.MINUTE, 1, 5, 15, 30],\r
66 [Ext.Date.SECOND, 1, 5, 15, 30],\r
67 [Ext.Date.MILLI, 1, 2, 5, 10, 20, 50, 100, 200, 500]\r
68 ],\r
69\r
70 preferredStep: function (min, estStepSize) {\r
71 if (this.getStep()) {\r
72 return this.getStep();\r
73 }\r
74 var from = new Date(+min),\r
75 to = new Date(+min + Math.ceil(estStepSize)),\r
76 units = this.stepUnits,\r
77 result, unit, diff,\r
78 i, j;\r
79\r
80 for (i = 0; i < units.length; i++) {\r
81 unit = units[i][0];\r
82 diff = this.diff(from, to, unit);\r
83\r
84 if (diff > 0) {\r
85 for (j = 1; j < units[i].length; j++) {\r
86 if (diff <= units[i][j]) {\r
87 result = {\r
88 unit: unit,\r
89 step: units[i][j]\r
90 };\r
91 break;\r
92 }\r
93 }\r
94 if (!result) {\r
95 i--;\r
96 result = {\r
97 unit: units[i][0],\r
98 step: 1\r
99 };\r
100 }\r
101 break;\r
102 }\r
103 }\r
104 if (!result) {\r
105 result = {unit: Ext.Date.DAY, step: 1}; // Default step is one Day.\r
106 }\r
107 return result;\r
108 }\r
109});