Blame | Last modification | View Log | RSS feed
if(!dojo._hasResource["dojo.dnd.move"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.dojo._hasResource["dojo.dnd.move"] = true;dojo.provide("dojo.dnd.move");dojo.require("dojo.dnd.Mover");dojo.require("dojo.dnd.Moveable");dojo.declare("dojo.dnd.move.constrainedMoveable", dojo.dnd.Moveable, {// object attributes (for markup)constraints: function(){},within: false,// markup methodsmarkupFactory: function(params, node){return new dojo.dnd.move.constrainedMoveable(node, params);},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:// constraints: Function: a function, which calculates a constraint box,// it is called in a context of the moveable object.// within: Boolean: restrict move within boundaries.// the rest is passed to the base classif(!params){ params = {}; }this.constraints = params.constraints;this.within = params.within;},onFirstMove: function(/* dojo.dnd.Mover */ mover){// summary: called during the very first move notification,// can be used to initialize coordinates, can be overwritten.var c = this.constraintBox = this.constraints.call(this, mover), m = mover.marginBox;c.r = c.l + c.w - (this.within ? m.w : 0);c.b = c.t + c.h - (this.within ? m.h : 0);},onMove: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){// summary: called during every move notification,// should actually move the node, can be overwritten.var c = this.constraintBox;leftTop.l = leftTop.l < c.l ? c.l : c.r < leftTop.l ? c.r : leftTop.l;leftTop.t = leftTop.t < c.t ? c.t : c.b < leftTop.t ? c.b : leftTop.t;dojo.marginBox(mover.node, leftTop);}});dojo.declare("dojo.dnd.move.boxConstrainedMoveable", dojo.dnd.move.constrainedMoveable, {// object attributes (for markup)box: {},// markup methodsmarkupFactory: function(params, node){return new dojo.dnd.move.boxConstrainedMoveable(node, params);},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:// box: Object: a constraint box// the rest is passed to the base classvar box = params && params.box;this.constraints = function(){ return box; };}});dojo.declare("dojo.dnd.move.parentConstrainedMoveable", dojo.dnd.move.constrainedMoveable, {// object attributes (for markup)area: "content",// markup methodsmarkupFactory: function(params, node){return new dojo.dnd.move.parentConstrainedMoveable(node, params);},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:// area: String: a parent's area to restrict the move,// can be "margin", "border", "padding", or "content".// the rest is passed to the base classvar area = params && params.area;this.constraints = function(){var n = this.node.parentNode,s = dojo.getComputedStyle(n),mb = dojo._getMarginBox(n, s);if(area == "margin"){return mb; // Object}var t = dojo._getMarginExtents(n, s);mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;if(area == "border"){return mb; // Object}t = dojo._getBorderExtents(n, s);mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;if(area == "padding"){return mb; // Object}t = dojo._getPadExtents(n, s);mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;return mb; // Object};}});// WARNING: below are obsolete objects, instead of custom movers use custom moveables (above)dojo.dnd.move.constrainedMover = function(fun, within){// summary: returns a constrained version of dojo.dnd.Mover// description: this function produces n object, which will put a constraint on// the margin box of dragged object in absolute coordinates// fun: Function: called on drag, and returns a constraint box// within: Boolean: if true, constraints the whole dragged object withtin the rectangle,// otherwise the constraint is applied to the left-top cornervar mover = function(node, e, notifier){dojo.dnd.Mover.call(this, node, e, notifier);};dojo.extend(mover, dojo.dnd.Mover.prototype);dojo.extend(mover, {onMouseMove: function(e){// summary: event processor for onmousemove// e: Event: mouse eventdojo.dnd.autoScroll(e);var m = this.marginBox, c = this.constraintBox,l = m.l + e.pageX, t = m.t + e.pageY;l = l < c.l ? c.l : c.r < l ? c.r : l;t = t < c.t ? c.t : c.b < t ? c.b : t;this.host.onMove(this, {l: l, t: t});},onFirstMove: function(){// summary: called once to initialize things; it is meant to be called only oncedojo.dnd.Mover.prototype.onFirstMove.call(this);var c = this.constraintBox = fun.call(this), m = this.marginBox;c.r = c.l + c.w - (within ? m.w : 0);c.b = c.t + c.h - (within ? m.h : 0);}});return mover; // Object};dojo.dnd.move.boxConstrainedMover = function(box, within){// summary: a specialization of dojo.dnd.constrainedMover, which constrains to the specified box// box: Object: a constraint box (l, t, w, h)// within: Boolean: if true, constraints the whole dragged object withtin the rectangle,// otherwise the constraint is applied to the left-top cornerreturn dojo.dnd.move.constrainedMover(function(){ return box; }, within); // Object};dojo.dnd.move.parentConstrainedMover = function(area, within){// summary: a specialization of dojo.dnd.constrainedMover, which constrains to the parent node// area: String: "margin" to constrain within the parent's margin box, "border" for the border box,// "padding" for the padding box, and "content" for the content box; "content" is the default value.// within: Boolean: if true, constraints the whole dragged object withtin the rectangle,// otherwise the constraint is applied to the left-top cornervar fun = function(){var n = this.node.parentNode,s = dojo.getComputedStyle(n),mb = dojo._getMarginBox(n, s);if(area == "margin"){return mb; // Object}var t = dojo._getMarginExtents(n, s);mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;if(area == "border"){return mb; // Object}t = dojo._getBorderExtents(n, s);mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;if(area == "padding"){return mb; // Object}t = dojo._getPadExtents(n, s);mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;return mb; // Object};return dojo.dnd.move.constrainedMover(fun, within); // Object};// patching functions one level up for compatibilitydojo.dnd.constrainedMover = dojo.dnd.move.constrainedMover;dojo.dnd.boxConstrainedMover = dojo.dnd.move.boxConstrainedMover;dojo.dnd.parentConstrainedMover = dojo.dnd.move.parentConstrainedMover;}