DDTabPanel_wev8.js
2.34 KB
Ext.namespace("Ext.ux.panel");Ext.ux.panel.DDTabPanel=Ext.extend(Ext.TabPanel,{arrowOffsetX:-9,arrowOffsetY:-8,initComponent:function(){Ext.ux.panel.DDTabPanel.superclass.initComponent.call(this);this.ddGroupId="dd-tabpanel-group-"+Ext.ux.panel.DDTabPanel.superclass.getId.call(this)},initEvents:function(){Ext.ux.panel.DDTabPanel.superclass.initEvents.call(this);var a=this.ddGroupId;this.dd=new Ext.ux.panel.DDTabPanel.DropTarget(this,{ddGroup:a});this.arrow=Ext.DomHelper.append(Ext.getBody(),'<div class="dd-arrow-down"></div>',true);this.arrow.hide()},initTab:function(b,a){Ext.ux.panel.DDTabPanel.superclass.initTab.call(this,b,a);b.position=(a+1)*2;var d=this.id+"__"+b.id;var c=this.ddGroupId;Ext.applyIf(b,{allowDrag:true});b.ds=new Ext.dd.DragSource(d,{ddGroup:c,dropEl:b,dropElHeader:Ext.get(d,true)});b.ds.beforeDragEnter=function(f,e,g){f.tabpanel.activate(this.dropEl)};b.ds.onMouseDown=(function(e){this.activate(b)}).createDelegate(this);b.enableDrag=function(){this.allowDrag=true;return this.ds.unlock()};b.disableDrag=function(){this.allowDrag=false;return this.ds.lock()};if(b.allowDrag){b.enableDrag()}else{b.disableDrag()}}});Ext.ux.panel.DDTabPanel.DropTarget=Ext.extend(Ext.dd.DropTarget,{constructor:function(b,a){this.tabpanel=b;var c=Ext.select("div.x-tab-panel-header",false,b.getEl().dom).elements[0];Ext.ux.panel.DDTabPanel.DropTarget.superclass.constructor.call(this,c,a)},notifyOver:function(j,c,b){this.tabpanel=j.dropEl.ownerCt;var f=this.tabpanel.items;var i=f.length;if(i<2){return"x-dd-drop-nodrop"}var k=this.tabpanel.arrow;var g=new Ext.Element(this.el.dom);var h=g.getY();var a;try{if(c.target.innerHTML!=""&&c.target.innerHTML.indexOf("</")==-1&&c.target.innerHTML.indexOf(">")==-1){a=new Ext.Element(c.target.parentNode.parentNode.parentNode.parentNode).getX()}k.setTop(h+this.tabpanel.arrowOffsetY);k.setLeft(a+this.tabpanel.arrowOffsetX);k.show()}catch(d){}return"x-dd-drop-ok"},notifyDrop:function(a,d,c){this.tabpanel=a.dropEl.ownerCt;this.tabpanel.arrow.hide();a.proxy.hide();try{if(d.target.innerHTML!=""&&d.target.innerHTML.indexOf("</")==-1&&d.target.innerHTML.indexOf(">")==-1){a.el.dom.parentNode.insertBefore(a.el.dom,d.target.parentNode.parentNode.parentNode.parentNode)}}catch(b){}return true},notifyOut:function(a,c,b){a.proxy.hide();this.tabpanel=a.dropEl.ownerCt;this.tabpanel.arrow.hide()}});Ext.reg("ddtabpanel",Ext.ux.panel.DDTabPanel);