Container.js 4.37 KB
//>>built
define("../_base/array ../_base/declare ../_base/kernel ../_base/lang ../_base/window ../dom ../dom-class ../dom-construct ../Evented ../has ../on ../query ../touch ./common".split(" "),function(q,l,r,g,v,n,f,e,t,w,h,u,p,d){l=l("dojo.dnd.Container",t,{skipForm:!1,allowNested:!1,constructor:function(a,b){this.node=n.byId(a);b||(b={});this.creator=b.creator||null;this.skipForm=b.skipForm;this.parent=b.dropParent&&n.byId(b.dropParent);this.map={};this.current=null;this.containerState="";f.add(this.node,
"dojoDndContainer");b&&b._skipStartup||this.startup();this.events=[h(this.node,p.over,g.hitch(this,"onMouseOver")),h(this.node,p.out,g.hitch(this,"onMouseOut")),h(this.node,"dragstart",g.hitch(this,"onSelectStart")),h(this.node,"selectstart",g.hitch(this,"onSelectStart"))]},creator:function(){},getItem:function(a){return this.map[a]},setItem:function(a,b){this.map[a]=b},delItem:function(a){delete this.map[a]},forInItems:function(a,b){b=b||r.global;var c=this.map,m=d._empty,k;for(k in c)k in m||a.call(b,
c[k],k,this);return b},clearItems:function(){this.map={}},getAllNodes:function(){return u((this.allowNested?"":"\x3e ")+".dojoDndItem",this.parent)},sync:function(){var a={};this.getAllNodes().forEach(function(b){if(b.id){var c=this.getItem(b.id);if(c){a[b.id]=c;return}}else b.id=d.getUniqueId();var c=b.getAttribute("dndType"),m=b.getAttribute("dndData");a[b.id]={data:m||b.innerHTML,type:c?c.split(/\s*,\s*/):["text"]}},this);this.map=a;return this},insertNodes:function(a,b,c){this.parent.firstChild?
b?c||(c=this.parent.firstChild):c&&(c=c.nextSibling):c=null;var d;if(c)for(b=0;b<a.length;++b)d=this._normalizedCreator(a[b]),this.setItem(d.node.id,{data:d.data,type:d.type}),c.parentNode.insertBefore(d.node,c);else for(b=0;b<a.length;++b)d=this._normalizedCreator(a[b]),this.setItem(d.node.id,{data:d.data,type:d.type}),this.parent.appendChild(d.node);return this},destroy:function(){q.forEach(this.events,function(a){a.remove()});this.clearItems();this.node=this.parent=this.current=null},markupFactory:function(a,
b,c){a._skipStartup=!0;return new c(b,a)},startup:function(){if(!this.parent&&(this.parent=this.node,"table"==this.parent.tagName.toLowerCase())){var a=this.parent.getElementsByTagName("tbody");a&&a.length&&(this.parent=a[0])}this.defaultCreator=d._defaultCreator(this.parent);this.sync()},onMouseOver:function(a){for(var b=a.relatedTarget;b&&b!=this.node;)try{b=b.parentNode}catch(c){b=null}b||(this._changeState("Container","Over"),this.onOverEvent());b=this._getChildByEvent(a);this.current!=b&&(this.current&&
this._removeItemClass(this.current,"Over"),b&&this._addItemClass(b,"Over"),this.current=b)},onMouseOut:function(a){for(a=a.relatedTarget;a;){if(a==this.node)return;try{a=a.parentNode}catch(b){a=null}}this.current&&(this._removeItemClass(this.current,"Over"),this.current=null);this._changeState("Container","");this.onOutEvent()},onSelectStart:function(a){this.withHandles||this.skipForm&&d.isFormElement(a)||(a.stopPropagation(),a.preventDefault())},onOverEvent:function(){},onOutEvent:function(){},_changeState:function(a,
b){var c="dojoDnd"+a;a=a.toLowerCase()+"State";f.replace(this.node,c+b,c+this[a]);this[a]=b},_addItemClass:function(a,b){f.add(a,"dojoDndItem"+b)},_removeItemClass:function(a,b){f.remove(a,"dojoDndItem"+b)},_getChildByEvent:function(a){if(a=a.target)for(var b=a.parentNode;b;a=b,b=a.parentNode)if((b==this.parent||this.allowNested)&&f.contains(a,"dojoDndItem"))return a;return null},_normalizedCreator:function(a,b){a=(this.creator||this.defaultCreator).call(this,a,b);g.isArray(a.type)||(a.type=["text"]);
a.node.id||(a.node.id=d.getUniqueId());f.add(a.node,"dojoDndItem");return a}});d._createNode=function(a){return a?function(b){return e.create(a,{innerHTML:b})}:d._createSpan};d._createTrTd=function(a){var b=e.create("tr");e.create("td",{innerHTML:a},b);return b};d._createSpan=function(a){return e.create("span",{innerHTML:a})};d._defaultCreatorNodes={ul:"li",ol:"li",div:"div",p:"div"};d._defaultCreator=function(a){a=a.tagName.toLowerCase();var b="tbody"==a||"thead"==a?d._createTrTd:d._createNode(d._defaultCreatorNodes[a]);
return function(a,f){var c=a&&g.isObject(a),e;c&&a.tagName&&a.nodeType&&a.getAttribute?(e=a.getAttribute("dndData")||a.innerHTML,c=(c=a.getAttribute("dndType"))?c.split(/\s*,\s*/):["text"]):(e=c&&a.data?a.data:a,c=c&&a.type?a.type:["text"],a=("avatar"==f?d._createSpan:b)(String(e)));a.id||(a.id=d.getUniqueId());return{node:a,data:e,type:c}}};return l});