SplitContainer.js 8.4 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.SplitContainer"]){dojo._hasResource["dijit.layout.SplitContainer"]=true;dojo.provide("dijit.layout.SplitContainer");dojo.require("dojo.cookie");dojo.require("dijit.layout._LayoutWidget");dojo.declare("dijit.layout.SplitContainer",dijit.layout._LayoutWidget,{constructor:function(){dojo.deprecated("dijit.layout.SplitContainer is deprecated","use BorderContainer with splitter instead",2);},activeSizing:false,sizerWidth:7,orientation:"horizontal",persist:true,baseClass:"dijitSplitContainer",postMixInProperties:function(){this.inherited("postMixInProperties",arguments);this.isHorizontal=(this.orientation=="horizontal");},postCreate:function(){this.inherited(arguments);this.sizers=[];if(dojo.isMozilla){this.domNode.style.overflow="-moz-scrollbars-none";}if(typeof this.sizerWidth=="object"){try{this.sizerWidth=parseInt(this.sizerWidth.toString());}catch(e){this.sizerWidth=7;}}var _1=dojo.doc.createElement("div");this.virtualSizer=_1;_1.style.position="relative";_1.style.zIndex=10;_1.className=this.isHorizontal?"dijitSplitContainerVirtualSizerH":"dijitSplitContainerVirtualSizerV";this.domNode.appendChild(_1);dojo.setSelectable(_1,false);},destroy:function(){delete this.virtualSizer;dojo.forEach(this._ownconnects,dojo.disconnect);this.inherited(arguments);},startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),function(_2,i,_3){this._setupChild(_2);if(i<_3.length-1){this._addSizer();}},this);if(this.persist){this._restoreState();}this.inherited(arguments);},_setupChild:function(_4){this.inherited(arguments);_4.domNode.style.position="absolute";dojo.addClass(_4.domNode,"dijitSplitPane");},_onSizerMouseDown:function(e){if(e.target.id){for(var i=0;i<this.sizers.length;i++){if(this.sizers[i].id==e.target.id){break;}}if(i<this.sizers.length){this.beginSizing(e,i);}}},_addSizer:function(_5){_5=_5===undefined?this.sizers.length:_5;var _6=dojo.doc.createElement("div");_6.id=dijit.getUniqueId("dijit_layout_SplitterContainer_Splitter");this.sizers.splice(_5,0,_6);this.domNode.appendChild(_6);_6.className=this.isHorizontal?"dijitSplitContainerSizerH":"dijitSplitContainerSizerV";var _7=dojo.doc.createElement("div");_7.className="thumb";_7.id=_6.id;_6.appendChild(_7);this.connect(_6,"onmousedown","_onSizerMouseDown");dojo.setSelectable(_6,false);},removeChild:function(_8){if(this.sizers.length){var i=dojo.indexOf(this.getChildren(),_8);if(i!=-1){if(i==this.sizers.length){i--;}dojo.destroy(this.sizers[i]);this.sizers.splice(i,1);}}this.inherited(arguments);if(this._started){this.layout();}},addChild:function(_9,_a){this.inherited(arguments);if(this._started){var _b=this.getChildren();if(_b.length>1){this._addSizer(_a);}this.layout();}},layout:function(){this.paneWidth=this._contentBox.w;this.paneHeight=this._contentBox.h;var _c=this.getChildren();if(!_c.length){return;}var _d=this.isHorizontal?this.paneWidth:this.paneHeight;if(_c.length>1){_d-=this.sizerWidth*(_c.length-1);}var _e=0;dojo.forEach(_c,function(_f){_e+=_f.sizeShare;});var _10=_d/_e;var _11=0;dojo.forEach(_c.slice(0,_c.length-1),function(_12){var _13=Math.round(_10*_12.sizeShare);_12.sizeActual=_13;_11+=_13;});_c[_c.length-1].sizeActual=_d-_11;this._checkSizes();var pos=0;var _14=_c[0].sizeActual;this._movePanel(_c[0],pos,_14);_c[0].position=pos;pos+=_14;if(!this.sizers){return;}dojo.some(_c.slice(1),function(_15,i){if(!this.sizers[i]){return true;}this._moveSlider(this.sizers[i],pos,this.sizerWidth);this.sizers[i].position=pos;pos+=this.sizerWidth;_14=_15.sizeActual;this._movePanel(_15,pos,_14);_15.position=pos;pos+=_14;},this);},_movePanel:function(_16,pos,_17){if(this.isHorizontal){_16.domNode.style.left=pos+"px";_16.domNode.style.top=0;var box={w:_17,h:this.paneHeight};if(_16.resize){_16.resize(box);}else{dojo.marginBox(_16.domNode,box);}}else{_16.domNode.style.left=0;_16.domNode.style.top=pos+"px";var box={w:this.paneWidth,h:_17};if(_16.resize){_16.resize(box);}else{dojo.marginBox(_16.domNode,box);}}},_moveSlider:function(_18,pos,_19){if(this.isHorizontal){_18.style.left=pos+"px";_18.style.top=0;dojo.marginBox(_18,{w:_19,h:this.paneHeight});}else{_18.style.left=0;_18.style.top=pos+"px";dojo.marginBox(_18,{w:this.paneWidth,h:_19});}},_growPane:function(_1a,_1b){if(_1a>0){if(_1b.sizeActual>_1b.sizeMin){if((_1b.sizeActual-_1b.sizeMin)>_1a){_1b.sizeActual=_1b.sizeActual-_1a;_1a=0;}else{_1a-=_1b.sizeActual-_1b.sizeMin;_1b.sizeActual=_1b.sizeMin;}}}return _1a;},_checkSizes:function(){var _1c=0;var _1d=0;var _1e=this.getChildren();dojo.forEach(_1e,function(_1f){_1d+=_1f.sizeActual;_1c+=_1f.sizeMin;});if(_1c<=_1d){var _20=0;dojo.forEach(_1e,function(_21){if(_21.sizeActual<_21.sizeMin){_20+=_21.sizeMin-_21.sizeActual;_21.sizeActual=_21.sizeMin;}});if(_20>0){var _22=this.isDraggingLeft?_1e.reverse():_1e;dojo.forEach(_22,function(_23){_20=this._growPane(_20,_23);},this);}}else{dojo.forEach(_1e,function(_24){_24.sizeActual=Math.round(_1d*(_24.sizeMin/_1c));});}},beginSizing:function(e,i){var _25=this.getChildren();this.paneBefore=_25[i];this.paneAfter=_25[i+1];this.isSizing=true;this.sizingSplitter=this.sizers[i];if(!this.cover){this.cover=dojo.create("div",{style:{position:"absolute",zIndex:5,top:0,left:0,width:"100%",height:"100%"}},this.domNode);}else{this.cover.style.zIndex=5;}this.sizingSplitter.style.zIndex=6;this.originPos=dojo.position(_25[0].domNode,true);if(this.isHorizontal){var _26=e.layerX||e.offsetX||0;var _27=e.pageX;this.originPos=this.originPos.x;}else{var _26=e.layerY||e.offsetY||0;var _27=e.pageY;this.originPos=this.originPos.y;}this.startPoint=this.lastPoint=_27;this.screenToClientOffset=_27-_26;this.dragOffset=this.lastPoint-this.paneBefore.sizeActual-this.originPos-this.paneBefore.position;if(!this.activeSizing){this._showSizingLine();}this._ownconnects=[];this._ownconnects.push(dojo.connect(dojo.doc.documentElement,"onmousemove",this,"changeSizing"));this._ownconnects.push(dojo.connect(dojo.doc.documentElement,"onmouseup",this,"endSizing"));dojo.stopEvent(e);},changeSizing:function(e){if(!this.isSizing){return;}this.lastPoint=this.isHorizontal?e.pageX:e.pageY;this.movePoint();if(this.activeSizing){this._updateSize();}else{this._moveSizingLine();}dojo.stopEvent(e);},endSizing:function(e){if(!this.isSizing){return;}if(this.cover){this.cover.style.zIndex=-1;}if(!this.activeSizing){this._hideSizingLine();}this._updateSize();this.isSizing=false;if(this.persist){this._saveState(this);}dojo.forEach(this._ownconnects,dojo.disconnect);},movePoint:function(){var p=this.lastPoint-this.screenToClientOffset;var a=p-this.dragOffset;a=this.legaliseSplitPoint(a);p=a+this.dragOffset;this.lastPoint=p+this.screenToClientOffset;},legaliseSplitPoint:function(a){a+=this.sizingSplitter.position;this.isDraggingLeft=!!(a>0);if(!this.activeSizing){var min=this.paneBefore.position+this.paneBefore.sizeMin;if(a<min){a=min;}var max=this.paneAfter.position+(this.paneAfter.sizeActual-(this.sizerWidth+this.paneAfter.sizeMin));if(a>max){a=max;}}a-=this.sizingSplitter.position;this._checkSizes();return a;},_updateSize:function(){var pos=this.lastPoint-this.dragOffset-this.originPos;var _28=this.paneBefore.position;var _29=this.paneAfter.position+this.paneAfter.sizeActual;this.paneBefore.sizeActual=pos-_28;this.paneAfter.position=pos+this.sizerWidth;this.paneAfter.sizeActual=_29-this.paneAfter.position;dojo.forEach(this.getChildren(),function(_2a){_2a.sizeShare=_2a.sizeActual;});if(this._started){this.layout();}},_showSizingLine:function(){this._moveSizingLine();dojo.marginBox(this.virtualSizer,this.isHorizontal?{w:this.sizerWidth,h:this.paneHeight}:{w:this.paneWidth,h:this.sizerWidth});this.virtualSizer.style.display="block";},_hideSizingLine:function(){this.virtualSizer.style.display="none";},_moveSizingLine:function(){var pos=(this.lastPoint-this.startPoint)+this.sizingSplitter.position;dojo.style(this.virtualSizer,(this.isHorizontal?"left":"top"),pos+"px");},_getCookieName:function(i){return this.id+"_"+i;},_restoreState:function(){dojo.forEach(this.getChildren(),function(_2b,i){var _2c=this._getCookieName(i);var _2d=dojo.cookie(_2c);if(_2d){var pos=parseInt(_2d);if(typeof pos=="number"){_2b.sizeShare=pos;}}},this);},_saveState:function(){if(!this.persist){return;}dojo.forEach(this.getChildren(),function(_2e,i){dojo.cookie(this._getCookieName(i),_2e.sizeShare,{expires:365});},this);}});dojo.extend(dijit._Widget,{sizeMin:10,sizeShare:10});}