]> git.proxmox.com Git - extjs.git/blame - extjs/classic/classic/src/tree/NavigationModel.js
add extjs 6.0.1 sources
[extjs.git] / extjs / classic / classic / src / tree / NavigationModel.js
CommitLineData
6527f429
DM
1/**\r
2 * @class Ext.tree.NavigationModel\r
3 * @private\r
4 * This class listens for key events fired from a {@link Ext.tree.Panel TreePanel}, and moves the currently focused item\r
5 * by adding the class {@link #focusCls}.\r
6 *\r
7 * Navigation and interactions are defined by http://www.w3.org/TR/2013/WD-wai-aria-practices-20130307/#TreeView\r
8 * or, if there are multiple visible columns, by http://www.w3.org/TR/2013/WD-wai-aria-practices-20130307/#treegrid\r
9 */\r
10Ext.define('Ext.tree.NavigationModel', {\r
11 extend: 'Ext.grid.NavigationModel',\r
12 \r
13 alias: 'view.navigation.tree',\r
14 \r
15 initKeyNav: function(view) {\r
16 var me = this,\r
17 columns = me.view.ownerGrid.columns,\r
18 len, i;\r
19\r
20 // Must go up to any possible locking assembly to find total number of columns\r
21 me.isTreeGrid = columns && columns.length > 1;\r
22 me.callParent([view]);\r
23\r
24 // We will have two keyNavs if we are the navigation model for a lockable assembly\r
25 for (i = 0, len = me.keyNav.length; i < len; i++) {\r
26 me.keyNav[i].map.addBinding([{\r
27 key: '8',\r
28 shift: true,\r
29 handler: me.onAsterisk,\r
30 scope: me\r
31 }, {\r
32 key: Ext.event.Event.NUM_MULTIPLY,\r
33 handler: me.onAsterisk,\r
34 scope: me\r
35 }]);\r
36 }\r
37 me.view.grid.on({\r
38 columnschanged: me.onColumnsChanged,\r
39 scope: me\r
40 });\r
41 },\r
42\r
43 onColumnsChanged: function() {\r
44 // Must go up to any possible locking assembly to find total number of columns\r
45 this.isTreeGrid = this.view.ownerGrid.getVisibleColumnManager().getColumns().length > 1;\r
46 },\r
47\r
48\r
49 onCellClick: function(view, cell, cellIndex, record, row, recordIndex, clickEvent) {\r
50 this.callParent([view, cell, cellIndex, record, row, recordIndex, clickEvent]);\r
51\r
52 // Return false if node toggled.\r
53 // Do not process the cell click further when we do an expand/collapse\r
54 return !clickEvent.nodeToggled;\r
55 },\r
56\r
57 onKeyLeft: function(keyEvent) {\r
58 var me = this,\r
59 view = keyEvent.view,\r
60 record = me.record;\r
61\r
62 // Left when a TreeGrid navigates between columns\r
63 if (me.isTreeGrid && !keyEvent.ctrlKey) {\r
64 return me.callParent([keyEvent]);\r
65 }\r
66\r
67 // Left arrow key on an expanded node closes the node.\r
68 if (keyEvent.position.column.isTreeColumn && record.isExpanded()) {\r
69 view.collapse(record);\r
70 }\r
71 // Left arrow key on a closed or end node moves focus to the node's parent (don't attempt to focus hidden root).\r
72 else {\r
73 record = record.parentNode;\r
74 if (record && !(record.isRoot() && !view.rootVisible)) {\r
75 me.setPosition(record, null, keyEvent);\r
76 }\r
77 }\r
78 },\r
79\r
80 onKeyRight: function(keyEvent) {\r
81 var me = this,\r
82 record = me.record;\r
83\r
84 // Right when a TreeGrid navigates between columns\r
85 if (me.isTreeGrid && !keyEvent.ctrlKey) {\r
86 return me.callParent([keyEvent]);\r
87 }\r
88\r
89 // Right arrow key expands a closed node, moves to the first child of an open node, or does nothing on an end node.\r
90 if (!record.isLeaf()) {\r
91 if (keyEvent.position.column.isTreeColumn && !record.isExpanded()) {\r
92 keyEvent.view.expand(record);\r
93 } else if (record.isExpanded()) {\r
94 record = record.childNodes[0];\r
95 if (record) {\r
96 me.setPosition(record);\r
97 }\r
98 }\r
99 }\r
100 },\r
101\r
102 onKeyEnter: function(keyEvent) {\r
103 if (this.record.data.checked != null) {\r
104 this.toggleCheck(keyEvent);\r
105 } else {\r
106 this.callParent([keyEvent]);\r
107 }\r
108 },\r
109\r
110 onKeySpace: function(keyEvent) {\r
111 if (this.record.data.checked != null) {\r
112 this.toggleCheck(keyEvent);\r
113 } else {\r
114 this.callParent([keyEvent]);\r
115 }\r
116 },\r
117\r
118 toggleCheck: function(keyEvent) {\r
119 this.view.onCheckChange(keyEvent);\r
120 },\r
121\r
122 // (asterisk) on keypad expands all nodes.\r
123 onAsterisk: function(keyEvent) {\r
124 this.view.ownerCt.expandAll();\r
125 }\r
126});