123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549 |
- if(!dojo._hasResource["dojo.dnd.Source"]){
- dojo._hasResource["dojo.dnd.Source"] = true;
- dojo.provide("dojo.dnd.Source");
- dojo.require("dojo.dnd.Selector");
- dojo.require("dojo.dnd.Manager");
- dojo.declare("dojo.dnd.Source", dojo.dnd.Selector, {
-
-
-
-
- isSource: true,
- horizontal: false,
- copyOnly: false,
- selfCopy: false,
- selfAccept: true,
- skipForm: false,
- withHandles: false,
- autoSync: false,
- delay: 0,
- accept: ["text"],
- generateText: true,
-
- constructor: function(/*DOMNode|String*/node, /*dojo.dnd.__SourceArgs?*/params){
-
-
-
-
-
-
-
- dojo.mixin(this, dojo.mixin({}, params));
- var type = this.accept;
- if(type.length){
- this.accept = {};
- for(var i = 0; i < type.length; ++i){
- this.accept[type[i]] = 1;
- }
- }
-
- this.isDragging = false;
- this.mouseDown = false;
- this.targetAnchor = null;
- this.targetBox = null;
- this.before = true;
- this._lastX = 0;
- this._lastY = 0;
-
- this.sourceState = "";
- if(this.isSource){
- dojo.addClass(this.node, "dojoDndSource");
- }
- this.targetState = "";
- if(this.accept){
- dojo.addClass(this.node, "dojoDndTarget");
- }
- if(this.horizontal){
- dojo.addClass(this.node, "dojoDndHorizontal");
- }
-
- this.topics = [
- dojo.subscribe("/dnd/source/over", this, "onDndSourceOver"),
- dojo.subscribe("/dnd/start", this, "onDndStart"),
- dojo.subscribe("/dnd/drop", this, "onDndDrop"),
- dojo.subscribe("/dnd/cancel", this, "onDndCancel")
- ];
- },
-
-
- checkAcceptance: function(source, nodes){
-
-
-
-
-
-
- if(this == source){
- return !this.copyOnly || this.selfAccept;
- }
- for(var i = 0; i < nodes.length; ++i){
- var type = source.getItem(nodes[i].id).type;
-
- var flag = false;
- for(var j = 0; j < type.length; ++j){
- if(type[j] in this.accept){
- flag = true;
- break;
- }
- }
- if(!flag){
- return false;
- }
- }
- return true;
- },
- copyState: function(keyPressed, self){
-
-
-
-
-
-
-
-
- if(keyPressed){ return true; }
- if(arguments.length < 2){
- self = this == dojo.dnd.manager().target;
- }
- if(self){
- if(this.copyOnly){
- return this.selfCopy;
- }
- }else{
- return this.copyOnly;
- }
- return false;
- },
- destroy: function(){
-
-
- dojo.dnd.Source.superclass.destroy.call(this);
- dojo.forEach(this.topics, dojo.unsubscribe);
- this.targetAnchor = null;
- },
-
- markupFactory: function(params, node){
- params._skipStartup = true;
- return new dojo.dnd.Source(node, params);
- },
-
- onMouseMove: function(e){
-
-
-
-
- if(this.isDragging && this.targetState == "Disabled"){ return; }
- dojo.dnd.Source.superclass.onMouseMove.call(this, e);
- var m = dojo.dnd.manager();
- if(!this.isDragging){
- if(this.mouseDown && this.isSource &&
- (Math.abs(e.pageX - this._lastX) > this.delay || Math.abs(e.pageY - this._lastY) > this.delay)){
- var nodes = this.getSelectedNodes();
- if(nodes.length){
- m.startDrag(this, nodes, this.copyState(dojo.isCopyKey(e), true));
- }
- }
- }
- if(this.isDragging){
-
- var before = false;
- if(this.current){
- if(!this.targetBox || this.targetAnchor != this.current){
- this.targetBox = dojo.position(this.current, true);
- }
- if(this.horizontal){
- before = (e.pageX - this.targetBox.x) < (this.targetBox.w / 2);
- }else{
- before = (e.pageY - this.targetBox.y) < (this.targetBox.h / 2);
- }
- }
- if(this.current != this.targetAnchor || before != this.before){
- this._markTargetAnchor(before);
- m.canDrop(!this.current || m.source != this || !(this.current.id in this.selection));
- }
- }
- },
- onMouseDown: function(e){
-
-
-
-
- if(!this.mouseDown && this._legalMouseDown(e) && (!this.skipForm || !dojo.dnd.isFormElement(e))){
- this.mouseDown = true;
- this._lastX = e.pageX;
- this._lastY = e.pageY;
- dojo.dnd.Source.superclass.onMouseDown.call(this, e);
- }
- },
- onMouseUp: function(e){
-
-
-
-
- if(this.mouseDown){
- this.mouseDown = false;
- dojo.dnd.Source.superclass.onMouseUp.call(this, e);
- }
- },
-
-
- onDndSourceOver: function(source){
-
-
-
-
- if(this != source){
- this.mouseDown = false;
- if(this.targetAnchor){
- this._unmarkTargetAnchor();
- }
- }else if(this.isDragging){
- var m = dojo.dnd.manager();
- m.canDrop(this.targetState != "Disabled" && (!this.current || m.source != this || !(this.current.id in this.selection)));
- }
- },
- onDndStart: function(source, nodes, copy){
-
-
-
-
-
-
-
-
- if(this.autoSync){ this.sync(); }
- if(this.isSource){
- this._changeState("Source", this == source ? (copy ? "Copied" : "Moved") : "");
- }
- var accepted = this.accept && this.checkAcceptance(source, nodes);
- this._changeState("Target", accepted ? "" : "Disabled");
- if(this == source){
- dojo.dnd.manager().overSource(this);
- }
- this.isDragging = true;
- },
- onDndDrop: function(source, nodes, copy, target){
-
-
-
-
-
-
-
-
-
-
- if(this == target){
-
- this.onDrop(source, nodes, copy);
- }
- this.onDndCancel();
- },
- onDndCancel: function(){
-
-
- if(this.targetAnchor){
- this._unmarkTargetAnchor();
- this.targetAnchor = null;
- }
- this.before = true;
- this.isDragging = false;
- this.mouseDown = false;
- this._changeState("Source", "");
- this._changeState("Target", "");
- },
-
-
- onDrop: function(source, nodes, copy){
-
-
-
-
-
-
-
-
-
- if(this != source){
- this.onDropExternal(source, nodes, copy);
- }else{
- this.onDropInternal(nodes, copy);
- }
- },
- onDropExternal: function(source, nodes, copy){
-
-
-
-
-
-
-
-
-
-
- var oldCreator = this._normalizedCreator;
-
- if(this.creator){
-
- this._normalizedCreator = function(node, hint){
- return oldCreator.call(this, source.getItem(node.id).data, hint);
- };
- }else{
-
- if(copy){
-
- this._normalizedCreator = function(node, hint){
- var t = source.getItem(node.id);
- var n = node.cloneNode(true);
- n.id = dojo.dnd.getUniqueId();
- return {node: n, data: t.data, type: t.type};
- };
- }else{
-
- this._normalizedCreator = function(node, hint){
- var t = source.getItem(node.id);
- source.delItem(node.id);
- return {node: node, data: t.data, type: t.type};
- };
- }
- }
- this.selectNone();
- if(!copy && !this.creator){
- source.selectNone();
- }
- this.insertNodes(true, nodes, this.before, this.current);
- if(!copy && this.creator){
- source.deleteSelectedNodes();
- }
- this._normalizedCreator = oldCreator;
- },
- onDropInternal: function(nodes, copy){
-
-
-
-
-
-
-
-
- var oldCreator = this._normalizedCreator;
-
- if(this.current && this.current.id in this.selection){
-
- return;
- }
- if(copy){
- if(this.creator){
-
- this._normalizedCreator = function(node, hint){
- return oldCreator.call(this, this.getItem(node.id).data, hint);
- };
- }else{
-
- this._normalizedCreator = function(node, hint){
- var t = this.getItem(node.id);
- var n = node.cloneNode(true);
- n.id = dojo.dnd.getUniqueId();
- return {node: n, data: t.data, type: t.type};
- };
- }
- }else{
-
- if(!this.current){
-
- return;
- }
- this._normalizedCreator = function(node, hint){
- var t = this.getItem(node.id);
- return {node: node, data: t.data, type: t.type};
- };
- }
- this._removeSelection();
- this.insertNodes(true, nodes, this.before, this.current);
- this._normalizedCreator = oldCreator;
- },
- onDraggingOver: function(){
-
-
-
- },
- onDraggingOut: function(){
-
-
-
- },
-
-
- onOverEvent: function(){
-
-
- dojo.dnd.Source.superclass.onOverEvent.call(this);
- dojo.dnd.manager().overSource(this);
- if(this.isDragging && this.targetState != "Disabled"){
- this.onDraggingOver();
- }
- },
- onOutEvent: function(){
-
-
- dojo.dnd.Source.superclass.onOutEvent.call(this);
- dojo.dnd.manager().outSource(this);
- if(this.isDragging && this.targetState != "Disabled"){
- this.onDraggingOut();
- }
- },
- _markTargetAnchor: function(before){
-
-
-
-
- if(this.current == this.targetAnchor && this.before == before){ return; }
- if(this.targetAnchor){
- this._removeItemClass(this.targetAnchor, this.before ? "Before" : "After");
- }
- this.targetAnchor = this.current;
- this.targetBox = null;
- this.before = before;
- if(this.targetAnchor){
- this._addItemClass(this.targetAnchor, this.before ? "Before" : "After");
- }
- },
- _unmarkTargetAnchor: function(){
-
-
- if(!this.targetAnchor){ return; }
- this._removeItemClass(this.targetAnchor, this.before ? "Before" : "After");
- this.targetAnchor = null;
- this.targetBox = null;
- this.before = true;
- },
- _markDndStatus: function(copy){
-
-
- this._changeState("Source", copy ? "Copied" : "Moved");
- },
- _legalMouseDown: function(e){
-
-
-
-
-
-
- if(!dojo.mouseButtons.isLeft(e)){ return false; }
-
- if(!this.withHandles){ return true; }
-
-
- for(var node = e.target; node && node !== this.node; node = node.parentNode){
- if(dojo.hasClass(node, "dojoDndHandle")){ return true; }
- if(dojo.hasClass(node, "dojoDndItem") || dojo.hasClass(node, "dojoDndIgnore")){ break; }
- }
- return false;
- }
- });
- dojo.declare("dojo.dnd.Target", dojo.dnd.Source, {
-
-
- constructor: function(node, params){
-
-
- this.isSource = false;
- dojo.removeClass(this.node, "dojoDndSource");
- },
-
- markupFactory: function(params, node){
- params._skipStartup = true;
- return new dojo.dnd.Target(node, params);
- }
- });
- dojo.declare("dojo.dnd.AutoSource", dojo.dnd.Source, {
-
-
-
- constructor: function(node, params){
-
-
- this.autoSync = true;
- },
-
- markupFactory: function(params, node){
- params._skipStartup = true;
- return new dojo.dnd.AutoSource(node, params);
- }
- });
- }
|