148 lines
4 KiB
JavaScript
148 lines
4 KiB
JavaScript
|
define("dojo/dnd/move", [
|
||
|
"../_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
|
||
|
};
|
||
|
|
||
|
});
|