annotate jquery-ui/development-bundle/ui/jquery.ui.draggable.js @ 51:5d636ba6b9cb default tip

Merge with b5d89c03f9585013d464f0240f6d82751b77186f
author dwinter
date Thu, 05 Dec 2013 13:24:57 +0100
parents b2e4605f20b2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
1 /*
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
2 * jQuery UI Draggable 1.8.11
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
3 *
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
4 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
5 * Dual licensed under the MIT or GPL Version 2 licenses.
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
6 * http://jquery.org/license
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
7 *
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
8 * http://docs.jquery.com/UI/Draggables
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
9 *
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
10 * Depends:
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
11 * jquery.ui.core.js
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
12 * jquery.ui.mouse.js
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
13 * jquery.ui.widget.js
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
14 */
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
15 (function( $, undefined ) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
16
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
17 $.widget("ui.draggable", $.ui.mouse, {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
18 widgetEventPrefix: "drag",
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
19 options: {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
20 addClasses: true,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
21 appendTo: "parent",
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
22 axis: false,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
23 connectToSortable: false,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
24 containment: false,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
25 cursor: "auto",
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
26 cursorAt: false,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
27 grid: false,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
28 handle: false,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
29 helper: "original",
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
30 iframeFix: false,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
31 opacity: false,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
32 refreshPositions: false,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
33 revert: false,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
34 revertDuration: 500,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
35 scope: "default",
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
36 scroll: true,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
37 scrollSensitivity: 20,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
38 scrollSpeed: 20,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
39 snap: false,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
40 snapMode: "both",
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
41 snapTolerance: 20,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
42 stack: false,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
43 zIndex: false
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
44 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
45 _create: function() {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
46
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
47 if (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css("position")))
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
48 this.element[0].style.position = 'relative';
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
49
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
50 (this.options.addClasses && this.element.addClass("ui-draggable"));
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
51 (this.options.disabled && this.element.addClass("ui-draggable-disabled"));
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
52
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
53 this._mouseInit();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
54
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
55 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
56
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
57 destroy: function() {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
58 if(!this.element.data('draggable')) return;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
59 this.element
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
60 .removeData("draggable")
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
61 .unbind(".draggable")
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
62 .removeClass("ui-draggable"
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
63 + " ui-draggable-dragging"
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
64 + " ui-draggable-disabled");
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
65 this._mouseDestroy();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
66
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
67 return this;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
68 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
69
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
70 _mouseCapture: function(event) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
71
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
72 var o = this.options;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
73
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
74 // among others, prevent a drag on a resizable-handle
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
75 if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle'))
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
76 return false;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
77
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
78 //Quit if we're not on a valid handle
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
79 this.handle = this._getHandle(event);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
80 if (!this.handle)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
81 return false;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
82
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
83 return true;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
84
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
85 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
86
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
87 _mouseStart: function(event) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
88
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
89 var o = this.options;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
90
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
91 //Create and append the visible helper
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
92 this.helper = this._createHelper(event);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
93
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
94 //Cache the helper size
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
95 this._cacheHelperProportions();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
96
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
97 //If ddmanager is used for droppables, set the global draggable
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
98 if($.ui.ddmanager)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
99 $.ui.ddmanager.current = this;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
100
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
101 /*
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
102 * - Position generation -
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
103 * This block generates everything position related - it's the core of draggables.
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
104 */
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
105
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
106 //Cache the margins of the original element
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
107 this._cacheMargins();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
108
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
109 //Store the helper's css position
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
110 this.cssPosition = this.helper.css("position");
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
111 this.scrollParent = this.helper.scrollParent();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
112
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
113 //The element's absolute position on the page minus margins
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
114 this.offset = this.positionAbs = this.element.offset();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
115 this.offset = {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
116 top: this.offset.top - this.margins.top,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
117 left: this.offset.left - this.margins.left
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
118 };
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
119
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
120 $.extend(this.offset, {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
121 click: { //Where the click happened, relative to the element
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
122 left: event.pageX - this.offset.left,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
123 top: event.pageY - this.offset.top
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
124 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
125 parent: this._getParentOffset(),
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
126 relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
127 });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
128
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
129 //Generate the original position
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
130 this.originalPosition = this.position = this._generatePosition(event);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
131 this.originalPageX = event.pageX;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
132 this.originalPageY = event.pageY;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
133
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
134 //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
135 (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
136
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
137 //Set a containment if given in the options
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
138 if(o.containment)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
139 this._setContainment();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
140
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
141 //Trigger event + callbacks
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
142 if(this._trigger("start", event) === false) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
143 this._clear();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
144 return false;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
145 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
146
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
147 //Recache the helper size
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
148 this._cacheHelperProportions();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
149
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
150 //Prepare the droppable offsets
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
151 if ($.ui.ddmanager && !o.dropBehaviour)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
152 $.ui.ddmanager.prepareOffsets(this, event);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
153
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
154 this.helper.addClass("ui-draggable-dragging");
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
155 this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
156 return true;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
157 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
158
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
159 _mouseDrag: function(event, noPropagation) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
160
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
161 //Compute the helpers position
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
162 this.position = this._generatePosition(event);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
163 this.positionAbs = this._convertPositionTo("absolute");
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
164
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
165 //Call plugins and callbacks and use the resulting position if something is returned
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
166 if (!noPropagation) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
167 var ui = this._uiHash();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
168 if(this._trigger('drag', event, ui) === false) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
169 this._mouseUp({});
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
170 return false;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
171 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
172 this.position = ui.position;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
173 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
174
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
175 if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
176 if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
177 if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
178
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
179 return false;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
180 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
181
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
182 _mouseStop: function(event) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
183
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
184 //If we are using droppables, inform the manager about the drop
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
185 var dropped = false;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
186 if ($.ui.ddmanager && !this.options.dropBehaviour)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
187 dropped = $.ui.ddmanager.drop(this, event);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
188
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
189 //if a drop comes from outside (a sortable)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
190 if(this.dropped) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
191 dropped = this.dropped;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
192 this.dropped = false;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
193 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
194
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
195 //if the original element is removed, don't bother to continue if helper is set to "original"
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
196 if((!this.element[0] || !this.element[0].parentNode) && this.options.helper == "original")
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
197 return false;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
198
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
199 if((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
200 var self = this;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
201 $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
202 if(self._trigger("stop", event) !== false) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
203 self._clear();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
204 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
205 });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
206 } else {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
207 if(this._trigger("stop", event) !== false) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
208 this._clear();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
209 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
210 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
211
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
212 return false;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
213 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
214
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
215 cancel: function() {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
216
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
217 if(this.helper.is(".ui-draggable-dragging")) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
218 this._mouseUp({});
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
219 } else {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
220 this._clear();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
221 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
222
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
223 return this;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
224
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
225 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
226
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
227 _getHandle: function(event) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
228
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
229 var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
230 $(this.options.handle, this.element)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
231 .find("*")
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
232 .andSelf()
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
233 .each(function() {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
234 if(this == event.target) handle = true;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
235 });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
236
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
237 return handle;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
238
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
239 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
240
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
241 _createHelper: function(event) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
242
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
243 var o = this.options;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
244 var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone() : this.element);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
245
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
246 if(!helper.parents('body').length)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
247 helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo));
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
248
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
249 if(helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position")))
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
250 helper.css("position", "absolute");
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
251
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
252 return helper;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
253
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
254 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
255
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
256 _adjustOffsetFromHelper: function(obj) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
257 if (typeof obj == 'string') {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
258 obj = obj.split(' ');
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
259 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
260 if ($.isArray(obj)) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
261 obj = {left: +obj[0], top: +obj[1] || 0};
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
262 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
263 if ('left' in obj) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
264 this.offset.click.left = obj.left + this.margins.left;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
265 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
266 if ('right' in obj) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
267 this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
268 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
269 if ('top' in obj) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
270 this.offset.click.top = obj.top + this.margins.top;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
271 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
272 if ('bottom' in obj) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
273 this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
274 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
275 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
276
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
277 _getParentOffset: function() {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
278
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
279 //Get the offsetParent and cache its position
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
280 this.offsetParent = this.helper.offsetParent();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
281 var po = this.offsetParent.offset();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
282
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
283 // This is a special case where we need to modify a offset calculated on start, since the following happened:
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
284 // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
285 // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
286 // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
287 if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
288 po.left += this.scrollParent.scrollLeft();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
289 po.top += this.scrollParent.scrollTop();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
290 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
291
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
292 if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
293 || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
294 po = { top: 0, left: 0 };
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
295
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
296 return {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
297 top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
298 left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
299 };
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
300
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
301 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
302
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
303 _getRelativeOffset: function() {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
304
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
305 if(this.cssPosition == "relative") {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
306 var p = this.element.position();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
307 return {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
308 top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
309 left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
310 };
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
311 } else {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
312 return { top: 0, left: 0 };
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
313 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
314
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
315 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
316
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
317 _cacheMargins: function() {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
318 this.margins = {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
319 left: (parseInt(this.element.css("marginLeft"),10) || 0),
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
320 top: (parseInt(this.element.css("marginTop"),10) || 0),
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
321 right: (parseInt(this.element.css("marginRight"),10) || 0),
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
322 bottom: (parseInt(this.element.css("marginBottom"),10) || 0)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
323 };
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
324 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
325
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
326 _cacheHelperProportions: function() {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
327 this.helperProportions = {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
328 width: this.helper.outerWidth(),
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
329 height: this.helper.outerHeight()
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
330 };
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
331 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
332
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
333 _setContainment: function() {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
334
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
335 var o = this.options;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
336 if(o.containment == 'parent') o.containment = this.helper[0].parentNode;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
337 if(o.containment == 'document' || o.containment == 'window') this.containment = [
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
338 (o.containment == 'document' ? 0 : $(window).scrollLeft()) - this.offset.relative.left - this.offset.parent.left,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
339 (o.containment == 'document' ? 0 : $(window).scrollTop()) - this.offset.relative.top - this.offset.parent.top,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
340 (o.containment == 'document' ? 0 : $(window).scrollLeft()) + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
341 (o.containment == 'document' ? 0 : $(window).scrollTop()) + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
342 ];
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
343
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
344 if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
345 var ce = $(o.containment)[0]; if(!ce) return;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
346 var co = $(o.containment).offset();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
347 var over = ($(ce).css("overflow") != 'hidden');
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
348
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
349 this.containment = [
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
350 co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0),
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
351 co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0),
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
352 co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
353 co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top - this.margins.bottom
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
354 ];
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
355 } else if(o.containment.constructor == Array) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
356 this.containment = o.containment;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
357 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
358
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
359 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
360
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
361 _convertPositionTo: function(d, pos) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
362
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
363 if(!pos) pos = this.position;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
364 var mod = d == "absolute" ? 1 : -1;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
365 var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
366
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
367 return {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
368 top: (
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
369 pos.top // The absolute mouse position
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
370 + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
371 + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
372 - ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
373 ),
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
374 left: (
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
375 pos.left // The absolute mouse position
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
376 + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
377 + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
378 - ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
379 )
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
380 };
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
381
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
382 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
383
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
384 _generatePosition: function(event) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
385
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
386 var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
387 var pageX = event.pageX;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
388 var pageY = event.pageY;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
389
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
390 /*
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
391 * - Position constraining -
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
392 * Constrain the position to a mix of grid, containment.
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
393 */
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
394
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
395 if(this.originalPosition) { //If we are not dragging yet, we won't check for options
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
396
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
397 if(this.containment) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
398 if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
399 if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
400 if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
401 if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
402 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
403
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
404 if(o.grid) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
405 var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
406 pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
407
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
408 var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
409 pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
410 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
411
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
412 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
413
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
414 return {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
415 top: (
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
416 pageY // The absolute mouse position
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
417 - this.offset.click.top // Click offset (relative to the element)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
418 - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
419 - this.offset.parent.top // The offsetParent's offset without borders (offset + border)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
420 + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
421 ),
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
422 left: (
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
423 pageX // The absolute mouse position
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
424 - this.offset.click.left // Click offset (relative to the element)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
425 - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
426 - this.offset.parent.left // The offsetParent's offset without borders (offset + border)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
427 + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
428 )
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
429 };
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
430
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
431 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
432
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
433 _clear: function() {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
434 this.helper.removeClass("ui-draggable-dragging");
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
435 if(this.helper[0] != this.element[0] && !this.cancelHelperRemoval) this.helper.remove();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
436 //if($.ui.ddmanager) $.ui.ddmanager.current = null;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
437 this.helper = null;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
438 this.cancelHelperRemoval = false;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
439 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
440
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
441 // From now on bulk stuff - mainly helpers
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
442
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
443 _trigger: function(type, event, ui) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
444 ui = ui || this._uiHash();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
445 $.ui.plugin.call(this, type, [event, ui]);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
446 if(type == "drag") this.positionAbs = this._convertPositionTo("absolute"); //The absolute position has to be recalculated after plugins
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
447 return $.Widget.prototype._trigger.call(this, type, event, ui);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
448 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
449
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
450 plugins: {},
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
451
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
452 _uiHash: function(event) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
453 return {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
454 helper: this.helper,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
455 position: this.position,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
456 originalPosition: this.originalPosition,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
457 offset: this.positionAbs
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
458 };
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
459 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
460
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
461 });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
462
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
463 $.extend($.ui.draggable, {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
464 version: "1.8.11"
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
465 });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
466
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
467 $.ui.plugin.add("draggable", "connectToSortable", {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
468 start: function(event, ui) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
469
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
470 var inst = $(this).data("draggable"), o = inst.options,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
471 uiSortable = $.extend({}, ui, { item: inst.element });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
472 inst.sortables = [];
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
473 $(o.connectToSortable).each(function() {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
474 var sortable = $.data(this, 'sortable');
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
475 if (sortable && !sortable.options.disabled) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
476 inst.sortables.push({
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
477 instance: sortable,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
478 shouldRevert: sortable.options.revert
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
479 });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
480 sortable.refreshPositions(); // Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
481 sortable._trigger("activate", event, uiSortable);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
482 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
483 });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
484
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
485 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
486 stop: function(event, ui) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
487
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
488 //If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
489 var inst = $(this).data("draggable"),
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
490 uiSortable = $.extend({}, ui, { item: inst.element });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
491
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
492 $.each(inst.sortables, function() {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
493 if(this.instance.isOver) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
494
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
495 this.instance.isOver = 0;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
496
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
497 inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
498 this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
499
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
500 //The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: 'valid/invalid'
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
501 if(this.shouldRevert) this.instance.options.revert = true;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
502
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
503 //Trigger the stop of the sortable
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
504 this.instance._mouseStop(event);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
505
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
506 this.instance.options.helper = this.instance.options._helper;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
507
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
508 //If the helper has been the original item, restore properties in the sortable
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
509 if(inst.options.helper == 'original')
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
510 this.instance.currentItem.css({ top: 'auto', left: 'auto' });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
511
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
512 } else {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
513 this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
514 this.instance._trigger("deactivate", event, uiSortable);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
515 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
516
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
517 });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
518
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
519 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
520 drag: function(event, ui) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
521
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
522 var inst = $(this).data("draggable"), self = this;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
523
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
524 var checkPos = function(o) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
525 var dyClick = this.offset.click.top, dxClick = this.offset.click.left;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
526 var helperTop = this.positionAbs.top, helperLeft = this.positionAbs.left;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
527 var itemHeight = o.height, itemWidth = o.width;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
528 var itemTop = o.top, itemLeft = o.left;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
529
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
530 return $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
531 };
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
532
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
533 $.each(inst.sortables, function(i) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
534
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
535 //Copy over some variables to allow calling the sortable's native _intersectsWith
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
536 this.instance.positionAbs = inst.positionAbs;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
537 this.instance.helperProportions = inst.helperProportions;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
538 this.instance.offset.click = inst.offset.click;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
539
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
540 if(this.instance._intersectsWith(this.instance.containerCache)) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
541
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
542 //If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
543 if(!this.instance.isOver) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
544
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
545 this.instance.isOver = 1;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
546 //Now we fake the start of dragging for the sortable instance,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
547 //by cloning the list group item, appending it to the sortable and using it as inst.currentItem
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
548 //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
549 this.instance.currentItem = $(self).clone().appendTo(this.instance.element).data("sortable-item", true);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
550 this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
551 this.instance.options.helper = function() { return ui.helper[0]; };
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
552
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
553 event.target = this.instance.currentItem[0];
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
554 this.instance._mouseCapture(event, true);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
555 this.instance._mouseStart(event, true, true);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
556
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
557 //Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
558 this.instance.offset.click.top = inst.offset.click.top;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
559 this.instance.offset.click.left = inst.offset.click.left;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
560 this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
561 this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
562
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
563 inst._trigger("toSortable", event);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
564 inst.dropped = this.instance.element; //draggable revert needs that
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
565 //hack so receive/update callbacks work (mostly)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
566 inst.currentItem = inst.element;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
567 this.instance.fromOutside = inst;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
568
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
569 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
570
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
571 //Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
572 if(this.instance.currentItem) this.instance._mouseDrag(event);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
573
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
574 } else {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
575
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
576 //If it doesn't intersect with the sortable, and it intersected before,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
577 //we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
578 if(this.instance.isOver) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
579
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
580 this.instance.isOver = 0;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
581 this.instance.cancelHelperRemoval = true;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
582
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
583 //Prevent reverting on this forced stop
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
584 this.instance.options.revert = false;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
585
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
586 // The out event needs to be triggered independently
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
587 this.instance._trigger('out', event, this.instance._uiHash(this.instance));
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
588
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
589 this.instance._mouseStop(event, true);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
590 this.instance.options.helper = this.instance.options._helper;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
591
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
592 //Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
593 this.instance.currentItem.remove();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
594 if(this.instance.placeholder) this.instance.placeholder.remove();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
595
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
596 inst._trigger("fromSortable", event);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
597 inst.dropped = false; //draggable revert needs that
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
598 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
599
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
600 };
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
601
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
602 });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
603
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
604 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
605 });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
606
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
607 $.ui.plugin.add("draggable", "cursor", {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
608 start: function(event, ui) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
609 var t = $('body'), o = $(this).data('draggable').options;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
610 if (t.css("cursor")) o._cursor = t.css("cursor");
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
611 t.css("cursor", o.cursor);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
612 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
613 stop: function(event, ui) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
614 var o = $(this).data('draggable').options;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
615 if (o._cursor) $('body').css("cursor", o._cursor);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
616 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
617 });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
618
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
619 $.ui.plugin.add("draggable", "iframeFix", {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
620 start: function(event, ui) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
621 var o = $(this).data('draggable').options;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
622 $(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
623 $('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>')
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
624 .css({
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
625 width: this.offsetWidth+"px", height: this.offsetHeight+"px",
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
626 position: "absolute", opacity: "0.001", zIndex: 1000
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
627 })
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
628 .css($(this).offset())
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
629 .appendTo("body");
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
630 });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
631 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
632 stop: function(event, ui) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
633 $("div.ui-draggable-iframeFix").each(function() { this.parentNode.removeChild(this); }); //Remove frame helpers
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
634 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
635 });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
636
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
637 $.ui.plugin.add("draggable", "opacity", {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
638 start: function(event, ui) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
639 var t = $(ui.helper), o = $(this).data('draggable').options;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
640 if(t.css("opacity")) o._opacity = t.css("opacity");
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
641 t.css('opacity', o.opacity);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
642 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
643 stop: function(event, ui) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
644 var o = $(this).data('draggable').options;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
645 if(o._opacity) $(ui.helper).css('opacity', o._opacity);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
646 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
647 });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
648
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
649 $.ui.plugin.add("draggable", "scroll", {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
650 start: function(event, ui) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
651 var i = $(this).data("draggable");
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
652 if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
653 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
654 drag: function(event, ui) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
655
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
656 var i = $(this).data("draggable"), o = i.options, scrolled = false;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
657
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
658 if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
659
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
660 if(!o.axis || o.axis != 'x') {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
661 if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
662 i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
663 else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
664 i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
665 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
666
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
667 if(!o.axis || o.axis != 'y') {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
668 if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
669 i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
670 else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
671 i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
672 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
673
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
674 } else {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
675
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
676 if(!o.axis || o.axis != 'x') {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
677 if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
678 scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
679 else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
680 scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
681 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
682
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
683 if(!o.axis || o.axis != 'y') {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
684 if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
685 scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
686 else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
687 scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
688 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
689
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
690 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
691
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
692 if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
693 $.ui.ddmanager.prepareOffsets(i, event);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
694
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
695 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
696 });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
697
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
698 $.ui.plugin.add("draggable", "snap", {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
699 start: function(event, ui) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
700
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
701 var i = $(this).data("draggable"), o = i.options;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
702 i.snapElements = [];
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
703
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
704 $(o.snap.constructor != String ? ( o.snap.items || ':data(draggable)' ) : o.snap).each(function() {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
705 var $t = $(this); var $o = $t.offset();
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
706 if(this != i.element[0]) i.snapElements.push({
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
707 item: this,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
708 width: $t.outerWidth(), height: $t.outerHeight(),
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
709 top: $o.top, left: $o.left
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
710 });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
711 });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
712
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
713 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
714 drag: function(event, ui) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
715
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
716 var inst = $(this).data("draggable"), o = inst.options;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
717 var d = o.snapTolerance;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
718
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
719 var x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
720 y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
721
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
722 for (var i = inst.snapElements.length - 1; i >= 0; i--){
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
723
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
724 var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width,
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
725 t = inst.snapElements[i].top, b = t + inst.snapElements[i].height;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
726
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
727 //Yes, I know, this is insane ;)
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
728 if(!((l-d < x1 && x1 < r+d && t-d < y1 && y1 < b+d) || (l-d < x1 && x1 < r+d && t-d < y2 && y2 < b+d) || (l-d < x2 && x2 < r+d && t-d < y1 && y1 < b+d) || (l-d < x2 && x2 < r+d && t-d < y2 && y2 < b+d))) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
729 if(inst.snapElements[i].snapping) (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
730 inst.snapElements[i].snapping = false;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
731 continue;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
732 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
733
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
734 if(o.snapMode != 'inner') {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
735 var ts = Math.abs(t - y2) <= d;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
736 var bs = Math.abs(b - y1) <= d;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
737 var ls = Math.abs(l - x2) <= d;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
738 var rs = Math.abs(r - x1) <= d;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
739 if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
740 if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
741 if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
742 if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
743 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
744
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
745 var first = (ts || bs || ls || rs);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
746
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
747 if(o.snapMode != 'outer') {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
748 var ts = Math.abs(t - y1) <= d;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
749 var bs = Math.abs(b - y2) <= d;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
750 var ls = Math.abs(l - x1) <= d;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
751 var rs = Math.abs(r - x2) <= d;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
752 if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
753 if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
754 if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
755 if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
756 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
757
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
758 if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first))
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
759 (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
760 inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
761
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
762 };
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
763
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
764 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
765 });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
766
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
767 $.ui.plugin.add("draggable", "stack", {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
768 start: function(event, ui) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
769
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
770 var o = $(this).data("draggable").options;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
771
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
772 var group = $.makeArray($(o.stack)).sort(function(a,b) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
773 return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
774 });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
775 if (!group.length) { return; }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
776
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
777 var min = parseInt(group[0].style.zIndex) || 0;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
778 $(group).each(function(i) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
779 this.style.zIndex = min + i;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
780 });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
781
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
782 this[0].style.zIndex = min + group.length;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
783
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
784 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
785 });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
786
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
787 $.ui.plugin.add("draggable", "zIndex", {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
788 start: function(event, ui) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
789 var t = $(ui.helper), o = $(this).data("draggable").options;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
790 if(t.css("zIndex")) o._zIndex = t.css("zIndex");
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
791 t.css('zIndex', o.zIndex);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
792 },
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
793 stop: function(event, ui) {
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
794 var o = $(this).data("draggable").options;
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
795 if(o._zIndex) $(ui.helper).css('zIndex', o._zIndex);
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
796 }
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
797 });
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
798
b2e4605f20b2 beta version
dwinter
parents:
diff changeset
799 })(jQuery);