75 lines
2.2 KiB
JavaScript
75 lines
2.2 KiB
JavaScript
/*
|
|
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
|
|
Available via Academic Free License >= 2.1 OR the modified BSD license.
|
|
see: http://dojotoolkit.org/license for details
|
|
*/
|
|
|
|
|
|
if(!dojo._hasResource["dijit.PopupMenuItem"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
|
|
dojo._hasResource["dijit.PopupMenuItem"] = true;
|
|
dojo.provide("dijit.PopupMenuItem");
|
|
dojo.require("dijit.MenuItem");
|
|
|
|
|
|
dojo.declare("dijit.PopupMenuItem",
|
|
dijit.MenuItem,
|
|
{
|
|
_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:
|
|
// | <div dojoType="dijit.PopupMenuItem">
|
|
// | <span>pick me</span>
|
|
// | <popup> ... </popup>
|
|
// | </div>
|
|
// tags:
|
|
// protected
|
|
|
|
if(this.srcNodeRef){
|
|
var nodes = dojo.query("*", this.srcNodeRef);
|
|
dijit.PopupMenuItem.superclass._fillContent.call(this, 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 dojo.doc.body.
|
|
if(!this.popup){
|
|
var node = dojo.query("[widgetId]", this.dropDownContainer)[0];
|
|
this.popup = dijit.byNode(node);
|
|
}
|
|
dojo.body().appendChild(this.popup.domNode);
|
|
this.popup.startup();
|
|
|
|
this.popup.domNode.style.display="none";
|
|
if(this.arrowWrapper){
|
|
dojo.style(this.arrowWrapper, "visibility", "");
|
|
}
|
|
dijit.setWaiState(this.focusNode, "haspopup", "true");
|
|
},
|
|
|
|
destroyDescendants: function(){
|
|
if(this.popup){
|
|
// Destroy the popup, unless it's already been destroyed. This can happen because
|
|
// the popup is a direct child of <body> even though it's logically my child.
|
|
if(!this.popup._destroyed){
|
|
this.popup.destroyRecursive();
|
|
}
|
|
delete this.popup;
|
|
}
|
|
this.inherited(arguments);
|
|
}
|
|
});
|
|
|
|
}
|