]>
Commit | Line | Data |
---|---|---|
f0cfe83e AD |
1 | define("dojo/dnd/move", [ |
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 | /*===== | |
11 | var __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 | ||
23 | var 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 | /*===== | |
68 | var __boxConstrainedMoveableArgs = declare([__constrainedMoveableArgs], { | |
69 | // box: Object | |
70 | // a constraint box | |
71 | box: {} | |
72 | }); | |
73 | =====*/ | |
74 | ||
75 | var 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 | /*===== | |
93 | var __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 | ||
101 | var 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 | ||
139 | return { | |
140 | // summary: | |
141 | // TODOC | |
142 | constrainedMoveable: constrainedMoveable, | |
143 | boxConstrainedMoveable: boxConstrainedMoveable, | |
144 | parentConstrainedMoveable: parentConstrainedMoveable | |
145 | }; | |
146 | ||
147 | }); |