dojo.provide("dijit.layout.TabContainer"); dojo.require("dijit.layout.StackContainer"); dojo.require("dijit._Templated"); dojo.require("dijit.layout.TabController"); dojo.declare("dijit.layout.TabContainer", [dijit.layout.StackContainer, dijit._Templated], { // summary: // A Container with tabs to select each child (only one of which is displayed at a time). // description: // A TabContainer is a container that has multiple panes, but shows only // one pane at a time. There are a set of tabs corresponding to each pane, // where each tab has the title (aka title) of the pane, and optionally a close button. // // Publishes topics [widgetId]-addChild, [widgetId]-removeChild, and [widgetId]-selectChild // (where [widgetId] is the id of the TabContainer itself. // tabPosition: String // Defines where tabs go relative to tab content. // "top", "bottom", "left-h", "right-h" tabPosition: "top", baseClass: "dijitTabContainer", // tabStrip: Boolean // Defines whether the tablist gets an extra class for layouting, putting a border/shading // around the set of tabs. tabStrip: false, // nested: Boolean // If true, use styling for a TabContainer nested inside another TabContainer. // For tundra etc., makes tabs look like links, and hides the outer // border since the outer TabContainer already has a border. nested: false, templateString: null, // override setting in StackContainer templatePath: dojo.moduleUrl("dijit.layout", "templates/TabContainer.html"), // _controllerWidget: String // An optional parameter to overrider the default TabContainer controller used. _controllerWidget: "dijit.layout.TabController", postMixInProperties: function(){ // set class name according to tab position, ex: dijiTabContainerTop this.baseClass += this.tabPosition.charAt(0).toUpperCase() + this.tabPosition.substr(1).replace(/-.*/, ""); this.inherited(arguments); }, postCreate: function(){ this.inherited(arguments); // create the tab list that will have a tab (a.k.a. tab button) for each tab panel var TabController = dojo.getObject(this._controllerWidget); this.tablist = new TabController({ id: this.id + "_tablist", tabPosition: this.tabPosition, doLayout: this.doLayout, containerId: this.id, "class": this.baseClass + "-tabs" + (this.doLayout ? "" : " dijitTabNoLayout") }, this.tablistNode); // add Class for tabstrip if (this.tabStrip){ dojo.addClass(this.tablist.domNode, this.baseClass+"Strip"); } if(!this.doLayout){ dojo.addClass(this.domNode, "dijitTabContainerNoLayout"); } if(this.nested){ /* workaround IE's lack of support for "a > b" selectors by * tagging each node in the template. */ dojo.addClass(this.domNode, "dijitTabContainerNested"); dojo.addClass(this.tablist.domNode, "dijitTabContainerTabListNested"); dojo.addClass(this.tablistSpacer, "dijitTabContainerSpacerNested"); dojo.addClass(this.containerNode, "dijitTabPaneWrapperNested"); } }, _setupChild: function(/* Widget */tab){ // Overrides StackContainer._setupChild(). dojo.addClass(tab.domNode, "dijitTabPane"); this.inherited(arguments); return tab; // Widget (TODO: remove this, return code is unused) }, startup: function(){ if(this._started){ return; } // wire up the tablist and its tabs this.tablist.startup(); this.inherited(arguments); }, layout: function(){ // Overrides StackContainer.layout(). // Configure the content pane to take up all the space except for where the tabs are if(!this.doLayout){ return; } // position and size the titles and the container node var titleAlign = this.tabPosition.replace(/-h/,""); var children = [ { domNode: this.tablist.domNode, layoutAlign: titleAlign }, { domNode: this.tablistSpacer, layoutAlign: titleAlign }, { domNode: this.containerNode, layoutAlign: "client" } ]; dijit.layout.layoutChildren(this.domNode, this._contentBox, children); // Compute size to make each of my children. // children[2] is the margin-box size of this.containerNode, set by layoutChildren() call above this._containerContentBox = dijit.layout.marginBox2contentBox(this.containerNode, children[2]); if(this.selectedChildWidget){ this._showChild(this.selectedChildWidget); if(this.doLayout && this.selectedChildWidget.resize){ this.selectedChildWidget.resize(this._containerContentBox); } } }, destroy: function(){ if(this.tablist){ this.tablist.destroy(); } this.inherited(arguments); } });