//>>built require({cache:{ 'url:dijit/layout/templates/AccordionButton.html':"
\n\t
+-\"\"\n\t\t\n\t
\n
\n"}}); define("dijit/layout/AccordionContainer", [ "require", "dojo/_base/array", // array.forEach array.map "dojo/_base/declare", // declare "dojo/_base/event", // event.stop "dojo/_base/fx", // fx.Animation "dojo/dom", // dom.setSelectable "dojo/dom-attr", // domAttr.attr "dojo/dom-class", // domClass.remove "dojo/dom-construct", // domConstruct.place "dojo/dom-geometry", "dojo/_base/kernel", "dojo/keys", // keys "dojo/_base/lang", // lang.getObject lang.hitch "dojo/_base/sniff", // has("ie") "dojo/topic", // publish "../focus", // focus.focus() "../_base/manager", // manager.defaultDuration "dojo/ready", "../_Widget", "../_Container", "../_TemplatedMixin", "../_CssStateMixin", "./StackContainer", "./ContentPane", "dojo/text!./templates/AccordionButton.html" ], function(require, array, declare, event, fx, dom, domAttr, domClass, domConstruct, domGeometry, kernel, keys, lang, has, topic, focus, manager, ready, _Widget, _Container, _TemplatedMixin, _CssStateMixin, StackContainer, ContentPane, template){ /*===== var _Widget = dijit._Widget; var _Container = dijit._Container; var _TemplatedMixin = dijit._TemplatedMixin; var _CssStateMixin = dijit._CssStateMixin; var StackContainer = dijit.layout.StackContainer; var ContentPane = dijit.layout.ContentPane; =====*/ // module: // dijit/layout/AccordionContainer // summary: // Holds a set of panes where every pane's title is visible, but only one pane's content is visible at a time, // and switching between panes is visualized by sliding the other panes up/down. // Design notes: // // An AccordionContainer is a StackContainer, but each child (typically ContentPane) // is wrapped in a _AccordionInnerContainer. This is hidden from the caller. // // The resulting markup will look like: // //
//
(one pane) //
(title bar) ...
//
(content pane)
//
//
// // Normally the dijtAccordionChildWrapper is hidden for all but one child (the shown // child), so the space for the content pane is all the title bars + the one dijtAccordionChildWrapper, // which on claro has a 1px border plus a 2px bottom margin. // // During animation there are two dijtAccordionChildWrapper's shown, so we need // to compensate for that. var AccordionButton = declare("dijit.layout._AccordionButton", [_Widget, _TemplatedMixin, _CssStateMixin], { // summary: // The title bar to click to open up an accordion pane. // Internal widget used by AccordionContainer. // tags: // private templateString: template, // label: String // Title of the pane label: "", _setLabelAttr: {node: "titleTextNode", type: "innerHTML" }, // title: String // Tooltip that appears on hover title: "", _setTitleAttr: {node: "titleTextNode", type: "attribute", attribute: "title"}, // iconClassAttr: String // CSS class for icon to left of label iconClassAttr: "", _setIconClassAttr: { node: "iconNode", type: "class" }, baseClass: "dijitAccordionTitle", getParent: function(){ // summary: // Returns the AccordionContainer parent. // tags: // private return this.parent; }, buildRendering: function(){ this.inherited(arguments); var titleTextNodeId = this.id.replace(' ','_'); domAttr.set(this.titleTextNode, "id", titleTextNodeId+"_title"); this.focusNode.setAttribute("aria-labelledby", domAttr.get(this.titleTextNode, "id")); dom.setSelectable(this.domNode, false); }, getTitleHeight: function(){ // summary: // Returns the height of the title dom node. return domGeometry.getMarginSize(this.domNode).h; // Integer }, // TODO: maybe the parent should set these methods directly rather than forcing the code // into the button widget? _onTitleClick: function(){ // summary: // Callback when someone clicks my title. var parent = this.getParent(); parent.selectChild(this.contentWidget, true); focus.focus(this.focusNode); }, _onTitleKeyPress: function(/*Event*/ evt){ return this.getParent()._onKeyPress(evt, this.contentWidget); }, _setSelectedAttr: function(/*Boolean*/ isSelected){ this._set("selected", isSelected); this.focusNode.setAttribute("aria-expanded", isSelected); this.focusNode.setAttribute("aria-selected", isSelected); this.focusNode.setAttribute("tabIndex", isSelected ? "0" : "-1"); } }); var AccordionInnerContainer = declare("dijit.layout._AccordionInnerContainer", [_Widget, _CssStateMixin], { // summary: // Internal widget placed as direct child of AccordionContainer.containerNode. // When other widgets are added as children to an AccordionContainer they are wrapped in // this widget. /*===== // buttonWidget: Function || String // Class to use to instantiate title // (Wish we didn't have a separate widget for just the title but maintaining it // for backwards compatibility, is it worth it?) buttonWidget: null, =====*/ /*===== // contentWidget: dijit._Widget // Pointer to the real child widget contentWidget: null, =====*/ baseClass: "dijitAccordionInnerContainer", // tell nested layout widget that we will take care of sizing isLayoutContainer: true, buildRendering: function(){ // Builds a template like: //
// Button //
// ContentPane //
//
// Create wrapper div, placed where the child is now this.domNode = domConstruct.place("