summaryrefslogtreecommitdiff
path: root/js/dojo/dojox/widget/TitleGroup.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/dojo/dojox/widget/TitleGroup.js')
-rw-r--r--js/dojo/dojox/widget/TitleGroup.js83
1 files changed, 83 insertions, 0 deletions
diff --git a/js/dojo/dojox/widget/TitleGroup.js b/js/dojo/dojox/widget/TitleGroup.js
new file mode 100644
index 0000000..e7a9e52
--- /dev/null
+++ b/js/dojo/dojox/widget/TitleGroup.js
@@ -0,0 +1,83 @@
+//>>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
+ }
+
+ });
+
+});