in tapestry-framework/src/js/dojo-0.4.3-custom-4.1.6/src/dnd/HtmlDragAndDrop.js [52:201]
dojo.declare("dojo.dnd.HtmlDragObject",dojo.dnd.DragObject,{dragClass:"",opacity:0.5,createIframe:true,disableX:false,disableY:false,createDragNode:function(){
var _a=this.domNode.cloneNode(true);
if(this.dragClass){
dojo.html.addClass(_a,this.dragClass);
}
if(this.opacity<1){
dojo.html.setOpacity(_a,this.opacity);
}
var _b=_a.tagName.toLowerCase();
var _c=(_b=="tr");
if((_c)||(_b=="tbody")){
var _d=this.domNode.ownerDocument;
var _e=_d.createElement("table");
if(_c){
var _f=_d.createElement("tbody");
_e.appendChild(_f);
_f.appendChild(_a);
}else{
_e.appendChild(_a);
}
var _10=((_c)?this.domNode:this.domNode.firstChild);
var _11=((_c)?_a:_a.firstChild);
var _12=_10.childNodes;
var _13=_11.childNodes;
for(var i=0;i<_12.length;i++){
if((_13[i])&&(_13[i].style)){
_13[i].style.width=dojo.html.getContentBox(_12[i]).width+"px";
}
}
_a=_e;
}
if((dojo.render.html.ie55||dojo.render.html.ie60)&&this.createIframe){
with(_a.style){
top="0px";
left="0px";
}
var _15=document.createElement("div");
_15.appendChild(_a);
this.bgIframe=new dojo.html.BackgroundIframe(_15);
_15.appendChild(this.bgIframe.iframe);
_a=_15;
}
_a.style.zIndex=999;
return _a;
},onDragStart:function(e){
dojo.html.clearSelection();
this.scrollOffset=dojo.html.getScroll().offset;
this.dragStartPosition=dojo.html.getAbsolutePosition(this.domNode,true);
this.dragOffset={y:this.dragStartPosition.y-e.pageY,x:this.dragStartPosition.x-e.pageX};
this.dragClone=this.createDragNode();
this.containingBlockPosition=this.domNode.offsetParent?dojo.html.getAbsolutePosition(this.domNode.offsetParent,true):{x:0,y:0};
if(this.constrainToContainer){
this.constraints=this.getConstraints();
}
with(this.dragClone.style){
position="absolute";
top=this.dragOffset.y+e.pageY+"px";
left=this.dragOffset.x+e.pageX+"px";
}
dojo.body().appendChild(this.dragClone);
dojo.event.topic.publish("dragStart",{source:this});
},getConstraints:function(){
if(this.constrainingContainer.nodeName.toLowerCase()=="body"){
var _17=dojo.html.getViewport();
var _18=_17.width;
var _19=_17.height;
var _1a=dojo.html.getScroll().offset;
var x=_1a.x;
var y=_1a.y;
}else{
var _1d=dojo.html.getContentBox(this.constrainingContainer);
_18=_1d.width;
_19=_1d.height;
x=this.containingBlockPosition.x+dojo.html.getPixelValue(this.constrainingContainer,"padding-left",true)+dojo.html.getBorderExtent(this.constrainingContainer,"left");
y=this.containingBlockPosition.y+dojo.html.getPixelValue(this.constrainingContainer,"padding-top",true)+dojo.html.getBorderExtent(this.constrainingContainer,"top");
}
var mb=dojo.html.getMarginBox(this.domNode);
return {minX:x,minY:y,maxX:x+_18-mb.width,maxY:y+_19-mb.height};
},updateDragOffset:function(){
var _1f=dojo.html.getScroll().offset;
if(_1f.y!=this.scrollOffset.y){
var _20=_1f.y-this.scrollOffset.y;
this.dragOffset.y+=_20;
this.scrollOffset.y=_1f.y;
}
if(_1f.x!=this.scrollOffset.x){
var _20=_1f.x-this.scrollOffset.x;
this.dragOffset.x+=_20;
this.scrollOffset.x=_1f.x;
}
},onDragMove:function(e){
this.updateDragOffset();
var x=this.dragOffset.x+e.pageX;
var y=this.dragOffset.y+e.pageY;
if(this.constrainToContainer){
if(x<this.constraints.minX){
x=this.constraints.minX;
}
if(y<this.constraints.minY){
y=this.constraints.minY;
}
if(x>this.constraints.maxX){
x=this.constraints.maxX;
}
if(y>this.constraints.maxY){
y=this.constraints.maxY;
}
}
this.setAbsolutePosition(x,y);
dojo.event.topic.publish("dragMove",{source:this});
},setAbsolutePosition:function(x,y){
if(!this.disableY){
this.dragClone.style.top=y+"px";
}
if(!this.disableX){
this.dragClone.style.left=x+"px";
}
},onDragEnd:function(e){
switch(e.dragStatus){
case "dropSuccess":
dojo.html.removeNode(this.dragClone);
this.dragClone=null;
break;
case "dropFailure":
var _27=dojo.html.getAbsolutePosition(this.dragClone,true);
var _28={left:this.dragStartPosition.x+1,top:this.dragStartPosition.y+1};
var _29=dojo.lfx.slideTo(this.dragClone,_28,300);
var _2a=this;
dojo.event.connect(_29,"onEnd",function(e){
dojo.html.removeNode(_2a.dragClone);
_2a.dragClone=null;
});
_29.play();
break;
}
dojo.event.topic.publish("dragEnd",{source:this});
},constrainTo:function(_2c){
this.constrainToContainer=true;
if(_2c){
this.constrainingContainer=_2c;
}else{
this.constrainingContainer=this.domNode.parentNode;
}
}},function(_2d,_2e){
this.domNode=dojo.byId(_2d);
this.type=_2e;
this.constrainToContainer=false;
this.dragSource=null;
dojo.dnd.DragObject.prototype.register.call(this);
});