blob: 01433ad4c49e6605d041a25596cbe3dab829d667 [file] [log] [blame]
/*
Copyright (c) 2004-2009, 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.layout.AccordionContainer"]){
dojo._hasResource["dijit.layout.AccordionContainer"]=true;
dojo.provide("dijit.layout.AccordionContainer");
dojo.require("dojo.fx");
dojo.require("dijit._Container");
dojo.require("dijit._Templated");
dojo.require("dijit.layout.StackContainer");
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.layout.AccordionPane");
dojo.declare("dijit.layout.AccordionContainer",dijit.layout.StackContainer,{duration:dijit.defaultDuration,buttonWidget:"dijit.layout._AccordionButton",_verticalSpace:0,baseClass:"dijitAccordionContainer",postCreate:function(){
this.domNode.style.overflow="hidden";
this.inherited(arguments);
dijit.setWaiRole(this.domNode,"tablist");
},startup:function(){
if(this._started){
return;
}
this.inherited(arguments);
if(this.selectedChildWidget){
var _1=this.selectedChildWidget.containerNode.style;
_1.display="";
_1.overflow="auto";
this.selectedChildWidget._buttonWidget._setSelectedState(true);
}
},_getTargetHeight:function(_2){
var cs=dojo.getComputedStyle(_2);
return Math.max(this._verticalSpace-dojo._getPadBorderExtents(_2,cs).h,0);
},layout:function(){
var _3=this.selectedChildWidget;
var _4=0;
dojo.forEach(this.getChildren(),function(_5){
_4+=_5._buttonWidget.getTitleHeight();
});
var _6=this._contentBox;
this._verticalSpace=_6.h-_4;
this._containerContentBox={h:this._verticalSpace,w:_6.w};
if(_3){
_3.resize(this._containerContentBox);
}
},_setupChild:function(_7){
var _8=dojo.getObject(this.buttonWidget);
var _9=(_7._buttonWidget=new _8({contentWidget:_7,label:_7.title,title:_7.tooltip,iconClass:_7.iconClass,id:_7.id+"_button",parent:this}));
_7._accordionConnectHandle=this.connect(_7,"attr",function(_a,_b){
if(arguments.length==2){
switch(_a){
case "title":
case "iconClass":
_9.attr(_a,_b);
}
}
});
dojo.place(_7._buttonWidget.domNode,_7.domNode,"before");
this.inherited(arguments);
},removeChild:function(_c){
this.disconnect(_c._accordionConnectHandle);
delete _c._accordionConnectHandle;
_c._buttonWidget.destroy();
delete _c._buttonWidget;
this.inherited(arguments);
},getChildren:function(){
return dojo.filter(this.inherited(arguments),function(_d){
return _d.declaredClass!=this.buttonWidget;
},this);
},destroy:function(){
dojo.forEach(this.getChildren(),function(_e){
_e._buttonWidget.destroy();
});
this.inherited(arguments);
},_transition:function(_f,_10){
if(this._inTransition){
return;
}
this._inTransition=true;
var _11=[];
var _12=this._verticalSpace;
if(_f){
_f._buttonWidget.setSelected(true);
this._showChild(_f);
if(this.doLayout&&_f.resize){
_f.resize(this._containerContentBox);
}
var _13=_f.domNode;
dojo.addClass(_13,"dijitVisible");
dojo.removeClass(_13,"dijitHidden");
var _14=_13.style.overflow;
_13.style.overflow="hidden";
_11.push(dojo.animateProperty({node:_13,duration:this.duration,properties:{height:{start:1,end:this._getTargetHeight(_13)}},onEnd:dojo.hitch(this,function(){
_13.style.overflow=_14;
delete this._inTransition;
})}));
}
if(_10){
_10._buttonWidget.setSelected(false);
var _15=_10.domNode,_16=_15.style.overflow;
_15.style.overflow="hidden";
_11.push(dojo.animateProperty({node:_15,duration:this.duration,properties:{height:{start:this._getTargetHeight(_15),end:1}},onEnd:function(){
dojo.addClass(_15,"dijitHidden");
dojo.removeClass(_15,"dijitVisible");
_15.style.overflow=_16;
if(_10.onHide){
_10.onHide();
}
}}));
}
dojo.fx.combine(_11).play();
},_onKeyPress:function(e,_17){
if(this._inTransition||this.disabled||e.altKey||!(_17||e.ctrlKey)){
if(this._inTransition){
dojo.stopEvent(e);
}
return;
}
var k=dojo.keys,c=e.charOrCode;
if((_17&&(c==k.LEFT_ARROW||c==k.UP_ARROW))||(e.ctrlKey&&c==k.PAGE_UP)){
this._adjacent(false)._buttonWidget._onTitleClick();
dojo.stopEvent(e);
}else{
if((_17&&(c==k.RIGHT_ARROW||c==k.DOWN_ARROW))||(e.ctrlKey&&(c==k.PAGE_DOWN||c==k.TAB))){
this._adjacent(true)._buttonWidget._onTitleClick();
dojo.stopEvent(e);
}
}
}});
dojo.declare("dijit.layout._AccordionButton",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dijit.layout","templates/AccordionButton.html","<div dojoAttachPoint='titleNode,focusNode' dojoAttachEvent='ondijitclick:_onTitleClick,onkeypress:_onTitleKeyPress,onfocus:_handleFocus,onblur:_handleFocus,onmouseenter:_onTitleEnter,onmouseleave:_onTitleLeave'\n\t\tclass='dijitAccordionTitle' wairole=\"tab\" waiState=\"expanded-false\"\n\t\t><span class='dijitInline dijitAccordionArrow' waiRole=\"presentation\"></span\n\t\t><span class='arrowTextUp' waiRole=\"presentation\">+</span\n\t\t><span class='arrowTextDown' waiRole=\"presentation\">-</span\n\t\t><img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint='iconNode' style=\"vertical-align: middle\" waiRole=\"presentation\"/>\n\t\t<span waiRole=\"presentation\" dojoAttachPoint='titleTextNode' class='dijitAccordionText'></span>\n</div>\n"),attributeMap:dojo.mixin(dojo.clone(dijit.layout.ContentPane.prototype.attributeMap),{label:{node:"titleTextNode",type:"innerHTML"},title:{node:"titleTextNode",type:"attribute",attribute:"title"},iconClass:{node:"iconNode",type:"class"}}),baseClass:"dijitAccordionTitle",getParent:function(){
return this.parent;
},postCreate:function(){
this.inherited(arguments);
dojo.setSelectable(this.domNode,false);
this.setSelected(this.selected);
var _18=dojo.attr(this.domNode,"id").replace(" ","_");
dojo.attr(this.titleTextNode,"id",_18+"_title");
dijit.setWaiState(this.focusNode,"labelledby",dojo.attr(this.titleTextNode,"id"));
},getTitleHeight:function(){
return dojo.marginBox(this.titleNode).h;
},_onTitleClick:function(){
var _19=this.getParent();
if(!_19._inTransition){
_19.selectChild(this.contentWidget);
dijit.focus(this.focusNode);
}
},_onTitleEnter:function(){
dojo.addClass(this.focusNode,"dijitAccordionTitle-hover");
},_onTitleLeave:function(){
dojo.removeClass(this.focusNode,"dijitAccordionTitle-hover");
},_onTitleKeyPress:function(evt){
return this.getParent()._onKeyPress(evt,this.contentWidget);
},_setSelectedState:function(_1a){
this.selected=_1a;
dojo[(_1a?"addClass":"removeClass")](this.titleNode,"dijitAccordionTitle-selected");
dijit.setWaiState(this.focusNode,"expanded",_1a);
dijit.setWaiState(this.focusNode,"selected",_1a);
this.focusNode.setAttribute("tabIndex",_1a?"0":"-1");
},_handleFocus:function(e){
dojo.toggleClass(this.titleTextNode,"dijitAccordionFocused",e.type=="focus");
},setSelected:function(_1b){
this._setSelectedState(_1b);
if(_1b){
var cw=this.contentWidget;
if(cw.onSelected){
cw.onSelected();
}
}
}});
}