source: Dev/trunk/src/client/dojox/widget/PlaceholderMenuItem.js @ 485

Last change on this file since 485 was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 3.2 KB
Line 
1define(["dojo/_base/array", "dojo/_base/declare", "dojo/_base/lang", "dojo/dom-style", "dojo/_base/kernel", "dojo/query", "dijit/registry", "dijit/Menu","dijit/MenuItem"],
2    function(array, declare, lang, style, kernel, query, registry, Menu, MenuItem){
3
4kernel.experimental("dojox.widget.PlaceholderMenuItem");
5
6var PlaceholderMenuItem = declare("dojox.widget.PlaceholderMenuItem", MenuItem, {
7        // summary:
8        //              A menu item that can be used as a placeholder.  Set the label
9        //              of this item to a unique key and you can then use it to add new
10        //              items at that location.  This item is not displayed.
11       
12        _replaced: false,
13        _replacedWith: null,
14        _isPlaceholder: true,
15
16        postCreate: function(){
17                style.set(this.domNode, "display", "none");
18                this._replacedWith = [];
19                if(!this.label){
20                        this.label = this.containerNode.innerHTML;
21                }
22                this.inherited(arguments);
23        },
24       
25        replace: function(/*dijit/MenuItem[]*/ menuItems){
26                // summary:
27                //              replaces this menu item with the given menuItems.  The original
28                //              menu item is not actually removed from the menu - so if you want
29                //              it removed, you must do that explicitly.
30                // returns:
31                //              true if the replace happened, false if not
32                if(this._replaced){ return false; }
33
34                var index = this.getIndexInParent();
35                if(index < 0){ return false; }
36
37                var p = this.getParent();
38
39                array.forEach(menuItems, function(item){
40                        p.addChild(item, index++);
41                });
42                this._replacedWith = menuItems;
43
44                this._replaced = true;
45                return true;
46        },
47       
48        unReplace: function(/*Boolean?*/ destroy){
49                // summary:
50                //              Removes menu items added by calling replace().  It returns the
51                //              array of items that were actually removed (in case you want to
52                //              clean them up later)
53                // destroy:
54                //              Also call destroy on any removed items.
55                // returns:
56                //              The array of items that were actually removed
57               
58                if(!this._replaced){ return []; }
59
60                var p = this.getParent();
61                if(!p){ return []; }
62
63                var r = this._replacedWith;
64                array.forEach(this._replacedWith, function(item){
65                        p.removeChild(item);
66                        if(destroy){
67                                item.destroyRecursive();
68                        }
69                });
70                this._replacedWith = [];
71                this._replaced = false;
72
73                return r; // dijit/MenuItem[]
74        }
75});
76
77// Se need to extend dijit.Menu so that we have a getPlaceholders function.
78lang.extend(Menu, {
79        getPlaceholders: function(/*String?*/ label){
80                // summary:
81                //              Returns an array of placeholders with the given label.  There
82                //              can be multiples.
83                // label:
84                //              Label to search for - if not specified, then all placeholders
85                //              are returned
86                // returns:
87                //              An array of placeholders that match the given label
88                var r = [];
89
90                var children = this.getChildren();
91                array.forEach(children, function(child){
92                        if(child._isPlaceholder && (!label || child.label == label)){
93                                r.push(child);
94                        }else if(child._started && child.popup && child.popup.getPlaceholders){
95                                r = r.concat(child.popup.getPlaceholders(label));
96                        }else if(!child._started && child.dropDownContainer){
97                                var node = query("[widgetId]", child.dropDownContainer)[0];
98                                var menu = registry.byNode(node);
99                                if(menu.getPlaceholders){
100                                        r = r.concat(menu.getPlaceholders(label));
101                                }
102                        }
103                }, this);
104                return r; // dojox/widget/PlaceholderMenuItem[]
105        }
106});
107
108return PlaceholderMenuItem;
109
110});
Note: See TracBrowser for help on using the repository browser.