📄 ext.accordion.js
字号:
Ext.Accordion=function(B,A){Ext.Accordion.superclass.constructor.call(this,B,A);this.items=new Ext.util.MixedCollection();this.expanded=null;this.on({beforeexpand:{scope:this,fn:function(B){if(!B.docked)this.raise(B);var A;if(this.fitHeight&&B.docked){A=this.getPanelBodyHeight();if(A)B.body.setHeight(A)}if(B.docked){this.expandCount++;this.expanding=true}if(this.independent||!B.docked)return this;if(this.expanded&&this.expanded.docked)this.expanded.collapse();this.expanded=B}},beforecollapse:{scope:this,fn:function(A){if(!A.docked)this.raise(A);return this}},expand:{scope:this,fn:function(A){this.fireEvent("panelexpand",A)}},collapse:{scope:this,fn:function(A){this.fireEvent("panelcollapse",A)}},animationcompleted:{scope:this,fn:function(B){var A=B.el.getBox();this.expandCount=(this.expandCount&&this.expanding)?--this.expandCount:0;if((0===this.expandCount)&&this.expanding)this.expanding=false;this.fireEvent("panelbox",B,A)}},pinned:{scope:this,fn:function(B,A){if(!A)if(B.collapseOnUnpin)B.collapse();else if(!this.independent){this.items.each(function(A){if(A!==B&&A.docked&&!A.pinned)A.collapse()});this.expanded=B}this.fireEvent("panelpinned",B,A)}}});this.addEvents({panelcollapse:true,panelexpand:true,panelpinned:true,independent:true,orderchange:true,undockable:true,panelundock:true,paneldock:true,panelbox:true,useshadow:true});this.body=Ext.get(this.body)||this.el;this.resizeEl=this.body;this.id=this.el.id;this.body.addClass("x-dock-body");this.desktop=Ext.get(this.desktop||document.body);this.wrapEl=Ext.get(this.wrapEl);if(this.fitHeight){this.body.setStyle("overflow","hidden");this.body.setHeight(this.initialHeight||this.body.getHeight());if(this.boxWrap&&this.wrapEl)this.wrapEl.boxWrap()}if(this.monitorWindowResize)Ext.EventManager.onWindowResize(this.adjustViewport,this);this.dd=new Ext.dd.DropZone(this.body.dom,{ddGroup:"dock-"+this.id})};Ext.extend(Ext.Accordion,Ext.ContentPanel,{independent:false,undockable:true,useShadow:true,boxWrap:false,fitHeight:false,initialHeight:0,animate:true,zindex:9999,zindexInc:2,expandCount:0,expanding:false,monitorWindowResize:true,resizable:true,draggable:true,add:function(A){this.body.appendChild(A.el);A.docked=true;A.body.replaceClass("x-dock-panel-body-undocked","x-dock-panel-body-docked");this.items.add(A.el.id,A);this.relayEvents(A,["beforecollapse","collapse","beforeexpand","expand","animationcompleted","pinned","boxchange"]);if(this.draggable)A.dd=new Ext.Accordion.DDDock(A,"dock-"+this.id,this);A.resizable=this.resizable;A.useShadow=this.useShadow;A.setShadow(this.useShadow);if(A.shadow)A.shadow.hide();A.animate=undefined===A.animate?this.animate:A.animate;this.zindex+=this.zindexInc;A.zindex=this.zindex;A.body.on("click",this.onClickPanelBody.createDelegate(this,[A]));if(this.fitHeight)this.setPanelHeight(A);A.dock=this;A.desktop=this.desktop;return A},raise:function(A){this.items.each(function(B){if(B.zindex>A.zindex){B.zindex-=this.zindexInc;B.el.applyStyles({"z-index":B.zindex});if(!B.docked)B.setShadow(true)}},this);A.zindex=this.zindex;A.el.applyStyles({"z-index":A.zindex});if(this.desktop.lastChild!==A.el.dom)this.desktop.appendChild(A.el.dom);if(!A.docked)A.setShadow(true)},resetOrder:function(){this.items.each(function(A){if(!A.docked)return;this.body.appendChild(A.el)},this);this.updateOrder();return this},updateOrder:function(){var A=[],B=this.body.select(".x-layout-panel-hd");B.each(function(B){A.push(B.dom.parentNode.id)});this.order=A;this.fireEvent("orderchange",this,A)},getOrder:function(){return this.order},setOrder:function(C){if("object"!==typeof C||undefined===C.length)throw"setOrder: Argument is not array.";var B;for(var A=0;A<C.length;A++){B=Ext.get(C[A]);if(B)this.body.appendChild(B)}this.updateOrder();return this},collapseAll:function(A,B){this.items.each(function(C){if(C.docked){C.pinned=A?false:C.pinned;if(!B||C!==B)C.collapse()}},this);return this},expandAll:function(){if(this.independent)this.items.each(function(A){if(A.docked&&A.collapsed)A.expand()},this)},undock:function(B,A){B="string"===typeof B?this.items.get(B):B;if(B&&B.docked&&this.undockable){if(A.x<0||A.y<0)return this;this.desktop.appendChild(B.el.dom);B.el.applyStyles({position:"absolute","z-index":B.zindex});B.body.replaceClass("x-dock-panel-body-docked","x-dock-panel-body-undocked");B.setBox(A);B.docked=false;if(B.shadow)B.shadow.hide();this.raise(B);this.setPanelHeight(this.expanded);B.setResizable(!B.collapsed);if(B.bodyScroll)B.body.setStyle("overflow","auto");B.lastWidth=A.width;B.lastHeight=A.height;this.fireEvent("panelundock",B,{x:A.x,y:A.y,width:A.width,height:A.height})}return this},dock:function(B,A){B="string"===typeof B?this.items.get(B):B;if(B&&!B.docked){if(!B.collapsed){B.lastWidth=B.el.getWidth();B.lastHeight=B.el.getHeight()}if(A&&(this.body.id!==A))B.el.insertBefore(Ext.fly(A));else B.el.appendTo(this.body);B.docked=true;B.body.replaceClass("x-dock-panel-body-undocked","x-dock-panel-body-docked");B.el.applyStyles({top:"",left:"",width:"",height:"","z-index":"",position:"relative",visibility:""});B.body.applyStyles({width:"",height:""});B.setResizable(false);if(B.shadow)B.shadow.hide();this.setPanelHeight(B.collapsed?this.expanded:B);this.fireEvent("paneldock",B)}return this},setIndependent:function(A){this.independent=A?true:false;this.fireEvent("independent",this,A);return this},setUndockable:function(A){this.items.each(function(B){if(!A&&!B.docked){this.dock(B);if(!this.independent&&!B.collapsed&&!B.pinned)B.collapse()}if(B.docked&&B.draggable){B.dd.constrainTo(this.body,0,false);B.dd.clearConstraints();if(A)B.constrainToDesktop();else B.dd.setXConstraint(0,0)}},this);this.undockable=A;this.fireEvent("undockable",this,A);return this},restoreState:function(B){if(!B)B=Ext.state.Manager;var A=new Ext.AccordionStateManager();A.init(this,B)},setShadow:function(A){this.items.each(function(B){B.useShadow=A;B.setShadow(false);if(!B.docked)B.setShadow(A)});this.useShadow=A;this.fireEvent("useshadow",this,A);return this},onClickPanelBody:function(A){if(!A.docked)this.raise(A)},getPanelBodyHeight:function(){var A=0;this.items.each(function(B){A+=B.docked?B.titleEl.getHeight():0});this.panelBodyHeight=this.body.getHeight()-A-this.body.getFrameWidth("tb")+1;return this.panelBodyHeight},setPanelHeight:function(A){A=A||this.expanded;if(this.fitHeight&&A&&A.docked)A.body.setHeight(this.getPanelBodyHeight());return this},constrainToDesktop:function(){this.items.each(function(A){A.constrainToDesktop()},this);return this},clearConstraints:function(){this.items.each(function(A){A.dd.clearConstraints()})},showAll:function(B,A){B=(false===B?false:true);this.items.each(function(C){C.show(B,A)});return this},hideAll:function(A){return this.showAll(false,A)},setDockScroll:function(A){if(A&&!this.fitHeight)this.body.setStyle("overflow","auto");else this.body.setStyle("overflow","hidden")},setSize:function(A,B){Ext.Accordion.superclass.setSize.call(this,A,B);this.setPanelHeight();return this},adjustViewport:function(){var A=this.desktop.dom===document.body?{}:Ext.get(this.desktop).getBox();A.height=this.desktop===document.body?window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight:A.height;A.width=this.desktop===document.body?window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth:A.width;A.x=this.desktop===document.body?0:A.x;A.y=this.desktop===document.body?0:A.y;this.items.each(function(B){if(!B.docked)B.moveToViewport(A)})}});Ext.Accordion.DDDock=function(C,A,B){Ext.Accordion.DDDock.superclass.constructor.call(this,C.el.dom,A);this.panel=C;this.dock=B;this.setHandleElId(C.titleEl.id);if(false===B.undockable)this.setXConstraint(0,0);this.lastY=0;this.DDM.mode=Ext.dd.DDM.POINT};Ext.extend(Ext.Accordion.DDDock,Ext.dd.DDProxy,{startDrag:function(G,C){this.lastMoveTarget=null;this.createGhost();var D=Ext.get(this.getEl()),F=Ext.get(this.getDragEl()),E,B,A;if(this.dock.undockable){if(this.panel.collapsed)E=this.panel.titleEl.getHeight();else{E=F.getHeight();E=E<=this.panel.titleEl.getHeight()?D.getHeight():E}this.panel.constrainToDesktop();B=this.rightConstraint+D.getWidth()-F.getWidth();A=this.bottomConstraint+D.getHeight()-E;this.setXConstraint(this.leftConstraint,B);this.setYConstraint(this.topConstraint,A)}else if(this.panel.docked)this.setXConstraint(0,0);F.hide();if(!this.panel.docked)this.dock.raise(this.panel);this.panel.setShadow(false);this.panel.body.dom.style.visibility="";if(!this.panel.docked){D.hide();F.show()}},createGhost:function(){var C=Ext.get(this.getEl()),D=Ext.get(this.getDragEl()),B=this.dock,E=this.panel;D.addClass("x-dock-panel-ghost");D.applyStyles({border:"1px solid #84a0c4","z-index":B.zindex+B.zindexInc});D.setBox(C.getBox());if(E.docked){if(E.lastWidth&&B.undockable)D.setWidth(E.lastWidth);if(!E.collapsed&&B.undockable&&(E.lastHeight>E.titleEl.getHeight()))D.setHeight(E.lastHeight)}C.clean();var A=Ext.DomHelper.append(D,{tag:"div"},true);A.update(C.dom.firstChild.innerHTML);A.dom.className=C.dom.firstChild.className;if(E.collapsed&&Ext.isIE)A.dom.style.borderBottom="0"},onDragOver:function(E,A){this.currentTarget=A;this.lastTarget=A;var C=Ext.get(this.getEl()),B=this.dock.items.get(A);if(B){if(B.docked&&(B.collapsed||!this.panel.docked))B.titleEl.addClass("x-dock-panel-title-dragover")}else if(!this.panel.docked)this.dock.body.addClass("x-dock-body-dragover");else this.panel.titleEl.addClass("x-dock-panel-title-dragover");if(!B||!B.docked)return;var D;if(this.panel.docked){D=B.el;if(B.collapsed||this.lastMoveTarget!==B)if(this.movingUp){C.insertBefore(D);this.lastMoveTarget=B}else{C.insertAfter(D);this.lastMoveTarget=B}this.DDM.refreshCache(this.groups)}},onDragOut:function(C,A){var B=this.dock.items.get(A);if(!B){this.dock.body.removeClass("x-dock-body-dragover");if(this.dock.body.id===A)this.panel.titleEl.removeClass("x-dock-panel-title-dragover")}else B.titleEl.removeClass("x-dock-panel-title-dragover");this.currentTarget=null},onDrag:function(D){var B=Ext.get(this.getEl()),C=Ext.get(this.getDragEl());if(!C.isVisible())C.show();var A=D.getPageY();this.movingUp=this.lastY>A;this.lastY=A},endDrag:function(){var C=Ext.get(this.getEl()),D=Ext.get(this.getDragEl()),A=D.getBox();this.panel.titleEl.removeClass("x-dock-panel-title-dragover");this.dock.body.removeClass("x-dock-body-dragover");var B=this.dock.items.get(this.currentTarget);if((this.panel.docked&&!this.currentTarget)||(B&&!B.docked))this.dock.undock(this.panel,A);else if(this.currentTarget){if(B)B.titleEl.removeClass("x-dock-panel-title-dragover");else this.dock.body.removeClass("x-dock-body-dragover");this.dock.dock(this.panel,this.currentTarget)}if(!this.panel.docked){this.panel.setBox(A);C.show()}D.hide();D.update("");D.applyStyles({top:"-9999px",left:"-9999px",height:"0px",width:"0px"});this.dock.updateOrder();if(!this.panel.collapsed&&!this.dock.independent&&this.panel.docked){this.dock.collapseAll(false,this.panel);this.dock.expanded=this.panel}this.dock.fireEvent("panelbox",this.panel,{x:A.x,y:A.y,width:A.width,height:A.height})}});Ext.AccordionStateManager=function(A){this.state={dock:{},panels:{}}};Ext.AccordionStateManager.prototype={init:function(C,D){this.provider=D;var E,B=D.get(C.id+"-dock-state");if(B){if(undefined!==B.dock.independent)C.setIndependent(B.dock.independent);if(undefined!==B.dock.undockable)C.setUndockable(B.dock.undockable);if(undefined!==B.dock.useShadow)C.setShadow(B.dock.useShadow);if("object"===typeof B.dock.order&&B.dock.order.length)C.setOrder(B.dock.order);for(var A in B.panels){E=C.items.get(A);if(E){E.collapsed=(undefined===typeof B.panels[A].collapsed)?true:B.panels[A].collapsed;if(undefined!==typeof B.panels[A].docked){if(!B.panels[A].docked&&"object"===typeof B.panels[A].box)C.undock(E,B.panels[A].box);E.docked=B.panels[A].docked}if(undefined!==typeof B.panels[A].pinned)E.pinned=B.panels[A].pinned;if(E.collapsed)E.collapse();else if(!C.expanded||C.independent||E.pinned||!E.docked){E.body.show();E.collapsed=false;if(!E.pinned&&E.docked)C.expanded=E;E.updateVisuals()}}}C.setPanelHeight(C.expanded);this.state=B}this.dock=C;C.on({panelcollapse:{scope:this,fn:this.onPanelCollapse},panelexpand:{scope:this,fn:this.onPanelCollapse},panelpinned:{scope:this,fn:this.onPanelPinned},independent:{scope:this,fn:this.onIndependent},orderchange:{scope:this,fn:this.onOrderChange},undockable:{scope:this,fn:this.onUndockable},paneldock:{scope:this,fn:this.onPanelUnDock},panelundock:{scope:this,fn:this.onPanelUnDock},panelbox:{scope:this,fn:this.onPanelUnDock},boxchange:{scope:this,fn:this.onPanelUnDock},useshadow:{scope:this,fn:this.onUseShadow}})},onPanelCollapse:function(A){this.state.panels[A.id]=this.state.panels[A.id]||{};this.state.panels[A.id].collapsed=A.collapsed;this.storeState()},onPanelPinned:function(B,A){this.state.panels[B.id]=this.state.panels[B.id]||{};this.state.panels[B.id].pinned=A;this.storeState()},onPanelUnDock:function(B,A){this.state.panels[B.id]=this.state.panels[B.id]||{};this.state.panels[B.id].docked=B.docked;this.state.panels[B.id].box=A||null;this.storeState()},onIndependent:function(A,B){this.state.dock.independent=B;this.storeState()},onOrderChange:function(A,B){this.state.dock.order=B;this.storeState()},onUndockable:function(B,A){this.state.dock.undockable=A;this.storeState()},onUseShadow:function(A,B){this.state.dock.useShadow=B;this.storeState()},storeState:function(){this.provider.set.defer(700,this,[this.dock.id+"-dock-state",this.state])}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -