BorderContainer.js 10 KB

12345678
  1. /*
  2. Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
  3. Available via Academic Free License >= 2.1 OR the modified BSD license.
  4. see: http://dojotoolkit.org/license for details
  5. */
  6. if(!dojo._hasResource["dijit.layout.BorderContainer"]){dojo._hasResource["dijit.layout.BorderContainer"]=true;dojo.provide("dijit.layout.BorderContainer");dojo.require("dijit.layout._LayoutWidget");dojo.require("dojo.cookie");dojo.declare("dijit.layout.BorderContainer",dijit.layout._LayoutWidget,{design:"headline",gutters:true,liveSplitters:true,persist:false,baseClass:"dijitBorderContainer",_splitterClass:"dijit.layout._Splitter",postMixInProperties:function(){if(!this.gutters){this.baseClass+="NoGutter";}this.inherited(arguments);},postCreate:function(){this.inherited(arguments);this._splitters={};this._splitterThickness={};},startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),this._setupChild,this);this.inherited(arguments);},_setupChild:function(_1){var _2=_1.region;if(_2){this.inherited(arguments);dojo.addClass(_1.domNode,this.baseClass+"Pane");var _3=this.isLeftToRight();if(_2=="leading"){_2=_3?"left":"right";}if(_2=="trailing"){_2=_3?"right":"left";}this["_"+_2]=_1.domNode;this["_"+_2+"Widget"]=_1;if((_1.splitter||this.gutters)&&!this._splitters[_2]){var _4=dojo.getObject(_1.splitter?this._splitterClass:"dijit.layout._Gutter");var _5=new _4({container:this,child:_1,region:_2,live:this.liveSplitters});_5.isSplitter=true;this._splitters[_2]=_5.domNode;dojo.place(this._splitters[_2],_1.domNode,"after");_5.startup();}_1.region=_2;}},_computeSplitterThickness:function(_6){this._splitterThickness[_6]=this._splitterThickness[_6]||dojo.marginBox(this._splitters[_6])[(/top|bottom/.test(_6)?"h":"w")];},layout:function(){for(var _7 in this._splitters){this._computeSplitterThickness(_7);}this._layoutChildren();},addChild:function(_8,_9){this.inherited(arguments);if(this._started){this.layout();}},removeChild:function(_a){var _b=_a.region;var _c=this._splitters[_b];if(_c){dijit.byNode(_c).destroy();delete this._splitters[_b];delete this._splitterThickness[_b];}this.inherited(arguments);delete this["_"+_b];delete this["_"+_b+"Widget"];if(this._started){this._layoutChildren(_a.region);}dojo.removeClass(_a.domNode,this.baseClass+"Pane");},getChildren:function(){return dojo.filter(this.inherited(arguments),function(_d){return !_d.isSplitter;});},getSplitter:function(_e){var _f=this._splitters[_e];return _f?dijit.byNode(_f):null;},resize:function(_10,_11){if(!this.cs||!this.pe){var _12=this.domNode;this.cs=dojo.getComputedStyle(_12);this.pe=dojo._getPadExtents(_12,this.cs);this.pe.r=dojo._toPixelValue(_12,this.cs.paddingRight);this.pe.b=dojo._toPixelValue(_12,this.cs.paddingBottom);dojo.style(_12,"padding","0px");}this.inherited(arguments);},_layoutChildren:function(_13){if(!this._borderBox||!this._borderBox.h){return;}var _14=(this.design=="sidebar");var _15=0,_16=0,_17=0,_18=0;var _19={},_1a={},_1b={},_1c={},_1d=(this._center&&this._center.style)||{};var _1e=/left|right/.test(_13);var _1f=!_13||(!_1e&&!_14);var _20=!_13||(_1e&&_14);if(this._top){_19=_20&&this._top.style;_15=dojo.marginBox(this._top).h;}if(this._left){_1a=_1f&&this._left.style;_17=dojo.marginBox(this._left).w;}if(this._right){_1b=_1f&&this._right.style;_18=dojo.marginBox(this._right).w;}if(this._bottom){_1c=_20&&this._bottom.style;_16=dojo.marginBox(this._bottom).h;}var _21=this._splitters;var _22=_21.top,_23=_21.bottom,_24=_21.left,_25=_21.right;var _26=this._splitterThickness;var _27=_26.top||0,_28=_26.left||0,_29=_26.right||0,_2a=_26.bottom||0;if(_28>50||_29>50){setTimeout(dojo.hitch(this,function(){this._splitterThickness={};for(var _2b in this._splitters){this._computeSplitterThickness(_2b);}this._layoutChildren();}),50);return false;}var pe=this.pe;var _2c={left:(_14?_17+_28:0)+pe.l+"px",right:(_14?_18+_29:0)+pe.r+"px"};if(_22){dojo.mixin(_22.style,_2c);_22.style.top=_15+pe.t+"px";}if(_23){dojo.mixin(_23.style,_2c);_23.style.bottom=_16+pe.b+"px";}_2c={top:(_14?0:_15+_27)+pe.t+"px",bottom:(_14?0:_16+_2a)+pe.b+"px"};if(_24){dojo.mixin(_24.style,_2c);_24.style.left=_17+pe.l+"px";}if(_25){dojo.mixin(_25.style,_2c);_25.style.right=_18+pe.r+"px";}dojo.mixin(_1d,{top:pe.t+_15+_27+"px",left:pe.l+_17+_28+"px",right:pe.r+_18+_29+"px",bottom:pe.b+_16+_2a+"px"});var _2d={top:_14?pe.t+"px":_1d.top,bottom:_14?pe.b+"px":_1d.bottom};dojo.mixin(_1a,_2d);dojo.mixin(_1b,_2d);_1a.left=pe.l+"px";_1b.right=pe.r+"px";_19.top=pe.t+"px";_1c.bottom=pe.b+"px";if(_14){_19.left=_1c.left=_17+_28+pe.l+"px";_19.right=_1c.right=_18+_29+pe.r+"px";}else{_19.left=_1c.left=pe.l+"px";_19.right=_1c.right=pe.r+"px";}var _2e=this._borderBox.h-pe.t-pe.b,_2f=_2e-(_15+_27+_16+_2a),_30=_14?_2e:_2f;var _31=this._borderBox.w-pe.l-pe.r,_32=_31-(_17+_28+_18+_29),_33=_14?_32:_31;var dim={top:{w:_33,h:_15},bottom:{w:_33,h:_16},left:{w:_17,h:_30},right:{w:_18,h:_30},center:{h:_2f,w:_32}};var _34=dojo.isIE<8||(dojo.isIE&&dojo.isQuirks)||dojo.some(this.getChildren(),function(_35){return _35.domNode.tagName=="TEXTAREA"||_35.domNode.tagName=="INPUT";});if(_34){var _36=function(_37,_38,_39){if(_37){(_37.resize?_37.resize(_38,_39):dojo.marginBox(_37.domNode,_38));}};if(_24){_24.style.height=_30;}if(_25){_25.style.height=_30;}_36(this._leftWidget,{h:_30},dim.left);_36(this._rightWidget,{h:_30},dim.right);if(_22){_22.style.width=_33;}if(_23){_23.style.width=_33;}_36(this._topWidget,{w:_33},dim.top);_36(this._bottomWidget,{w:_33},dim.bottom);_36(this._centerWidget,dim.center);}else{var _3a={};if(_13){_3a[_13]=_3a.center=true;if(/top|bottom/.test(_13)&&this.design!="sidebar"){_3a.left=_3a.right=true;}else{if(/left|right/.test(_13)&&this.design=="sidebar"){_3a.top=_3a.bottom=true;}}}dojo.forEach(this.getChildren(),function(_3b){if(_3b.resize&&(!_13||_3b.region in _3a)){_3b.resize(null,dim[_3b.region]);}},this);}},destroy:function(){for(var _3c in this._splitters){var _3d=this._splitters[_3c];dijit.byNode(_3d).destroy();dojo.destroy(_3d);}delete this._splitters;delete this._splitterThickness;this.inherited(arguments);}});dojo.extend(dijit._Widget,{region:"",splitter:false,minSize:0,maxSize:Infinity});dojo.require("dijit._Templated");dojo.declare("dijit.layout._Splitter",[dijit._Widget,dijit._Templated],{live:true,templateString:"<div class=\"dijitSplitter\" dojoAttachEvent=\"onkeypress:_onKeyPress,onmousedown:_startDrag,onmouseenter:_onMouse,onmouseleave:_onMouse\" tabIndex=\"0\" waiRole=\"separator\"><div class=\"dijitSplitterThumb\"></div></div>",postCreate:function(){this.inherited(arguments);this.horizontal=/top|bottom/.test(this.region);dojo.addClass(this.domNode,"dijitSplitter"+(this.horizontal?"H":"V"));this._factor=/top|left/.test(this.region)?1:-1;this._cookieName=this.container.id+"_"+this.region;if(this.container.persist){var _3e=dojo.cookie(this._cookieName);if(_3e){this.child.domNode.style[this.horizontal?"height":"width"]=_3e;}}},_computeMaxSize:function(){var dim=this.horizontal?"h":"w",_3f=this.container._splitterThickness[this.region];var _40={left:"right",right:"left",top:"bottom",bottom:"top",leading:"trailing",trailing:"leading"},_41=this.container["_"+_40[this.region]];var _42=dojo.contentBox(this.container.domNode)[dim]-(_41?dojo.marginBox(_41)[dim]:0)-20-_3f*2;return Math.min(this.child.maxSize,_42);},_startDrag:function(e){if(!this.cover){this.cover=dojo.doc.createElement("div");dojo.addClass(this.cover,"dijitSplitterCover");dojo.place(this.cover,this.child.domNode,"after");}dojo.addClass(this.cover,"dijitSplitterCoverActive");if(this.fake){dojo.destroy(this.fake);}if(!(this._resize=this.live)){(this.fake=this.domNode.cloneNode(true)).removeAttribute("id");dojo.addClass(this.domNode,"dijitSplitterShadow");dojo.place(this.fake,this.domNode,"after");}dojo.addClass(this.domNode,"dijitSplitterActive");dojo.addClass(this.domNode,"dijitSplitter"+(this.horizontal?"H":"V")+"Active");if(this.fake){dojo.removeClass(this.fake,"dijitSplitterHover");dojo.removeClass(this.fake,"dijitSplitter"+(this.horizontal?"H":"V")+"Hover");}var _43=this._factor,max=this._computeMaxSize(),min=this.child.minSize||20,_44=this.horizontal,_45=_44?"pageY":"pageX",_46=e[_45],_47=this.domNode.style,dim=_44?"h":"w",_48=dojo.marginBox(this.child.domNode)[dim],_49=this.region,_4a=parseInt(this.domNode.style[_49],10),_4b=this._resize,mb={},_4c=this.child.domNode,_4d=dojo.hitch(this.container,this.container._layoutChildren),de=dojo.doc.body;this._handlers=(this._handlers||[]).concat([dojo.connect(de,"onmousemove",this._drag=function(e,_4e){var _4f=e[_45]-_46,_50=_43*_4f+_48,_51=Math.max(Math.min(_50,max),min);if(_4b||_4e){mb[dim]=_51;dojo.marginBox(_4c,mb);_4d(_49);}_47[_49]=_43*_4f+_4a+(_51-_50)+"px";}),dojo.connect(dojo.doc,"ondragstart",dojo.stopEvent),dojo.connect(dojo.body(),"onselectstart",dojo.stopEvent),dojo.connect(de,"onmouseup",this,"_stopDrag")]);dojo.stopEvent(e);},_onMouse:function(e){var o=(e.type=="mouseover"||e.type=="mouseenter");dojo.toggleClass(this.domNode,"dijitSplitterHover",o);dojo.toggleClass(this.domNode,"dijitSplitter"+(this.horizontal?"H":"V")+"Hover",o);},_stopDrag:function(e){try{if(this.cover){dojo.removeClass(this.cover,"dijitSplitterCoverActive");}if(this.fake){dojo.destroy(this.fake);}dojo.removeClass(this.domNode,"dijitSplitterActive");dojo.removeClass(this.domNode,"dijitSplitter"+(this.horizontal?"H":"V")+"Active");dojo.removeClass(this.domNode,"dijitSplitterShadow");this._drag(e);this._drag(e,true);}finally{this._cleanupHandlers();delete this._drag;}if(this.container.persist){dojo.cookie(this._cookieName,this.child.domNode.style[this.horizontal?"height":"width"],{expires:365});}},_cleanupHandlers:function(){dojo.forEach(this._handlers,dojo.disconnect);delete this._handlers;},_onKeyPress:function(e){this._resize=true;var _52=this.horizontal;var _53=1;var dk=dojo.keys;switch(e.charOrCode){case _52?dk.UP_ARROW:dk.LEFT_ARROW:_53*=-1;case _52?dk.DOWN_ARROW:dk.RIGHT_ARROW:break;default:return;}var _54=dojo.marginBox(this.child.domNode)[_52?"h":"w"]+this._factor*_53;var mb={};mb[this.horizontal?"h":"w"]=Math.max(Math.min(_54,this._computeMaxSize()),this.child.minSize);dojo.marginBox(this.child.domNode,mb);this.container._layoutChildren(this.region);dojo.stopEvent(e);},destroy:function(){this._cleanupHandlers();delete this.child;delete this.container;delete this.cover;delete this.fake;this.inherited(arguments);}});dojo.declare("dijit.layout._Gutter",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"dijitGutter\" waiRole=\"presentation\"></div>",postCreate:function(){this.horizontal=/top|bottom/.test(this.region);dojo.addClass(this.domNode,"dijitGutter"+(this.horizontal?"H":"V"));}});}