84 lines
2.9 KiB
JavaScript
84 lines
2.9 KiB
JavaScript
|
//>>built
|
||
|
define("dojox/widget/TitleGroup", ["dojo", "dijit/registry", "dijit/_Widget", "dijit/TitlePane"], function(dojo, registry, widget, titlepane){
|
||
|
|
||
|
var tp = titlepane.prototype,
|
||
|
lookup = function(){
|
||
|
// generic handler function for click and keypress
|
||
|
var parent = this._dxfindParent && this._dxfindParent();
|
||
|
parent && parent.selectChild(this);
|
||
|
}
|
||
|
;
|
||
|
|
||
|
// this might hide this uberprivate function from the docparser.
|
||
|
tp._dxfindParent = function(){
|
||
|
// summary: TitlePane's MUST be first-children of a TitleGroup. only used by
|
||
|
// `dojox.widget.TitleGroup`. Finds a possible parent TitleGroup of a TitlePane
|
||
|
var n = this.domNode.parentNode;
|
||
|
if(n){
|
||
|
n = registry.getEnclosingWidget(n);
|
||
|
return n && n instanceof dojox.widget.TitleGroup && n;
|
||
|
}
|
||
|
return n;
|
||
|
};
|
||
|
|
||
|
// if we click our own title, hide everyone
|
||
|
dojo.connect(tp, "_onTitleClick", lookup);
|
||
|
dojo.connect(tp, "_onTitleKey", function(e){
|
||
|
// if we're tabbing through the items in a group, don't do toggles.
|
||
|
// if we hit enter, let it happen.
|
||
|
if(!(e && e.type && e.type == "keypress" && e.charOrCode == dojo.keys.TAB)){
|
||
|
lookup.apply(this, arguments);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
return dojo.declare("dojox.widget.TitleGroup", dijit._Widget, {
|
||
|
// summary: A container which controls a series of `dijit.TitlePane`s,
|
||
|
// allowing one to be visible and hiding siblings
|
||
|
//
|
||
|
// description:
|
||
|
// A container which controls a series of `dijit.TitlePane`s,
|
||
|
// allowing one to be visible and hiding siblings. Behaves similarly
|
||
|
// to a `dijit.layout.AccordionContainer` in that the children
|
||
|
// are all stacked, though merges the TitlePane behavior of
|
||
|
// variable height
|
||
|
//
|
||
|
// example:
|
||
|
// | var group = new dojox.widget.TitleGroup().placeAt(dojo.body());
|
||
|
// | new dijit.TitlePane({ title:"One" }, "fromsource").placeAt(group);
|
||
|
// | new dijit.TitlePane({ title:"Remote", href:"foo.html" }).placeAt(group);
|
||
|
|
||
|
"class":"dojoxTitleGroup",
|
||
|
|
||
|
addChild: function(widget, position){
|
||
|
// summary: Add a passed widget reference to this container at an optional
|
||
|
// position index.
|
||
|
//
|
||
|
// widget: dijit.TitlePane
|
||
|
// A widget reference to add
|
||
|
// position: String?|Int?
|
||
|
// An optional index or position to pass. defaults to "last"
|
||
|
return widget.placeAt(this.domNode, position); // dijit.TitlePane
|
||
|
},
|
||
|
|
||
|
removeChild: function(widget){
|
||
|
// summary: Remove the passed widget from this container. Does not destroy
|
||
|
// child.
|
||
|
|
||
|
this.domNode.removeChild(widget.domNode);
|
||
|
return widget;
|
||
|
},
|
||
|
|
||
|
selectChild: function(widget){
|
||
|
// summary: close all found titlePanes within this group, excluding
|
||
|
// the one the we pass to select
|
||
|
widget && dojo.query("> .dijitTitlePane", this.domNode).forEach(function(n){
|
||
|
var tp = registry.byNode(n);
|
||
|
tp && tp !== widget && tp.open && tp.toggle(); // could race if open is set onEnd of slide
|
||
|
});
|
||
|
return widget; // dijit.TitlePane
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
});
|