tt-rss/lib/dojo/dnd/move.js.uncompressed.js
2013-03-18 10:26:26 +04:00

147 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
};
});