| /* |
| Copyright (c) 2004-2005, The Dojo Foundation |
| All Rights Reserved. |
| |
| Licensed under the Academic Free License version 2.1 or above OR the |
| modified BSD license. For more information on Dojo licensing, see: |
| |
| http://dojotoolkit.org/community/licensing.shtml |
| */ |
| |
| dojo.require("dojo.lang"); |
| dojo.provide("dojo.dnd.DragSource"); |
| dojo.provide("dojo.dnd.DropTarget"); |
| dojo.provide("dojo.dnd.DragObject"); |
| dojo.provide("dojo.dnd.DragManager"); |
| dojo.provide("dojo.dnd.DragAndDrop"); |
| |
| dojo.dnd.DragSource = function(){ |
| dojo.dnd.dragManager.registerDragSource(this); |
| } |
| |
| dojo.lang.extend(dojo.dnd.DragSource, { |
| type: "", |
| |
| onDragEnd: function(){ |
| }, |
| |
| onDragStart: function(){ |
| }, |
| |
| unregister: function(){ |
| dojo.dnd.dragManager.unregisterDragSource(this); |
| }, |
| |
| reregister: function(){ |
| dojo.dnd.dragManager.registerDragSource(this); |
| } |
| }); |
| |
| dojo.dnd.DragObject = function(){ |
| dojo.dnd.dragManager.registerDragObject(this); |
| } |
| |
| dojo.lang.extend(dojo.dnd.DragObject, { |
| type: "", |
| |
| onDragStart: function(){ |
| // gets called directly after being created by the DragSource |
| // default action is to clone self as icon |
| }, |
| |
| onDragMove: function(){ |
| // this changes the UI for the drag icon |
| // "it moves itself" |
| }, |
| |
| onDragOver: function(){ |
| }, |
| |
| onDragOut: function(){ |
| }, |
| |
| onDragEnd: function(){ |
| }, |
| |
| // normal aliases |
| onDragLeave: this.onDragOut, |
| onDragEnter: this.onDragOver, |
| |
| // non-camel aliases |
| ondragout: this.onDragOut, |
| ondragover: this.onDragOver |
| }); |
| |
| dojo.dnd.DropTarget = function(){ |
| if (this.constructor == dojo.dnd.DropTarget) { return; } // need to be subclassed |
| this.acceptedTypes = []; |
| dojo.dnd.dragManager.registerDropTarget(this); |
| } |
| |
| dojo.lang.extend(dojo.dnd.DropTarget, { |
| acceptedTypes: [], |
| |
| acceptsType: function(type){ |
| if(!dojo.lang.inArray(this.acceptedTypes, "*")){ // wildcard |
| if(!dojo.lang.inArray(this.acceptedTypes, type)) { return false; } |
| } |
| return true; |
| }, |
| |
| accepts: function(dragObjects){ |
| if(!dojo.lang.inArray(this.acceptedTypes, "*")){ // wildcard |
| for (var i = 0; i < dragObjects.length; i++) { |
| if (!dojo.lang.inArray(this.acceptedTypes, |
| dragObjects[i].type)) { return false; } |
| } |
| } |
| return true; |
| }, |
| |
| onDragOver: function(){ |
| }, |
| |
| onDragOut: function(){ |
| }, |
| |
| onDragMove: function(){ |
| }, |
| |
| onDrop: function(){ |
| } |
| }); |
| |
| // NOTE: this interface is defined here for the convenience of the DragManager |
| // implementor. It is expected that in most cases it will be satisfied by |
| // extending a native event (DOM event in HTML and SVG). |
| dojo.dnd.DragEvent = function(){ |
| this.dragSource = null; |
| this.dragObject = null; |
| this.target = null; |
| this.eventStatus = "success"; |
| // |
| // can be one of: |
| // [ "dropSuccess", "dropFailure", "dragMove", |
| // "dragStart", "dragEnter", "dragLeave"] |
| // |
| } |
| |
| dojo.dnd.DragManager = function(){ |
| /* |
| * The DragManager handles listening for low-level events and dispatching |
| * them to higher-level primitives like drag sources and drop targets. In |
| * order to do this, it must keep a list of the items. |
| */ |
| } |
| |
| dojo.lang.extend(dojo.dnd.DragManager, { |
| selectedSources: [], |
| dragObjects: [], |
| dragSources: [], |
| registerDragSource: function(){}, |
| dropTargets: [], |
| registerDropTarget: function(){}, |
| lastDragTarget: null, |
| currentDragTarget: null, |
| onKeyDown: function(){}, |
| onMouseOut: function(){}, |
| onMouseMove: function(){}, |
| onMouseUp: function(){} |
| }); |
| |
| // NOTE: despite the existance of the DragManager class, there will be a |
| // singleton drag manager provided by the renderer-specific D&D support code. |
| // It is therefore sane for us to assign instance variables to the DragManager |
| // prototype |
| |
| // The renderer-specific file will define the following object: |
| // dojo.dnd.dragManager = null; |