dijit
Version:
Dijit provides a complete collection of user interface controls based on Dojo, giving you the power to create web applications that are highly optimized for usability, performance, internationalization, accessibility, but above all deliver an incredible u
90 lines (73 loc) • 2.48 kB
JavaScript
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);
}
}
});
});