Project:
Dojo Toolkit
Code Location:
http://svn.dojotoolkit.org/src/dijit/trunk//dijit/trunk
/
MenuBar.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
define([ "dojo/_base/declare", // declare "dojo/keys", // keys.DOWN_ARROW "./_MenuBase", "dojo/text!./templates/MenuBar.html" ], function(declare, keys, _MenuBase, template){ // module: // dijit/MenuBar return declare("dijit.MenuBar", _MenuBase, { // summary: // A menu bar, listing menu choices horizontally, like the "File" menu in most desktop applications templateString: template, baseClass: "dijitMenuBar", // By default open popups for MenuBar instantly popupDelay: 0, // _isMenuBar: [protected] Boolean // This is a MenuBar widget, not a (vertical) Menu widget. _isMenuBar: true, // parameter to dijit.popup.open() about where to put popup (relative to this.domNode) _orient: ["below"], _moveToPopup: function(/*Event*/ evt){ // summary: // This handles the down arrow key, opening a submenu if one exists. // Unlike _MenuBase._moveToPopup(), will never move to the next item in the MenuBar. // tags: // private if(this.focusedChild && this.focusedChild.popup && !this.focusedChild.disabled){ this.onItemClick(this.focusedChild, evt); } }, focusChild: function(item){ // Overload focusChild so that whenever a new item is focused and the menu is active, open its submenu immediately. this.inherited(arguments); if(this.activated && item.popup && !item.disabled){ this._openItemPopup(item, true); } }, _onChildDeselect: function(item){ // override _MenuBase._onChildDeselect() to close submenu immediately if(this.currentPopupItem == item){ this.currentPopupItem = null; item._closePopup(); // this calls onClose } this.inherited(arguments); }, // Arrow key navigation _onLeftArrow: function(){ this.focusPrev(); }, _onRightArrow: function(){ this.focusNext(); }, _onDownArrow: function(/*Event*/ evt){ this._moveToPopup(evt); }, _onUpArrow: function(){ }, onItemClick: function(/*dijit/_WidgetBase*/ item, /*Event*/ evt){ // summary: // Handle clicks on an item. Also called by _moveToPopup() due to a down-arrow key on the item. // Cancels a dropdown if already open and click is either mouse or space/enter. // Don't close dropdown due to down arrow. // tags: // private if(item.popup && item.popup.isShowingNow && (!/^key/.test(evt.type) || evt.keyCode !== keys.DOWN_ARROW)){ item.focusNode.focus(); this._cleanUp(true); }else{ this.inherited(arguments); } } }); });
