You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
236 lines
5.3 KiB
JavaScript
236 lines
5.3 KiB
JavaScript
/*
|
|
Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
|
|
Available via Academic Free License >= 2.1 OR the modified BSD license.
|
|
see: http://dojotoolkit.org/license for details
|
|
*/
|
|
|
|
|
|
if(!dojo._hasResource["dojo.dnd.Container"]){
|
|
dojo._hasResource["dojo.dnd.Container"]=true;
|
|
dojo.provide("dojo.dnd.Container");
|
|
dojo.require("dojo.dnd.common");
|
|
dojo.require("dojo.parser");
|
|
dojo.declare("dojo.dnd.Container",null,{skipForm:false,constructor:function(_1,_2){
|
|
this.node=dojo.byId(_1);
|
|
if(!_2){
|
|
_2={};
|
|
}
|
|
this.creator=_2.creator||null;
|
|
this.skipForm=_2.skipForm;
|
|
this.parent=_2.dropParent&&dojo.byId(_2.dropParent);
|
|
this.map={};
|
|
this.current=null;
|
|
this.containerState="";
|
|
dojo.addClass(this.node,"dojoDndContainer");
|
|
if(!(_2&&_2._skipStartup)){
|
|
this.startup();
|
|
}
|
|
this.events=[dojo.connect(this.node,"onmouseover",this,"onMouseOver"),dojo.connect(this.node,"onmouseout",this,"onMouseOut"),dojo.connect(this.node,"ondragstart",this,"onSelectStart"),dojo.connect(this.node,"onselectstart",this,"onSelectStart")];
|
|
},creator:function(){
|
|
},getItem:function(_3){
|
|
return this.map[_3];
|
|
},setItem:function(_4,_5){
|
|
this.map[_4]=_5;
|
|
},delItem:function(_6){
|
|
delete this.map[_6];
|
|
},forInItems:function(f,o){
|
|
o=o||dojo.global;
|
|
var m=this.map,e=dojo.dnd._empty;
|
|
for(var i in m){
|
|
if(i in e){
|
|
continue;
|
|
}
|
|
f.call(o,m[i],i,this);
|
|
}
|
|
return o;
|
|
},clearItems:function(){
|
|
this.map={};
|
|
},getAllNodes:function(){
|
|
return dojo.query("> .dojoDndItem",this.parent);
|
|
},sync:function(){
|
|
var _7={};
|
|
this.getAllNodes().forEach(function(_8){
|
|
if(_8.id){
|
|
var _9=this.getItem(_8.id);
|
|
if(_9){
|
|
_7[_8.id]=_9;
|
|
return;
|
|
}
|
|
}else{
|
|
_8.id=dojo.dnd.getUniqueId();
|
|
}
|
|
var _a=_8.getAttribute("dndType"),_b=_8.getAttribute("dndData");
|
|
_7[_8.id]={data:_b||_8.innerHTML,type:_a?_a.split(/\s*,\s*/):["text"]};
|
|
},this);
|
|
this.map=_7;
|
|
return this;
|
|
},insertNodes:function(_c,_d,_e){
|
|
if(!this.parent.firstChild){
|
|
_e=null;
|
|
}else{
|
|
if(_d){
|
|
if(!_e){
|
|
_e=this.parent.firstChild;
|
|
}
|
|
}else{
|
|
if(_e){
|
|
_e=_e.nextSibling;
|
|
}
|
|
}
|
|
}
|
|
if(_e){
|
|
for(var i=0;i<_c.length;++i){
|
|
var t=this._normalizedCreator(_c[i]);
|
|
this.setItem(t.node.id,{data:t.data,type:t.type});
|
|
this.parent.insertBefore(t.node,_e);
|
|
}
|
|
}else{
|
|
for(var i=0;i<_c.length;++i){
|
|
var t=this._normalizedCreator(_c[i]);
|
|
this.setItem(t.node.id,{data:t.data,type:t.type});
|
|
this.parent.appendChild(t.node);
|
|
}
|
|
}
|
|
return this;
|
|
},destroy:function(){
|
|
dojo.forEach(this.events,dojo.disconnect);
|
|
this.clearItems();
|
|
this.node=this.parent=this.current=null;
|
|
},markupFactory:function(_f,_10){
|
|
_f._skipStartup=true;
|
|
return new dojo.dnd.Container(_10,_f);
|
|
},startup:function(){
|
|
if(!this.parent){
|
|
this.parent=this.node;
|
|
if(this.parent.tagName.toLowerCase()=="table"){
|
|
var c=this.parent.getElementsByTagName("tbody");
|
|
if(c&&c.length){
|
|
this.parent=c[0];
|
|
}
|
|
}
|
|
}
|
|
this.defaultCreator=dojo.dnd._defaultCreator(this.parent);
|
|
this.sync();
|
|
},onMouseOver:function(e){
|
|
var n=e.relatedTarget;
|
|
while(n){
|
|
if(n==this.node){
|
|
break;
|
|
}
|
|
try{
|
|
n=n.parentNode;
|
|
}
|
|
catch(x){
|
|
n=null;
|
|
}
|
|
}
|
|
if(!n){
|
|
this._changeState("Container","Over");
|
|
this.onOverEvent();
|
|
}
|
|
n=this._getChildByEvent(e);
|
|
if(this.current==n){
|
|
return;
|
|
}
|
|
if(this.current){
|
|
this._removeItemClass(this.current,"Over");
|
|
}
|
|
if(n){
|
|
this._addItemClass(n,"Over");
|
|
}
|
|
this.current=n;
|
|
},onMouseOut:function(e){
|
|
for(var n=e.relatedTarget;n;){
|
|
if(n==this.node){
|
|
return;
|
|
}
|
|
try{
|
|
n=n.parentNode;
|
|
}
|
|
catch(x){
|
|
n=null;
|
|
}
|
|
}
|
|
if(this.current){
|
|
this._removeItemClass(this.current,"Over");
|
|
this.current=null;
|
|
}
|
|
this._changeState("Container","");
|
|
this.onOutEvent();
|
|
},onSelectStart:function(e){
|
|
if(!this.skipForm||!dojo.dnd.isFormElement(e)){
|
|
dojo.stopEvent(e);
|
|
}
|
|
},onOverEvent:function(){
|
|
},onOutEvent:function(){
|
|
},_changeState:function(_11,_12){
|
|
var _13="dojoDnd"+_11;
|
|
var _14=_11.toLowerCase()+"State";
|
|
dojo.removeClass(this.node,_13+this[_14]);
|
|
dojo.addClass(this.node,_13+_12);
|
|
this[_14]=_12;
|
|
},_addItemClass:function(_15,_16){
|
|
dojo.addClass(_15,"dojoDndItem"+_16);
|
|
},_removeItemClass:function(_17,_18){
|
|
dojo.removeClass(_17,"dojoDndItem"+_18);
|
|
},_getChildByEvent:function(e){
|
|
var _19=e.target;
|
|
if(_19){
|
|
for(var _1a=_19.parentNode;_1a;_19=_1a,_1a=_19.parentNode){
|
|
if(_1a==this.parent&&dojo.hasClass(_19,"dojoDndItem")){
|
|
return _19;
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
},_normalizedCreator:function(_1b,_1c){
|
|
var t=(this.creator||this.defaultCreator).call(this,_1b,_1c);
|
|
if(!dojo.isArray(t.type)){
|
|
t.type=["text"];
|
|
}
|
|
if(!t.node.id){
|
|
t.node.id=dojo.dnd.getUniqueId();
|
|
}
|
|
dojo.addClass(t.node,"dojoDndItem");
|
|
return t;
|
|
}});
|
|
dojo.dnd._createNode=function(tag){
|
|
if(!tag){
|
|
return dojo.dnd._createSpan;
|
|
}
|
|
return function(_1d){
|
|
return dojo.create(tag,{innerHTML:_1d});
|
|
};
|
|
};
|
|
dojo.dnd._createTrTd=function(_1e){
|
|
var tr=dojo.create("tr");
|
|
dojo.create("td",{innerHTML:_1e},tr);
|
|
return tr;
|
|
};
|
|
dojo.dnd._createSpan=function(_1f){
|
|
return dojo.create("span",{innerHTML:_1f});
|
|
};
|
|
dojo.dnd._defaultCreatorNodes={ul:"li",ol:"li",div:"div",p:"div"};
|
|
dojo.dnd._defaultCreator=function(_20){
|
|
var tag=_20.tagName.toLowerCase();
|
|
var c=tag=="tbody"||tag=="thead"?dojo.dnd._createTrTd:dojo.dnd._createNode(dojo.dnd._defaultCreatorNodes[tag]);
|
|
return function(_21,_22){
|
|
var _23=_21&&dojo.isObject(_21),_24,_25,n;
|
|
if(_23&&_21.tagName&&_21.nodeType&&_21.getAttribute){
|
|
_24=_21.getAttribute("dndData")||_21.innerHTML;
|
|
_25=_21.getAttribute("dndType");
|
|
_25=_25?_25.split(/\s*,\s*/):["text"];
|
|
n=_21;
|
|
}else{
|
|
_24=(_23&&_21.data)?_21.data:_21;
|
|
_25=(_23&&_21.type)?_21.type:["text"];
|
|
n=(_22=="avatar"?dojo.dnd._createSpan:c)(String(_24));
|
|
}
|
|
if(!n.id){
|
|
n.id=dojo.dnd.getUniqueId();
|
|
}
|
|
return {node:n,data:_24,type:_25};
|
|
};
|
|
};
|
|
}
|