You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
4.0 KiB
147 lines
4.0 KiB
define([ |
|
"../_base/declare", |
|
"../dom-geometry", "../dom-style", |
|
"./common", "./Mover", "./Moveable" |
|
], function(declare, domGeom, domStyle, dnd, Mover, Moveable){ |
|
|
|
// module: |
|
// dojo/dnd/move |
|
|
|
/*===== |
|
var __constrainedMoveableArgs = declare([Moveable.__MoveableArgs], { |
|
// constraints: Function |
|
// Calculates a constraint box. |
|
// It is called in a context of the moveable object. |
|
constraints: function(){}, |
|
|
|
// within: Boolean |
|
// restrict move within boundaries. |
|
within: false |
|
}); |
|
=====*/ |
|
|
|
var constrainedMoveable = declare("dojo.dnd.move.constrainedMoveable", Moveable, { |
|
// object attributes (for markup) |
|
constraints: function(){}, |
|
within: false, |
|
|
|
constructor: function(node, params){ |
|
// summary: |
|
// an object that makes a node moveable |
|
// node: Node |
|
// a node (or node's id) to be moved |
|
// params: __constrainedMoveableArgs? |
|
// an optional object with additional parameters; |
|
// the rest is passed to the base class |
|
if(!params){ params = {}; } |
|
this.constraints = params.constraints; |
|
this.within = params.within; |
|
}, |
|
onFirstMove: function(/*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); |
|
c.r = c.l + c.w; |
|
c.b = c.t + c.h; |
|
if(this.within){ |
|
var mb = domGeom.getMarginSize(mover.node); |
|
c.r -= mb.w; |
|
c.b -= mb.h; |
|
} |
|
}, |
|
onMove: function(/*Mover*/ mover, /*Object*/ leftTop){ |
|
// summary: |
|
// called during every move notification; |
|
// should actually move the node; can be overwritten. |
|
var c = this.constraintBox, s = mover.node.style; |
|
this.onMoving(mover, leftTop); |
|
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; |
|
s.left = leftTop.l + "px"; |
|
s.top = leftTop.t + "px"; |
|
this.onMoved(mover, leftTop); |
|
} |
|
}); |
|
|
|
/*===== |
|
var __boxConstrainedMoveableArgs = declare([__constrainedMoveableArgs], { |
|
// box: Object |
|
// a constraint box |
|
box: {} |
|
}); |
|
=====*/ |
|
|
|
var boxConstrainedMoveable = declare("dojo.dnd.move.boxConstrainedMoveable", constrainedMoveable, { |
|
// box: |
|
// object attributes (for markup) |
|
box: {}, |
|
|
|
constructor: function(node, params){ |
|
// summary: |
|
// an object, which makes a node moveable |
|
// node: Node |
|
// a node (or node's id) to be moved |
|
// params: __boxConstrainedMoveableArgs? |
|
// an optional object with parameters |
|
var box = params && params.box; |
|
this.constraints = function(){ return box; }; |
|
} |
|
}); |
|
|
|
/*===== |
|
var __parentConstrainedMoveableArgs = declare( [__constrainedMoveableArgs], { |
|
// area: String |
|
// A parent's area to restrict the move. |
|
// Can be "margin", "border", "padding", or "content". |
|
area: "" |
|
}); |
|
=====*/ |
|
|
|
var parentConstrainedMoveable = declare("dojo.dnd.move.parentConstrainedMoveable", constrainedMoveable, { |
|
// area: |
|
// object attributes (for markup) |
|
area: "content", |
|
|
|
constructor: function(node, params){ |
|
// summary: |
|
// an object, which makes a node moveable |
|
// node: Node |
|
// a node (or node's id) to be moved |
|
// params: __parentConstrainedMoveableArgs? |
|
// an optional object with parameters |
|
var area = params && params.area; |
|
this.constraints = function(){ |
|
var n = this.node.parentNode, |
|
s = domStyle.getComputedStyle(n), |
|
mb = domGeom.getMarginBox(n, s); |
|
if(area == "margin"){ |
|
return mb; // Object |
|
} |
|
var t = domGeom.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 = domGeom.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 = domGeom.getPadExtents(n, s); |
|
mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h; |
|
return mb; // Object |
|
}; |
|
} |
|
}); |
|
|
|
|
|
return { |
|
// summary: |
|
// TODOC |
|
constrainedMoveable: constrainedMoveable, |
|
boxConstrainedMoveable: boxConstrainedMoveable, |
|
parentConstrainedMoveable: parentConstrainedMoveable |
|
}; |
|
|
|
});
|
|
|