240 lines
5.2 KiB
JavaScript
240 lines
5.2 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.Selector"]){
|
|
dojo._hasResource["dojo.dnd.Selector"]=true;
|
|
dojo.provide("dojo.dnd.Selector");
|
|
dojo.require("dojo.dnd.common");
|
|
dojo.require("dojo.dnd.Container");
|
|
dojo.declare("dojo.dnd.Selector",dojo.dnd.Container,{constructor:function(_1,_2){
|
|
if(!_2){
|
|
_2={};
|
|
}
|
|
this.singular=_2.singular;
|
|
this.autoSync=_2.autoSync;
|
|
this.selection={};
|
|
this.anchor=null;
|
|
this.simpleSelection=false;
|
|
this.events.push(dojo.connect(this.node,"onmousedown",this,"onMouseDown"),dojo.connect(this.node,"onmouseup",this,"onMouseUp"));
|
|
},singular:false,getSelectedNodes:function(){
|
|
var t=new dojo.NodeList();
|
|
var e=dojo.dnd._empty;
|
|
for(var i in this.selection){
|
|
if(i in e){
|
|
continue;
|
|
}
|
|
t.push(dojo.byId(i));
|
|
}
|
|
return t;
|
|
},selectNone:function(){
|
|
return this._removeSelection()._removeAnchor();
|
|
},selectAll:function(){
|
|
this.forInItems(function(_3,id){
|
|
this._addItemClass(dojo.byId(id),"Selected");
|
|
this.selection[id]=1;
|
|
},this);
|
|
return this._removeAnchor();
|
|
},deleteSelectedNodes:function(){
|
|
var e=dojo.dnd._empty;
|
|
for(var i in this.selection){
|
|
if(i in e){
|
|
continue;
|
|
}
|
|
var n=dojo.byId(i);
|
|
this.delItem(i);
|
|
dojo.destroy(n);
|
|
}
|
|
this.anchor=null;
|
|
this.selection={};
|
|
return this;
|
|
},forInSelectedItems:function(f,o){
|
|
o=o||dojo.global;
|
|
var s=this.selection,e=dojo.dnd._empty;
|
|
for(var i in s){
|
|
if(i in e){
|
|
continue;
|
|
}
|
|
f.call(o,this.getItem(i),i,this);
|
|
}
|
|
},sync:function(){
|
|
dojo.dnd.Selector.superclass.sync.call(this);
|
|
if(this.anchor){
|
|
if(!this.getItem(this.anchor.id)){
|
|
this.anchor=null;
|
|
}
|
|
}
|
|
var t=[],e=dojo.dnd._empty;
|
|
for(var i in this.selection){
|
|
if(i in e){
|
|
continue;
|
|
}
|
|
if(!this.getItem(i)){
|
|
t.push(i);
|
|
}
|
|
}
|
|
dojo.forEach(t,function(i){
|
|
delete this.selection[i];
|
|
},this);
|
|
return this;
|
|
},insertNodes:function(_4,_5,_6,_7){
|
|
var _8=this._normalizedCreator;
|
|
this._normalizedCreator=function(_9,_a){
|
|
var t=_8.call(this,_9,_a);
|
|
if(_4){
|
|
if(!this.anchor){
|
|
this.anchor=t.node;
|
|
this._removeItemClass(t.node,"Selected");
|
|
this._addItemClass(this.anchor,"Anchor");
|
|
}else{
|
|
if(this.anchor!=t.node){
|
|
this._removeItemClass(t.node,"Anchor");
|
|
this._addItemClass(t.node,"Selected");
|
|
}
|
|
}
|
|
this.selection[t.node.id]=1;
|
|
}else{
|
|
this._removeItemClass(t.node,"Selected");
|
|
this._removeItemClass(t.node,"Anchor");
|
|
}
|
|
return t;
|
|
};
|
|
dojo.dnd.Selector.superclass.insertNodes.call(this,_5,_6,_7);
|
|
this._normalizedCreator=_8;
|
|
return this;
|
|
},destroy:function(){
|
|
dojo.dnd.Selector.superclass.destroy.call(this);
|
|
this.selection=this.anchor=null;
|
|
},markupFactory:function(_b,_c){
|
|
_b._skipStartup=true;
|
|
return new dojo.dnd.Selector(_c,_b);
|
|
},onMouseDown:function(e){
|
|
if(this.autoSync){
|
|
this.sync();
|
|
}
|
|
if(!this.current){
|
|
return;
|
|
}
|
|
if(!this.singular&&!dojo.isCopyKey(e)&&!e.shiftKey&&(this.current.id in this.selection)){
|
|
this.simpleSelection=true;
|
|
if(e.button===dojo.mouseButtons.LEFT){
|
|
dojo.stopEvent(e);
|
|
}
|
|
return;
|
|
}
|
|
if(!this.singular&&e.shiftKey){
|
|
if(!dojo.isCopyKey(e)){
|
|
this._removeSelection();
|
|
}
|
|
var c=this.getAllNodes();
|
|
if(c.length){
|
|
if(!this.anchor){
|
|
this.anchor=c[0];
|
|
this._addItemClass(this.anchor,"Anchor");
|
|
}
|
|
this.selection[this.anchor.id]=1;
|
|
if(this.anchor!=this.current){
|
|
var i=0;
|
|
for(;i<c.length;++i){
|
|
var _d=c[i];
|
|
if(_d==this.anchor||_d==this.current){
|
|
break;
|
|
}
|
|
}
|
|
for(++i;i<c.length;++i){
|
|
var _d=c[i];
|
|
if(_d==this.anchor||_d==this.current){
|
|
break;
|
|
}
|
|
this._addItemClass(_d,"Selected");
|
|
this.selection[_d.id]=1;
|
|
}
|
|
this._addItemClass(this.current,"Selected");
|
|
this.selection[this.current.id]=1;
|
|
}
|
|
}
|
|
}else{
|
|
if(this.singular){
|
|
if(this.anchor==this.current){
|
|
if(dojo.isCopyKey(e)){
|
|
this.selectNone();
|
|
}
|
|
}else{
|
|
this.selectNone();
|
|
this.anchor=this.current;
|
|
this._addItemClass(this.anchor,"Anchor");
|
|
this.selection[this.current.id]=1;
|
|
}
|
|
}else{
|
|
if(dojo.isCopyKey(e)){
|
|
if(this.anchor==this.current){
|
|
delete this.selection[this.anchor.id];
|
|
this._removeAnchor();
|
|
}else{
|
|
if(this.current.id in this.selection){
|
|
this._removeItemClass(this.current,"Selected");
|
|
delete this.selection[this.current.id];
|
|
}else{
|
|
if(this.anchor){
|
|
this._removeItemClass(this.anchor,"Anchor");
|
|
this._addItemClass(this.anchor,"Selected");
|
|
}
|
|
this.anchor=this.current;
|
|
this._addItemClass(this.current,"Anchor");
|
|
this.selection[this.current.id]=1;
|
|
}
|
|
}
|
|
}else{
|
|
if(!(this.current.id in this.selection)){
|
|
this.selectNone();
|
|
this.anchor=this.current;
|
|
this._addItemClass(this.current,"Anchor");
|
|
this.selection[this.current.id]=1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
dojo.stopEvent(e);
|
|
},onMouseUp:function(e){
|
|
if(!this.simpleSelection){
|
|
return;
|
|
}
|
|
this.simpleSelection=false;
|
|
this.selectNone();
|
|
if(this.current){
|
|
this.anchor=this.current;
|
|
this._addItemClass(this.anchor,"Anchor");
|
|
this.selection[this.current.id]=1;
|
|
}
|
|
},onMouseMove:function(e){
|
|
this.simpleSelection=false;
|
|
},onOverEvent:function(){
|
|
this.onmousemoveEvent=dojo.connect(this.node,"onmousemove",this,"onMouseMove");
|
|
},onOutEvent:function(){
|
|
dojo.disconnect(this.onmousemoveEvent);
|
|
delete this.onmousemoveEvent;
|
|
},_removeSelection:function(){
|
|
var e=dojo.dnd._empty;
|
|
for(var i in this.selection){
|
|
if(i in e){
|
|
continue;
|
|
}
|
|
var _e=dojo.byId(i);
|
|
if(_e){
|
|
this._removeItemClass(_e,"Selected");
|
|
}
|
|
}
|
|
this.selection={};
|
|
return this;
|
|
},_removeAnchor:function(){
|
|
if(this.anchor){
|
|
this._removeItemClass(this.anchor,"Anchor");
|
|
this.anchor=null;
|
|
}
|
|
return this;
|
|
}});
|
|
}
|