define("dijit/PopupMenuItem", [ "dojo/_base/declare", // declare "dojo/dom-style", // domStyle.set "dojo/query", // query "./registry", // registry.byNode "./MenuItem", "./hccss" ], function(declare, domStyle, query, registry, MenuItem){ // module: // dijit/PopupMenuItem return declare("dijit.PopupMenuItem", MenuItem, { // summary: // An item in a Menu that spawn a drop down (usually a drop down menu) _fillContent: function(){ // summary: // When Menu is declared in markup, this code gets the menu label and // the popup widget from the srcNodeRef. // description: // srcNodeRefinnerHTML contains both the menu item text and a popup widget // The first part holds the menu item text and the second part is the popup // example: // |
// | pick me // | ... // |
// tags: // protected if(this.srcNodeRef){ var nodes = query("*", this.srcNodeRef); this.inherited(arguments, [nodes[0]]); // save pointer to srcNode so we can grab the drop down widget after it's instantiated this.dropDownContainer = this.srcNodeRef; } }, startup: function(){ if(this._started){ return; } this.inherited(arguments); // we didn't copy the dropdown widget from the this.srcNodeRef, so it's in no-man's // land now. move it to win.doc.body. if(!this.popup){ var node = query("[widgetId]", this.dropDownContainer)[0]; this.popup = registry.byNode(node); } this.ownerDocumentBody.appendChild(this.popup.domNode); this.popup.startup(); this.popup.domNode.style.display="none"; if(this.arrowWrapper){ domStyle.set(this.arrowWrapper, "visibility", ""); } this.focusNode.setAttribute("aria-haspopup", "true"); }, destroyDescendants: function(/*Boolean*/ preserveDom){ if(this.popup){ // Destroy the popup, unless it's already been destroyed. This can happen because // the popup is a direct child of even though it's logically my child. if(!this.popup._destroyed){ this.popup.destroyRecursive(preserveDom); } delete this.popup; } this.inherited(arguments); } }); });