source: Dev/branches/rest-dojo-ui/client/dijit/MenuBar.js @ 256

Last change on this file since 256 was 256, checked in by hendrikvanantwerpen, 13 years ago

Reworked project structure based on REST interaction and Dojo library. As
soon as this is stable, the old jQueryUI branch can be removed (it's
kept for reference).

File size: 2.1 KB
RevLine 
[256]1define([
2        "dojo/_base/declare", // declare
3        "dojo/_base/event", // event.stop
4        "dojo/keys", // keys.DOWN_ARROW
5        "./_MenuBase",
6        "dojo/text!./templates/MenuBar.html"
7], function(declare, event, keys, _MenuBase, template){
8
9/*=====
10        var _MenuBase = dijit._MenuBase;
11=====*/
12
13// module:
14//              dijit/MenuBar
15// summary:
16//              A menu bar, listing menu choices horizontally, like the "File" menu in most desktop applications
17
18return declare("dijit.MenuBar", _MenuBase, {
19        // summary:
20        //              A menu bar, listing menu choices horizontally, like the "File" menu in most desktop applications
21
22        templateString: template,
23
24        baseClass: "dijitMenuBar",
25
26        // _isMenuBar: [protected] Boolean
27        //              This is a MenuBar widget, not a (vertical) Menu widget.
28        _isMenuBar: true,
29
30        postCreate: function(){
31                var l = this.isLeftToRight();
32                this.connectKeyNavHandlers(
33                        l ? [keys.LEFT_ARROW] : [keys.RIGHT_ARROW],
34                        l ? [keys.RIGHT_ARROW] : [keys.LEFT_ARROW]
35                );
36
37                // parameter to dijit.popup.open() about where to put popup (relative to this.domNode)
38                this._orient = ["below"];
39        },
40
41        focusChild: function(item){
42                // overload focusChild so that whenever the focus is moved to a new item,
43                // check the previous focused whether it has its popup open, if so, after
44                // focusing the new item, open its submenu immediately
45                var prev_item = this.focusedChild,
46                        showpopup = prev_item && prev_item.popup && prev_item.popup.isShowingNow;
47                this.inherited(arguments);
48                if(showpopup && item.popup && !item.disabled){
49                        this._openPopup();              // TODO: on down arrow, _openPopup() is called here and in onItemClick()
50                }
51        },
52
53        _onKeyPress: function(/*Event*/ evt){
54                // summary:
55                //              Handle keyboard based menu navigation.
56                // tags:
57                //              protected
58
59                if(evt.ctrlKey || evt.altKey){ return; }
60
61                switch(evt.charOrCode){
62                        case keys.DOWN_ARROW:
63                                this._moveToPopup(evt);
64                                event.stop(evt);
65                }
66        },
67
68        onItemClick: function(/*dijit._Widget*/ item, /*Event*/ evt){
69                // summary:
70                //              Handle clicks on an item. Cancels a dropdown if already open.
71                // tags:
72                //              private
73                if(item.popup && item.popup.isShowingNow){
74                        item.popup.onCancel();
75                }else{
76                        this.inherited(arguments);
77                }
78        }
79});
80
81});
Note: See TracBrowser for help on using the repository browser.