]> git.proxmox.com Git - extjs.git/blame - extjs/examples/classic/keynav/keynav.js
add extjs 6.0.1 sources
[extjs.git] / extjs / examples / classic / keynav / keynav.js
CommitLineData
6527f429
DM
1Ext.require([\r
2 'Ext.XTemplate',\r
3 'Ext.util.KeyNav',\r
4 'Ext.fx.*'\r
5]);\r
6\r
7Ext.define('Board', {\r
8 constructor: function(size, activeCls){\r
9 this.size = size;\r
10 this.activeCls = activeCls;\r
11 },\r
12\r
13 render: function(el){\r
14 el = Ext.get(el);\r
15\r
16 var tpl = Ext.create('Ext.XTemplate',\r
17 '<tpl for=".">',\r
18 '<div class="square">{.}</div>',\r
19 '<tpl if="xindex % ' + this.size + ' === 0"><div class="x-clear"></div></tpl>',\r
20 '</tpl>'),\r
21 data = [],\r
22 i = 0,\r
23 max = this.size * this.size;\r
24\r
25 for (; i < max; ++i) {\r
26 data.push(i + 1);\r
27 }\r
28 tpl.append(el, data);\r
29 this.cells = el.select('.square');\r
30 },\r
31\r
32 getIndex: function(xy){\r
33 return this.size * xy[0] + xy[1];\r
34 },\r
35\r
36 constrain: function(x, y) {\r
37 x = Ext.Number.constrain(x, 0, this.size - 1);\r
38 y = Ext.Number.constrain(y, 0, this.size - 1);\r
39 return [x, y];\r
40 },\r
41\r
42 setActive: function(x, y) {\r
43 var xy = this.constrain(x, y),\r
44 cell = this.cells.item(this.getIndex(xy));\r
45\r
46 cell.radioCls(this.activeCls);\r
47 this.active = xy;\r
48 },\r
49\r
50 setActiveCls: function(activeCls){\r
51 this.cells.removeCls(this.activeCls);\r
52 this.activeCls = activeCls;\r
53 var active = this.active;\r
54 this.setActive(active[0], active[1]);\r
55 },\r
56\r
57 highlightActive: function(){\r
58 var cell = this.cells.item(this.getIndex(this.active));\r
59 Ext.create('Ext.fx.Anim', {\r
60 target: cell,\r
61 duration: 1000,\r
62 alternate: true,\r
63 iterations: 2,\r
64 to: {\r
65 backgroundColor: '#FFFF00'\r
66 },\r
67 callback: function(){\r
68 cell.setStyle('background-color', '');\r
69 }\r
70 });\r
71 },\r
72\r
73 moveUp: function(){\r
74 var active = this.active;\r
75 this.setActive(active[0] - 1, active[1]);\r
76 },\r
77\r
78 moveDown: function(){\r
79 var active = this.active;\r
80 this.setActive(active[0] + 1, active[1]);\r
81 },\r
82\r
83 moveLeft: function(){\r
84 var active = this.active;\r
85 this.setActive(active[0], active[1] - 1);\r
86 },\r
87\r
88 moveRight: function(){\r
89 var active = this.active;\r
90 this.setActive(active[0], active[1] + 1);\r
91 }\r
92});\r
93\r
94Ext.onReady(function(){\r
95\r
96 var cls = 'active-green';\r
97 var board = new Board(4, cls);\r
98 board.render('board');\r
99 board.setActive(0, 0);\r
100\r
101 var nav = Ext.create('Ext.util.KeyNav', Ext.getDoc(), {\r
102 scope: board,\r
103 left: board.moveLeft,\r
104 up: board.moveUp,\r
105 right: board.moveRight,\r
106 down: board.moveDown,\r
107 space: board.highlightActive,\r
108 home: function(){\r
109 cls = Ext.String.toggle(cls, 'active-green', 'active-red');\r
110 board.setActiveCls(cls);\r
111 }\r
112 });\r
113\r
114});\r