source: Dev/trunk/src/client/dojo/dnd/move.js @ 485

Last change on this file since 485 was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 4.0 KB
Line 
1define([
2        "../_base/declare",
3        "../dom-geometry", "../dom-style",
4        "./common", "./Mover", "./Moveable"
5], function(declare, domGeom, domStyle, dnd, Mover, Moveable){
6
7// module:
8//              dojo/dnd/move
9
10/*=====
11var __constrainedMoveableArgs = declare([Moveable.__MoveableArgs], {
12        // constraints: Function
13        //              Calculates a constraint box.
14        //              It is called in a context of the moveable object.
15        constraints: function(){},
16
17        // within: Boolean
18        //              restrict move within boundaries.
19        within: false
20});
21=====*/
22
23var constrainedMoveable = declare("dojo.dnd.move.constrainedMoveable", Moveable, {
24        // object attributes (for markup)
25        constraints: function(){},
26        within: false,
27
28        constructor: function(node, params){
29                // summary:
30                //              an object that makes a node moveable
31                // node: Node
32                //              a node (or node's id) to be moved
33                // params: __constrainedMoveableArgs?
34                //              an optional object with additional parameters;
35                //              the rest is passed to the base class
36                if(!params){ params = {}; }
37                this.constraints = params.constraints;
38                this.within = params.within;
39        },
40        onFirstMove: function(/*Mover*/ mover){
41                // summary:
42                //              called during the very first move notification;
43                //              can be used to initialize coordinates, can be overwritten.
44                var c = this.constraintBox = this.constraints.call(this, mover);
45                c.r = c.l + c.w;
46                c.b = c.t + c.h;
47                if(this.within){
48                        var mb = domGeom.getMarginSize(mover.node);
49                        c.r -= mb.w;
50                        c.b -= mb.h;
51                }
52        },
53        onMove: function(/*Mover*/ mover, /*Object*/ leftTop){
54                // summary:
55                //              called during every move notification;
56                //              should actually move the node; can be overwritten.
57                var c = this.constraintBox, s = mover.node.style;
58                this.onMoving(mover, leftTop);
59                leftTop.l = leftTop.l < c.l ? c.l : c.r < leftTop.l ? c.r : leftTop.l;
60                leftTop.t = leftTop.t < c.t ? c.t : c.b < leftTop.t ? c.b : leftTop.t;
61                s.left = leftTop.l + "px";
62                s.top  = leftTop.t + "px";
63                this.onMoved(mover, leftTop);
64        }
65});
66
67/*=====
68var __boxConstrainedMoveableArgs = declare([__constrainedMoveableArgs], {
69        // box: Object
70        //              a constraint box
71        box: {}
72});
73=====*/
74
75var boxConstrainedMoveable = declare("dojo.dnd.move.boxConstrainedMoveable", constrainedMoveable, {
76        // box:
77        //              object attributes (for markup)
78        box: {},
79
80        constructor: function(node, params){
81                // summary:
82                //              an object, which makes a node moveable
83                // node: Node
84                //              a node (or node's id) to be moved
85                // params: __boxConstrainedMoveableArgs?
86                //              an optional object with parameters
87                var box = params && params.box;
88                this.constraints = function(){ return box; };
89        }
90});
91
92/*=====
93var __parentConstrainedMoveableArgs = declare( [__constrainedMoveableArgs], {
94        // area: String
95        //              A parent's area to restrict the move.
96        //              Can be "margin", "border", "padding", or "content".
97        area: ""
98});
99=====*/
100
101var parentConstrainedMoveable = declare("dojo.dnd.move.parentConstrainedMoveable", constrainedMoveable, {
102        // area:
103        //              object attributes (for markup)
104        area: "content",
105
106        constructor: function(node, params){
107                // summary:
108                //              an object, which makes a node moveable
109                // node: Node
110                //              a node (or node's id) to be moved
111                // params: __parentConstrainedMoveableArgs?
112                //              an optional object with parameters
113                var area = params && params.area;
114                this.constraints = function(){
115                        var n = this.node.parentNode,
116                                s = domStyle.getComputedStyle(n),
117                                mb = domGeom.getMarginBox(n, s);
118                        if(area == "margin"){
119                                return mb;      // Object
120                        }
121                        var t = domGeom.getMarginExtents(n, s);
122                        mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
123                        if(area == "border"){
124                                return mb;      // Object
125                        }
126                        t = domGeom.getBorderExtents(n, s);
127                        mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
128                        if(area == "padding"){
129                                return mb;      // Object
130                        }
131                        t = domGeom.getPadExtents(n, s);
132                        mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
133                        return mb;      // Object
134                };
135        }
136});
137
138
139return {
140        // summary:
141        //              TODOC
142        constrainedMoveable: constrainedMoveable,
143        boxConstrainedMoveable: boxConstrainedMoveable,
144        parentConstrainedMoveable: parentConstrainedMoveable
145};
146
147});
Note: See TracBrowser for help on using the repository browser.