232 lines
5.2 KiB
JavaScript
232 lines
5.2 KiB
JavaScript
/*
|
|
Copyright (c) 2004-2011, 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
|
|
*/
|
|
|
|
//>>built
|
|
define("dojo/dnd/Container",["../main","../Evented","./common","../parser"],function(_1,_2){
|
|
_1.declare("dojo.dnd.Container",_2,{skipForm:false,constructor:function(_3,_4){
|
|
this.node=_1.byId(_3);
|
|
if(!_4){
|
|
_4={};
|
|
}
|
|
this.creator=_4.creator||null;
|
|
this.skipForm=_4.skipForm;
|
|
this.parent=_4.dropParent&&_1.byId(_4.dropParent);
|
|
this.map={};
|
|
this.current=null;
|
|
this.containerState="";
|
|
_1.addClass(this.node,"dojoDndContainer");
|
|
if(!(_4&&_4._skipStartup)){
|
|
this.startup();
|
|
}
|
|
this.events=[_1.connect(this.node,"onmouseover",this,"onMouseOver"),_1.connect(this.node,"onmouseout",this,"onMouseOut"),_1.connect(this.node,"ondragstart",this,"onSelectStart"),_1.connect(this.node,"onselectstart",this,"onSelectStart")];
|
|
},creator:function(){
|
|
},getItem:function(_5){
|
|
return this.map[_5];
|
|
},setItem:function(_6,_7){
|
|
this.map[_6]=_7;
|
|
},delItem:function(_8){
|
|
delete this.map[_8];
|
|
},forInItems:function(f,o){
|
|
o=o||_1.global;
|
|
var m=this.map,e=_1.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 _1.query("> .dojoDndItem",this.parent);
|
|
},sync:function(){
|
|
var _9={};
|
|
this.getAllNodes().forEach(function(_a){
|
|
if(_a.id){
|
|
var _b=this.getItem(_a.id);
|
|
if(_b){
|
|
_9[_a.id]=_b;
|
|
return;
|
|
}
|
|
}else{
|
|
_a.id=_1.dnd.getUniqueId();
|
|
}
|
|
var _c=_a.getAttribute("dndType"),_d=_a.getAttribute("dndData");
|
|
_9[_a.id]={data:_d||_a.innerHTML,type:_c?_c.split(/\s*,\s*/):["text"]};
|
|
},this);
|
|
this.map=_9;
|
|
return this;
|
|
},insertNodes:function(_e,_f,_10){
|
|
if(!this.parent.firstChild){
|
|
_10=null;
|
|
}else{
|
|
if(_f){
|
|
if(!_10){
|
|
_10=this.parent.firstChild;
|
|
}
|
|
}else{
|
|
if(_10){
|
|
_10=_10.nextSibling;
|
|
}
|
|
}
|
|
}
|
|
if(_10){
|
|
for(var i=0;i<_e.length;++i){
|
|
var t=this._normalizedCreator(_e[i]);
|
|
this.setItem(t.node.id,{data:t.data,type:t.type});
|
|
this.parent.insertBefore(t.node,_10);
|
|
}
|
|
}else{
|
|
for(var i=0;i<_e.length;++i){
|
|
var t=this._normalizedCreator(_e[i]);
|
|
this.setItem(t.node.id,{data:t.data,type:t.type});
|
|
this.parent.appendChild(t.node);
|
|
}
|
|
}
|
|
return this;
|
|
},destroy:function(){
|
|
_1.forEach(this.events,_1.disconnect);
|
|
this.clearItems();
|
|
this.node=this.parent=this.current=null;
|
|
},markupFactory:function(_11,_12,_13){
|
|
_11._skipStartup=true;
|
|
return new _13(_12,_11);
|
|
},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=_1.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||!_1.dnd.isFormElement(e)){
|
|
_1.stopEvent(e);
|
|
}
|
|
},onOverEvent:function(){
|
|
},onOutEvent:function(){
|
|
},_changeState:function(_14,_15){
|
|
var _16="dojoDnd"+_14;
|
|
var _17=_14.toLowerCase()+"State";
|
|
_1.replaceClass(this.node,_16+_15,_16+this[_17]);
|
|
this[_17]=_15;
|
|
},_addItemClass:function(_18,_19){
|
|
_1.addClass(_18,"dojoDndItem"+_19);
|
|
},_removeItemClass:function(_1a,_1b){
|
|
_1.removeClass(_1a,"dojoDndItem"+_1b);
|
|
},_getChildByEvent:function(e){
|
|
var _1c=e.target;
|
|
if(_1c){
|
|
for(var _1d=_1c.parentNode;_1d;_1c=_1d,_1d=_1c.parentNode){
|
|
if(_1d==this.parent&&_1.hasClass(_1c,"dojoDndItem")){
|
|
return _1c;
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
},_normalizedCreator:function(_1e,_1f){
|
|
var t=(this.creator||this.defaultCreator).call(this,_1e,_1f);
|
|
if(!_1.isArray(t.type)){
|
|
t.type=["text"];
|
|
}
|
|
if(!t.node.id){
|
|
t.node.id=_1.dnd.getUniqueId();
|
|
}
|
|
_1.addClass(t.node,"dojoDndItem");
|
|
return t;
|
|
}});
|
|
_1.dnd._createNode=function(tag){
|
|
if(!tag){
|
|
return _1.dnd._createSpan;
|
|
}
|
|
return function(_20){
|
|
return _1.create(tag,{innerHTML:_20});
|
|
};
|
|
};
|
|
_1.dnd._createTrTd=function(_21){
|
|
var tr=_1.create("tr");
|
|
_1.create("td",{innerHTML:_21},tr);
|
|
return tr;
|
|
};
|
|
_1.dnd._createSpan=function(_22){
|
|
return _1.create("span",{innerHTML:_22});
|
|
};
|
|
_1.dnd._defaultCreatorNodes={ul:"li",ol:"li",div:"div",p:"div"};
|
|
_1.dnd._defaultCreator=function(_23){
|
|
var tag=_23.tagName.toLowerCase();
|
|
var c=tag=="tbody"||tag=="thead"?_1.dnd._createTrTd:_1.dnd._createNode(_1.dnd._defaultCreatorNodes[tag]);
|
|
return function(_24,_25){
|
|
var _26=_24&&_1.isObject(_24),_27,_28,n;
|
|
if(_26&&_24.tagName&&_24.nodeType&&_24.getAttribute){
|
|
_27=_24.getAttribute("dndData")||_24.innerHTML;
|
|
_28=_24.getAttribute("dndType");
|
|
_28=_28?_28.split(/\s*,\s*/):["text"];
|
|
n=_24;
|
|
}else{
|
|
_27=(_26&&_24.data)?_24.data:_24;
|
|
_28=(_26&&_24.type)?_24.type:["text"];
|
|
n=(_25=="avatar"?_1.dnd._createSpan:c)(String(_27));
|
|
}
|
|
if(!n.id){
|
|
n.id=_1.dnd.getUniqueId();
|
|
}
|
|
return {node:n,data:_27,type:_28};
|
|
};
|
|
};
|
|
return _1.dnd.Container;
|
|
});
|