]>
Commit | Line | Data |
---|---|---|
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 | |
7 | Ext.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 | }); |