Blame | Last modification | View Log | RSS feed
if(!dojo._hasResource["dojo.dnd.Moveable"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.dojo._hasResource["dojo.dnd.Moveable"] = true;dojo.provide("dojo.dnd.Moveable");dojo.require("dojo.dnd.Mover");dojo.declare("dojo.dnd.Moveable", null, {// object attributes (for markup)handle: "",delay: 0,skip: false,constructor: function(node, params){// summary: an object, which makes a node moveable// node: Node: a node (or node's id) to be moved// params: Object: an optional object with additional parameters;// following parameters are recognized:// handle: Node: a node (or node's id), which is used as a mouse handle// if omitted, the node itself is used as a handle// delay: Number: delay move by this number of pixels// skip: Boolean: skip move of form elements// mover: Object: a constructor of custom Moverthis.node = dojo.byId(node);if(!params){ params = {}; }this.handle = params.handle ? dojo.byId(params.handle) : null;if(!this.handle){ this.handle = this.node; }this.delay = params.delay > 0 ? params.delay : 0;this.skip = params.skip;this.mover = params.mover ? params.mover : dojo.dnd.Mover;this.events = [dojo.connect(this.handle, "onmousedown", this, "onMouseDown"),// cancel text selection and text draggingdojo.connect(this.handle, "ondragstart", this, "onSelectStart"),dojo.connect(this.handle, "onselectstart", this, "onSelectStart")];},// markup methodsmarkupFactory: function(params, node){return new dojo.dnd.Moveable(node, params);},// methodsdestroy: function(){// summary: stops watching for possible move, deletes all references, so the object can be garbage-collecteddojo.forEach(this.events, dojo.disconnect);this.events = this.node = this.handle = null;},// mouse event processorsonMouseDown: function(e){// summary: event processor for onmousedown, creates a Mover for the node// e: Event: mouse eventif(this.skip && dojo.dnd.isFormElement(e)){ return; }if(this.delay){this.events.push(dojo.connect(this.handle, "onmousemove", this, "onMouseMove"));this.events.push(dojo.connect(this.handle, "onmouseup", this, "onMouseUp"));this._lastX = e.pageX;this._lastY = e.pageY;}else{new this.mover(this.node, e, this);}dojo.stopEvent(e);},onMouseMove: function(e){// summary: event processor for onmousemove, used only for delayed drags// e: Event: mouse eventif(Math.abs(e.pageX - this._lastX) > this.delay || Math.abs(e.pageY - this._lastY) > this.delay){this.onMouseUp(e);new this.mover(this.node, e, this);}dojo.stopEvent(e);},onMouseUp: function(e){// summary: event processor for onmouseup, used only for delayed delayed drags// e: Event: mouse eventdojo.disconnect(this.events.pop());dojo.disconnect(this.events.pop());},onSelectStart: function(e){// summary: event processor for onselectevent and ondragevent// e: Event: mouse eventif(!this.skip || !dojo.dnd.isFormElement(e)){dojo.stopEvent(e);}},// local eventsonMoveStart: function(/* dojo.dnd.Mover */ mover){// summary: called before every move operationdojo.publish("/dnd/move/start", [mover]);dojo.addClass(dojo.body(), "dojoMove");dojo.addClass(this.node, "dojoMoveItem");},onMoveStop: function(/* dojo.dnd.Mover */ mover){// summary: called after every move operationdojo.publish("/dnd/move/stop", [mover]);dojo.removeClass(dojo.body(), "dojoMove");dojo.removeClass(this.node, "dojoMoveItem");},onFirstMove: function(/* dojo.dnd.Mover */ mover){// summary: called during the very first move notification,// can be used to initialize coordinates, can be overwritten.// default implementation does nothing},onMove: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){// summary: called during every move notification,// should actually move the node, can be overwritten.this.onMoving(mover, leftTop);dojo.marginBox(mover.node, leftTop);this.onMoved(mover, leftTop);},onMoving: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){// summary: called before every incremental move,// can be overwritten.// default implementation does nothing},onMoved: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){// summary: called after every incremental move,// can be overwritten.// default implementation does nothing}});}