sortablejs 1.14.0 → 1.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/Sortable.js +675 -1093
- package/Sortable.min.js +2 -2
- package/modular/sortable.complete.esm.js +675 -1093
- package/modular/sortable.core.esm.js +675 -1094
- package/modular/sortable.esm.js +675 -1093
- package/package.json +2 -2
|
@@ -1,31 +1,25 @@
|
|
|
1
1
|
/**!
|
|
2
|
-
* Sortable 1.
|
|
2
|
+
* Sortable 1.15.1
|
|
3
3
|
* @author RubaXa <trash@rubaxa.org>
|
|
4
4
|
* @author owenm <owen23355@gmail.com>
|
|
5
5
|
* @license MIT
|
|
6
6
|
*/
|
|
7
7
|
function ownKeys(object, enumerableOnly) {
|
|
8
8
|
var keys = Object.keys(object);
|
|
9
|
-
|
|
10
9
|
if (Object.getOwnPropertySymbols) {
|
|
11
10
|
var symbols = Object.getOwnPropertySymbols(object);
|
|
12
|
-
|
|
13
11
|
if (enumerableOnly) {
|
|
14
12
|
symbols = symbols.filter(function (sym) {
|
|
15
13
|
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
16
14
|
});
|
|
17
15
|
}
|
|
18
|
-
|
|
19
16
|
keys.push.apply(keys, symbols);
|
|
20
17
|
}
|
|
21
|
-
|
|
22
18
|
return keys;
|
|
23
19
|
}
|
|
24
|
-
|
|
25
20
|
function _objectSpread2(target) {
|
|
26
21
|
for (var i = 1; i < arguments.length; i++) {
|
|
27
22
|
var source = arguments[i] != null ? arguments[i] : {};
|
|
28
|
-
|
|
29
23
|
if (i % 2) {
|
|
30
24
|
ownKeys(Object(source), true).forEach(function (key) {
|
|
31
25
|
_defineProperty(target, key, source[key]);
|
|
@@ -38,10 +32,8 @@ function _objectSpread2(target) {
|
|
|
38
32
|
});
|
|
39
33
|
}
|
|
40
34
|
}
|
|
41
|
-
|
|
42
35
|
return target;
|
|
43
36
|
}
|
|
44
|
-
|
|
45
37
|
function _typeof(obj) {
|
|
46
38
|
"@babel/helpers - typeof";
|
|
47
39
|
|
|
@@ -54,10 +46,8 @@ function _typeof(obj) {
|
|
|
54
46
|
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
55
47
|
};
|
|
56
48
|
}
|
|
57
|
-
|
|
58
49
|
return _typeof(obj);
|
|
59
50
|
}
|
|
60
|
-
|
|
61
51
|
function _defineProperty(obj, key, value) {
|
|
62
52
|
if (key in obj) {
|
|
63
53
|
Object.defineProperty(obj, key, {
|
|
@@ -69,53 +59,40 @@ function _defineProperty(obj, key, value) {
|
|
|
69
59
|
} else {
|
|
70
60
|
obj[key] = value;
|
|
71
61
|
}
|
|
72
|
-
|
|
73
62
|
return obj;
|
|
74
63
|
}
|
|
75
|
-
|
|
76
64
|
function _extends() {
|
|
77
65
|
_extends = Object.assign || function (target) {
|
|
78
66
|
for (var i = 1; i < arguments.length; i++) {
|
|
79
67
|
var source = arguments[i];
|
|
80
|
-
|
|
81
68
|
for (var key in source) {
|
|
82
69
|
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
83
70
|
target[key] = source[key];
|
|
84
71
|
}
|
|
85
72
|
}
|
|
86
73
|
}
|
|
87
|
-
|
|
88
74
|
return target;
|
|
89
75
|
};
|
|
90
|
-
|
|
91
76
|
return _extends.apply(this, arguments);
|
|
92
77
|
}
|
|
93
|
-
|
|
94
78
|
function _objectWithoutPropertiesLoose(source, excluded) {
|
|
95
79
|
if (source == null) return {};
|
|
96
80
|
var target = {};
|
|
97
81
|
var sourceKeys = Object.keys(source);
|
|
98
82
|
var key, i;
|
|
99
|
-
|
|
100
83
|
for (i = 0; i < sourceKeys.length; i++) {
|
|
101
84
|
key = sourceKeys[i];
|
|
102
85
|
if (excluded.indexOf(key) >= 0) continue;
|
|
103
86
|
target[key] = source[key];
|
|
104
87
|
}
|
|
105
|
-
|
|
106
88
|
return target;
|
|
107
89
|
}
|
|
108
|
-
|
|
109
90
|
function _objectWithoutProperties(source, excluded) {
|
|
110
91
|
if (source == null) return {};
|
|
111
|
-
|
|
112
92
|
var target = _objectWithoutPropertiesLoose(source, excluded);
|
|
113
|
-
|
|
114
93
|
var key, i;
|
|
115
|
-
|
|
116
94
|
if (Object.getOwnPropertySymbols) {
|
|
117
95
|
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
|
118
|
-
|
|
119
96
|
for (i = 0; i < sourceSymbolKeys.length; i++) {
|
|
120
97
|
key = sourceSymbolKeys[i];
|
|
121
98
|
if (excluded.indexOf(key) >= 0) continue;
|
|
@@ -123,22 +100,17 @@ function _objectWithoutProperties(source, excluded) {
|
|
|
123
100
|
target[key] = source[key];
|
|
124
101
|
}
|
|
125
102
|
}
|
|
126
|
-
|
|
127
103
|
return target;
|
|
128
104
|
}
|
|
129
|
-
|
|
130
105
|
function _toConsumableArray(arr) {
|
|
131
106
|
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
|
|
132
107
|
}
|
|
133
|
-
|
|
134
108
|
function _arrayWithoutHoles(arr) {
|
|
135
109
|
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
|
|
136
110
|
}
|
|
137
|
-
|
|
138
111
|
function _iterableToArray(iter) {
|
|
139
112
|
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
140
113
|
}
|
|
141
|
-
|
|
142
114
|
function _unsupportedIterableToArray(o, minLen) {
|
|
143
115
|
if (!o) return;
|
|
144
116
|
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
@@ -147,27 +119,22 @@ function _unsupportedIterableToArray(o, minLen) {
|
|
|
147
119
|
if (n === "Map" || n === "Set") return Array.from(o);
|
|
148
120
|
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
149
121
|
}
|
|
150
|
-
|
|
151
122
|
function _arrayLikeToArray(arr, len) {
|
|
152
123
|
if (len == null || len > arr.length) len = arr.length;
|
|
153
|
-
|
|
154
124
|
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
|
|
155
|
-
|
|
156
125
|
return arr2;
|
|
157
126
|
}
|
|
158
|
-
|
|
159
127
|
function _nonIterableSpread() {
|
|
160
128
|
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
161
129
|
}
|
|
162
130
|
|
|
163
|
-
var version = "1.
|
|
131
|
+
var version = "1.15.1";
|
|
164
132
|
|
|
165
133
|
function userAgent(pattern) {
|
|
166
134
|
if (typeof window !== 'undefined' && window.navigator) {
|
|
167
135
|
return !! /*@__PURE__*/navigator.userAgent.match(pattern);
|
|
168
136
|
}
|
|
169
137
|
}
|
|
170
|
-
|
|
171
138
|
var IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i);
|
|
172
139
|
var Edge = userAgent(/Edge/i);
|
|
173
140
|
var FireFox = userAgent(/firefox/i);
|
|
@@ -179,23 +146,15 @@ var captureMode = {
|
|
|
179
146
|
capture: false,
|
|
180
147
|
passive: false
|
|
181
148
|
};
|
|
182
|
-
|
|
183
149
|
function on(el, event, fn) {
|
|
184
150
|
el.addEventListener(event, fn, !IE11OrLess && captureMode);
|
|
185
151
|
}
|
|
186
|
-
|
|
187
152
|
function off(el, event, fn) {
|
|
188
153
|
el.removeEventListener(event, fn, !IE11OrLess && captureMode);
|
|
189
154
|
}
|
|
190
|
-
|
|
191
|
-
function matches(
|
|
192
|
-
/**HTMLElement*/
|
|
193
|
-
el,
|
|
194
|
-
/**String*/
|
|
195
|
-
selector) {
|
|
155
|
+
function matches( /**HTMLElement*/el, /**String*/selector) {
|
|
196
156
|
if (!selector) return;
|
|
197
157
|
selector[0] === '>' && (selector = selector.substring(1));
|
|
198
|
-
|
|
199
158
|
if (el) {
|
|
200
159
|
try {
|
|
201
160
|
if (el.matches) {
|
|
@@ -209,39 +168,25 @@ selector) {
|
|
|
209
168
|
return false;
|
|
210
169
|
}
|
|
211
170
|
}
|
|
212
|
-
|
|
213
171
|
return false;
|
|
214
172
|
}
|
|
215
|
-
|
|
216
173
|
function getParentOrHost(el) {
|
|
217
174
|
return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;
|
|
218
175
|
}
|
|
219
|
-
|
|
220
|
-
function closest(
|
|
221
|
-
/**HTMLElement*/
|
|
222
|
-
el,
|
|
223
|
-
/**String*/
|
|
224
|
-
selector,
|
|
225
|
-
/**HTMLElement*/
|
|
226
|
-
ctx, includeCTX) {
|
|
176
|
+
function closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {
|
|
227
177
|
if (el) {
|
|
228
178
|
ctx = ctx || document;
|
|
229
|
-
|
|
230
179
|
do {
|
|
231
180
|
if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {
|
|
232
181
|
return el;
|
|
233
182
|
}
|
|
234
|
-
|
|
235
183
|
if (el === ctx) break;
|
|
236
184
|
/* jshint boss:true */
|
|
237
185
|
} while (el = getParentOrHost(el));
|
|
238
186
|
}
|
|
239
|
-
|
|
240
187
|
return null;
|
|
241
188
|
}
|
|
242
|
-
|
|
243
189
|
var R_SPACE = /\s+/g;
|
|
244
|
-
|
|
245
190
|
function toggleClass(el, name, state) {
|
|
246
191
|
if (el && name) {
|
|
247
192
|
if (el.classList) {
|
|
@@ -252,10 +197,8 @@ function toggleClass(el, name, state) {
|
|
|
252
197
|
}
|
|
253
198
|
}
|
|
254
199
|
}
|
|
255
|
-
|
|
256
200
|
function css(el, prop, val) {
|
|
257
201
|
var style = el && el.style;
|
|
258
|
-
|
|
259
202
|
if (style) {
|
|
260
203
|
if (val === void 0) {
|
|
261
204
|
if (document.defaultView && document.defaultView.getComputedStyle) {
|
|
@@ -263,83 +206,67 @@ function css(el, prop, val) {
|
|
|
263
206
|
} else if (el.currentStyle) {
|
|
264
207
|
val = el.currentStyle;
|
|
265
208
|
}
|
|
266
|
-
|
|
267
209
|
return prop === void 0 ? val : val[prop];
|
|
268
210
|
} else {
|
|
269
211
|
if (!(prop in style) && prop.indexOf('webkit') === -1) {
|
|
270
212
|
prop = '-webkit-' + prop;
|
|
271
213
|
}
|
|
272
|
-
|
|
273
214
|
style[prop] = val + (typeof val === 'string' ? '' : 'px');
|
|
274
215
|
}
|
|
275
216
|
}
|
|
276
217
|
}
|
|
277
|
-
|
|
278
218
|
function matrix(el, selfOnly) {
|
|
279
219
|
var appliedTransforms = '';
|
|
280
|
-
|
|
281
220
|
if (typeof el === 'string') {
|
|
282
221
|
appliedTransforms = el;
|
|
283
222
|
} else {
|
|
284
223
|
do {
|
|
285
224
|
var transform = css(el, 'transform');
|
|
286
|
-
|
|
287
225
|
if (transform && transform !== 'none') {
|
|
288
226
|
appliedTransforms = transform + ' ' + appliedTransforms;
|
|
289
227
|
}
|
|
290
228
|
/* jshint boss:true */
|
|
291
|
-
|
|
292
229
|
} while (!selfOnly && (el = el.parentNode));
|
|
293
230
|
}
|
|
294
|
-
|
|
295
231
|
var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;
|
|
296
232
|
/*jshint -W056 */
|
|
297
|
-
|
|
298
233
|
return matrixFn && new matrixFn(appliedTransforms);
|
|
299
234
|
}
|
|
300
|
-
|
|
301
235
|
function find(ctx, tagName, iterator) {
|
|
302
236
|
if (ctx) {
|
|
303
237
|
var list = ctx.getElementsByTagName(tagName),
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
238
|
+
i = 0,
|
|
239
|
+
n = list.length;
|
|
307
240
|
if (iterator) {
|
|
308
241
|
for (; i < n; i++) {
|
|
309
242
|
iterator(list[i], i);
|
|
310
243
|
}
|
|
311
244
|
}
|
|
312
|
-
|
|
313
245
|
return list;
|
|
314
246
|
}
|
|
315
|
-
|
|
316
247
|
return [];
|
|
317
248
|
}
|
|
318
|
-
|
|
319
249
|
function getWindowScrollingElement() {
|
|
320
250
|
var scrollingElement = document.scrollingElement;
|
|
321
|
-
|
|
322
251
|
if (scrollingElement) {
|
|
323
252
|
return scrollingElement;
|
|
324
253
|
} else {
|
|
325
254
|
return document.documentElement;
|
|
326
255
|
}
|
|
327
256
|
}
|
|
328
|
-
/**
|
|
329
|
-
* Returns the "bounding client rect" of given element
|
|
330
|
-
* @param {HTMLElement} el The element whose boundingClientRect is wanted
|
|
331
|
-
* @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container
|
|
332
|
-
* @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr
|
|
333
|
-
* @param {[Boolean]} undoScale Whether the container's scale() should be undone
|
|
334
|
-
* @param {[HTMLElement]} container The parent the element will be placed in
|
|
335
|
-
* @return {Object} The boundingClientRect of el, with specified adjustments
|
|
336
|
-
*/
|
|
337
|
-
|
|
338
257
|
|
|
258
|
+
/**
|
|
259
|
+
* Returns the "bounding client rect" of given element
|
|
260
|
+
* @param {HTMLElement} el The element whose boundingClientRect is wanted
|
|
261
|
+
* @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container
|
|
262
|
+
* @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr
|
|
263
|
+
* @param {[Boolean]} undoScale Whether the container's scale() should be undone
|
|
264
|
+
* @param {[HTMLElement]} container The parent the element will be placed in
|
|
265
|
+
* @return {Object} The boundingClientRect of el, with specified adjustments
|
|
266
|
+
*/
|
|
339
267
|
function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {
|
|
340
268
|
if (!el.getBoundingClientRect && el !== window) return;
|
|
341
269
|
var elRect, top, left, bottom, right, height, width;
|
|
342
|
-
|
|
343
270
|
if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {
|
|
344
271
|
elRect = el.getBoundingClientRect();
|
|
345
272
|
top = elRect.top;
|
|
@@ -356,17 +283,18 @@ function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoS
|
|
|
356
283
|
height = window.innerHeight;
|
|
357
284
|
width = window.innerWidth;
|
|
358
285
|
}
|
|
359
|
-
|
|
360
286
|
if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {
|
|
361
287
|
// Adjust for translate()
|
|
362
|
-
container = container || el.parentNode;
|
|
363
|
-
// Not needed on <= IE11
|
|
288
|
+
container = container || el.parentNode;
|
|
364
289
|
|
|
290
|
+
// solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)
|
|
291
|
+
// Not needed on <= IE11
|
|
365
292
|
if (!IE11OrLess) {
|
|
366
293
|
do {
|
|
367
294
|
if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {
|
|
368
|
-
var containerRect = container.getBoundingClientRect();
|
|
295
|
+
var containerRect = container.getBoundingClientRect();
|
|
369
296
|
|
|
297
|
+
// Set relative to edges of padding box of container
|
|
370
298
|
top -= containerRect.top + parseInt(css(container, 'border-top-width'));
|
|
371
299
|
left -= containerRect.left + parseInt(css(container, 'border-left-width'));
|
|
372
300
|
bottom = top + elRect.height;
|
|
@@ -374,17 +302,14 @@ function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoS
|
|
|
374
302
|
break;
|
|
375
303
|
}
|
|
376
304
|
/* jshint boss:true */
|
|
377
|
-
|
|
378
305
|
} while (container = container.parentNode);
|
|
379
306
|
}
|
|
380
307
|
}
|
|
381
|
-
|
|
382
308
|
if (undoScale && el !== window) {
|
|
383
309
|
// Adjust for scale()
|
|
384
310
|
var elMatrix = matrix(container || el),
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
311
|
+
scaleX = elMatrix && elMatrix.a,
|
|
312
|
+
scaleY = elMatrix && elMatrix.d;
|
|
388
313
|
if (elMatrix) {
|
|
389
314
|
top /= scaleY;
|
|
390
315
|
left /= scaleX;
|
|
@@ -394,7 +319,6 @@ function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoS
|
|
|
394
319
|
right = left + width;
|
|
395
320
|
}
|
|
396
321
|
}
|
|
397
|
-
|
|
398
322
|
return {
|
|
399
323
|
top: top,
|
|
400
324
|
left: left,
|
|
@@ -404,165 +328,160 @@ function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoS
|
|
|
404
328
|
height: height
|
|
405
329
|
};
|
|
406
330
|
}
|
|
407
|
-
/**
|
|
408
|
-
* Checks if a side of an element is scrolled past a side of its parents
|
|
409
|
-
* @param {HTMLElement} el The element who's side being scrolled out of view is in question
|
|
410
|
-
* @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')
|
|
411
|
-
* @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')
|
|
412
|
-
* @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element
|
|
413
|
-
*/
|
|
414
|
-
|
|
415
331
|
|
|
332
|
+
/**
|
|
333
|
+
* Returns the content rect of the element (bounding rect minus border and padding)
|
|
334
|
+
* @param {HTMLElement} el
|
|
335
|
+
*/
|
|
336
|
+
function getContentRect(el) {
|
|
337
|
+
var rect = getRect(el);
|
|
338
|
+
var paddingLeft = parseInt(css(el, 'padding-left')),
|
|
339
|
+
paddingTop = parseInt(css(el, 'padding-top')),
|
|
340
|
+
paddingRight = parseInt(css(el, 'padding-right')),
|
|
341
|
+
paddingBottom = parseInt(css(el, 'padding-bottom'));
|
|
342
|
+
rect.top += paddingTop + parseInt(css(el, 'border-top-width'));
|
|
343
|
+
rect.left += paddingLeft + parseInt(css(el, 'border-left-width'));
|
|
344
|
+
// Client Width/Height includes padding only
|
|
345
|
+
rect.width = el.clientWidth - paddingLeft - paddingRight;
|
|
346
|
+
rect.height = el.clientHeight - paddingTop - paddingBottom;
|
|
347
|
+
rect.bottom = rect.top + rect.height;
|
|
348
|
+
rect.right = rect.left + rect.width;
|
|
349
|
+
return rect;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* Checks if a side of an element is scrolled past a side of its parents
|
|
354
|
+
* @param {HTMLElement} el The element who's side being scrolled out of view is in question
|
|
355
|
+
* @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')
|
|
356
|
+
* @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')
|
|
357
|
+
* @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element
|
|
358
|
+
*/
|
|
416
359
|
function isScrolledPast(el, elSide, parentSide) {
|
|
417
360
|
var parent = getParentAutoScrollElement(el, true),
|
|
418
|
-
|
|
419
|
-
/* jshint boss:true */
|
|
361
|
+
elSideVal = getRect(el)[elSide];
|
|
420
362
|
|
|
363
|
+
/* jshint boss:true */
|
|
421
364
|
while (parent) {
|
|
422
365
|
var parentSideVal = getRect(parent)[parentSide],
|
|
423
|
-
|
|
424
|
-
|
|
366
|
+
visible = void 0;
|
|
425
367
|
if (parentSide === 'top' || parentSide === 'left') {
|
|
426
368
|
visible = elSideVal >= parentSideVal;
|
|
427
369
|
} else {
|
|
428
370
|
visible = elSideVal <= parentSideVal;
|
|
429
371
|
}
|
|
430
|
-
|
|
431
372
|
if (!visible) return parent;
|
|
432
373
|
if (parent === getWindowScrollingElement()) break;
|
|
433
374
|
parent = getParentAutoScrollElement(parent, false);
|
|
434
375
|
}
|
|
435
|
-
|
|
436
376
|
return false;
|
|
437
377
|
}
|
|
438
|
-
/**
|
|
439
|
-
* Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)
|
|
440
|
-
* and non-draggable elements
|
|
441
|
-
* @param {HTMLElement} el The parent element
|
|
442
|
-
* @param {Number} childNum The index of the child
|
|
443
|
-
* @param {Object} options Parent Sortable's options
|
|
444
|
-
* @return {HTMLElement} The child at index childNum, or null if not found
|
|
445
|
-
*/
|
|
446
|
-
|
|
447
378
|
|
|
379
|
+
/**
|
|
380
|
+
* Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)
|
|
381
|
+
* and non-draggable elements
|
|
382
|
+
* @param {HTMLElement} el The parent element
|
|
383
|
+
* @param {Number} childNum The index of the child
|
|
384
|
+
* @param {Object} options Parent Sortable's options
|
|
385
|
+
* @return {HTMLElement} The child at index childNum, or null if not found
|
|
386
|
+
*/
|
|
448
387
|
function getChild(el, childNum, options, includeDragEl) {
|
|
449
388
|
var currentChild = 0,
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
389
|
+
i = 0,
|
|
390
|
+
children = el.children;
|
|
453
391
|
while (i < children.length) {
|
|
454
392
|
if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {
|
|
455
393
|
if (currentChild === childNum) {
|
|
456
394
|
return children[i];
|
|
457
395
|
}
|
|
458
|
-
|
|
459
396
|
currentChild++;
|
|
460
397
|
}
|
|
461
|
-
|
|
462
398
|
i++;
|
|
463
399
|
}
|
|
464
|
-
|
|
465
400
|
return null;
|
|
466
401
|
}
|
|
467
|
-
/**
|
|
468
|
-
* Gets the last child in the el, ignoring ghostEl or invisible elements (clones)
|
|
469
|
-
* @param {HTMLElement} el Parent element
|
|
470
|
-
* @param {selector} selector Any other elements that should be ignored
|
|
471
|
-
* @return {HTMLElement} The last child, ignoring ghostEl
|
|
472
|
-
*/
|
|
473
|
-
|
|
474
402
|
|
|
403
|
+
/**
|
|
404
|
+
* Gets the last child in the el, ignoring ghostEl or invisible elements (clones)
|
|
405
|
+
* @param {HTMLElement} el Parent element
|
|
406
|
+
* @param {selector} selector Any other elements that should be ignored
|
|
407
|
+
* @return {HTMLElement} The last child, ignoring ghostEl
|
|
408
|
+
*/
|
|
475
409
|
function lastChild(el, selector) {
|
|
476
410
|
var last = el.lastElementChild;
|
|
477
|
-
|
|
478
411
|
while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {
|
|
479
412
|
last = last.previousElementSibling;
|
|
480
413
|
}
|
|
481
|
-
|
|
482
414
|
return last || null;
|
|
483
415
|
}
|
|
484
|
-
/**
|
|
485
|
-
* Returns the index of an element within its parent for a selected set of
|
|
486
|
-
* elements
|
|
487
|
-
* @param {HTMLElement} el
|
|
488
|
-
* @param {selector} selector
|
|
489
|
-
* @return {number}
|
|
490
|
-
*/
|
|
491
|
-
|
|
492
416
|
|
|
417
|
+
/**
|
|
418
|
+
* Returns the index of an element within its parent for a selected set of
|
|
419
|
+
* elements
|
|
420
|
+
* @param {HTMLElement} el
|
|
421
|
+
* @param {selector} selector
|
|
422
|
+
* @return {number}
|
|
423
|
+
*/
|
|
493
424
|
function index(el, selector) {
|
|
494
425
|
var index = 0;
|
|
495
|
-
|
|
496
426
|
if (!el || !el.parentNode) {
|
|
497
427
|
return -1;
|
|
498
428
|
}
|
|
499
|
-
/* jshint boss:true */
|
|
500
|
-
|
|
501
429
|
|
|
430
|
+
/* jshint boss:true */
|
|
502
431
|
while (el = el.previousElementSibling) {
|
|
503
432
|
if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {
|
|
504
433
|
index++;
|
|
505
434
|
}
|
|
506
435
|
}
|
|
507
|
-
|
|
508
436
|
return index;
|
|
509
437
|
}
|
|
510
|
-
/**
|
|
511
|
-
* Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.
|
|
512
|
-
* The value is returned in real pixels.
|
|
513
|
-
* @param {HTMLElement} el
|
|
514
|
-
* @return {Array} Offsets in the format of [left, top]
|
|
515
|
-
*/
|
|
516
|
-
|
|
517
438
|
|
|
439
|
+
/**
|
|
440
|
+
* Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.
|
|
441
|
+
* The value is returned in real pixels.
|
|
442
|
+
* @param {HTMLElement} el
|
|
443
|
+
* @return {Array} Offsets in the format of [left, top]
|
|
444
|
+
*/
|
|
518
445
|
function getRelativeScrollOffset(el) {
|
|
519
446
|
var offsetLeft = 0,
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
447
|
+
offsetTop = 0,
|
|
448
|
+
winScroller = getWindowScrollingElement();
|
|
523
449
|
if (el) {
|
|
524
450
|
do {
|
|
525
451
|
var elMatrix = matrix(el),
|
|
526
|
-
|
|
527
|
-
|
|
452
|
+
scaleX = elMatrix.a,
|
|
453
|
+
scaleY = elMatrix.d;
|
|
528
454
|
offsetLeft += el.scrollLeft * scaleX;
|
|
529
455
|
offsetTop += el.scrollTop * scaleY;
|
|
530
456
|
} while (el !== winScroller && (el = el.parentNode));
|
|
531
457
|
}
|
|
532
|
-
|
|
533
458
|
return [offsetLeft, offsetTop];
|
|
534
459
|
}
|
|
535
|
-
/**
|
|
536
|
-
* Returns the index of the object within the given array
|
|
537
|
-
* @param {Array} arr Array that may or may not hold the object
|
|
538
|
-
* @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find
|
|
539
|
-
* @return {Number} The index of the object in the array, or -1
|
|
540
|
-
*/
|
|
541
|
-
|
|
542
460
|
|
|
461
|
+
/**
|
|
462
|
+
* Returns the index of the object within the given array
|
|
463
|
+
* @param {Array} arr Array that may or may not hold the object
|
|
464
|
+
* @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find
|
|
465
|
+
* @return {Number} The index of the object in the array, or -1
|
|
466
|
+
*/
|
|
543
467
|
function indexOfObject(arr, obj) {
|
|
544
468
|
for (var i in arr) {
|
|
545
469
|
if (!arr.hasOwnProperty(i)) continue;
|
|
546
|
-
|
|
547
470
|
for (var key in obj) {
|
|
548
471
|
if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);
|
|
549
472
|
}
|
|
550
473
|
}
|
|
551
|
-
|
|
552
474
|
return -1;
|
|
553
475
|
}
|
|
554
|
-
|
|
555
476
|
function getParentAutoScrollElement(el, includeSelf) {
|
|
556
477
|
// skip to window
|
|
557
478
|
if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();
|
|
558
479
|
var elem = el;
|
|
559
480
|
var gotSelf = false;
|
|
560
|
-
|
|
561
481
|
do {
|
|
562
482
|
// we don't need to get elem css if it isn't even overflowing in the first place (performance)
|
|
563
483
|
if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {
|
|
564
484
|
var elemCSS = css(elem);
|
|
565
|
-
|
|
566
485
|
if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {
|
|
567
486
|
if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();
|
|
568
487
|
if (gotSelf || includeSelf) return elem;
|
|
@@ -570,12 +489,9 @@ function getParentAutoScrollElement(el, includeSelf) {
|
|
|
570
489
|
}
|
|
571
490
|
}
|
|
572
491
|
/* jshint boss:true */
|
|
573
|
-
|
|
574
492
|
} while (elem = elem.parentNode);
|
|
575
|
-
|
|
576
493
|
return getWindowScrollingElement();
|
|
577
494
|
}
|
|
578
|
-
|
|
579
495
|
function extend(dst, src) {
|
|
580
496
|
if (dst && src) {
|
|
581
497
|
for (var key in src) {
|
|
@@ -584,49 +500,39 @@ function extend(dst, src) {
|
|
|
584
500
|
}
|
|
585
501
|
}
|
|
586
502
|
}
|
|
587
|
-
|
|
588
503
|
return dst;
|
|
589
504
|
}
|
|
590
|
-
|
|
591
505
|
function isRectEqual(rect1, rect2) {
|
|
592
506
|
return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);
|
|
593
507
|
}
|
|
594
|
-
|
|
595
508
|
var _throttleTimeout;
|
|
596
|
-
|
|
597
509
|
function throttle(callback, ms) {
|
|
598
510
|
return function () {
|
|
599
511
|
if (!_throttleTimeout) {
|
|
600
512
|
var args = arguments,
|
|
601
|
-
|
|
602
|
-
|
|
513
|
+
_this = this;
|
|
603
514
|
if (args.length === 1) {
|
|
604
515
|
callback.call(_this, args[0]);
|
|
605
516
|
} else {
|
|
606
517
|
callback.apply(_this, args);
|
|
607
518
|
}
|
|
608
|
-
|
|
609
519
|
_throttleTimeout = setTimeout(function () {
|
|
610
520
|
_throttleTimeout = void 0;
|
|
611
521
|
}, ms);
|
|
612
522
|
}
|
|
613
523
|
};
|
|
614
524
|
}
|
|
615
|
-
|
|
616
525
|
function cancelThrottle() {
|
|
617
526
|
clearTimeout(_throttleTimeout);
|
|
618
527
|
_throttleTimeout = void 0;
|
|
619
528
|
}
|
|
620
|
-
|
|
621
529
|
function scrollBy(el, x, y) {
|
|
622
530
|
el.scrollLeft += x;
|
|
623
531
|
el.scrollTop += y;
|
|
624
532
|
}
|
|
625
|
-
|
|
626
533
|
function clone(el) {
|
|
627
534
|
var Polymer = window.Polymer;
|
|
628
535
|
var $ = window.jQuery || window.Zepto;
|
|
629
|
-
|
|
630
536
|
if (Polymer && Polymer.dom) {
|
|
631
537
|
return Polymer.dom(el).cloneNode(true);
|
|
632
538
|
} else if ($) {
|
|
@@ -635,7 +541,6 @@ function clone(el) {
|
|
|
635
541
|
return el.cloneNode(true);
|
|
636
542
|
}
|
|
637
543
|
}
|
|
638
|
-
|
|
639
544
|
function setRect(el, rect) {
|
|
640
545
|
css(el, 'position', 'absolute');
|
|
641
546
|
css(el, 'top', rect.top);
|
|
@@ -643,7 +548,6 @@ function setRect(el, rect) {
|
|
|
643
548
|
css(el, 'width', rect.width);
|
|
644
549
|
css(el, 'height', rect.height);
|
|
645
550
|
}
|
|
646
|
-
|
|
647
551
|
function unsetRect(el) {
|
|
648
552
|
css(el, 'position', '');
|
|
649
553
|
css(el, 'top', '');
|
|
@@ -651,12 +555,11 @@ function unsetRect(el) {
|
|
|
651
555
|
css(el, 'width', '');
|
|
652
556
|
css(el, 'height', '');
|
|
653
557
|
}
|
|
654
|
-
|
|
655
558
|
var expando = 'Sortable' + new Date().getTime();
|
|
656
559
|
|
|
657
560
|
function AnimationStateManager() {
|
|
658
561
|
var animationStates = [],
|
|
659
|
-
|
|
562
|
+
animationCallbackId;
|
|
660
563
|
return {
|
|
661
564
|
captureAnimationState: function captureAnimationState() {
|
|
662
565
|
animationStates = [];
|
|
@@ -668,19 +571,16 @@ function AnimationStateManager() {
|
|
|
668
571
|
target: child,
|
|
669
572
|
rect: getRect(child)
|
|
670
573
|
});
|
|
574
|
+
var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);
|
|
671
575
|
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
576
|
+
// If animating: compensate for current animation
|
|
675
577
|
if (child.thisAnimationDuration) {
|
|
676
578
|
var childMatrix = matrix(child, true);
|
|
677
|
-
|
|
678
579
|
if (childMatrix) {
|
|
679
580
|
fromRect.top -= childMatrix.f;
|
|
680
581
|
fromRect.left -= childMatrix.e;
|
|
681
582
|
}
|
|
682
583
|
}
|
|
683
|
-
|
|
684
584
|
child.fromRect = fromRect;
|
|
685
585
|
});
|
|
686
586
|
},
|
|
@@ -694,54 +594,47 @@ function AnimationStateManager() {
|
|
|
694
594
|
},
|
|
695
595
|
animateAll: function animateAll(callback) {
|
|
696
596
|
var _this = this;
|
|
697
|
-
|
|
698
597
|
if (!this.options.animation) {
|
|
699
598
|
clearTimeout(animationCallbackId);
|
|
700
599
|
if (typeof callback === 'function') callback();
|
|
701
600
|
return;
|
|
702
601
|
}
|
|
703
|
-
|
|
704
602
|
var animating = false,
|
|
705
|
-
|
|
603
|
+
animationTime = 0;
|
|
706
604
|
animationStates.forEach(function (state) {
|
|
707
605
|
var time = 0,
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
606
|
+
target = state.target,
|
|
607
|
+
fromRect = target.fromRect,
|
|
608
|
+
toRect = getRect(target),
|
|
609
|
+
prevFromRect = target.prevFromRect,
|
|
610
|
+
prevToRect = target.prevToRect,
|
|
611
|
+
animatingRect = state.rect,
|
|
612
|
+
targetMatrix = matrix(target, true);
|
|
716
613
|
if (targetMatrix) {
|
|
717
614
|
// Compensate for current animation
|
|
718
615
|
toRect.top -= targetMatrix.f;
|
|
719
616
|
toRect.left -= targetMatrix.e;
|
|
720
617
|
}
|
|
721
|
-
|
|
722
618
|
target.toRect = toRect;
|
|
723
|
-
|
|
724
619
|
if (target.thisAnimationDuration) {
|
|
725
620
|
// Could also check if animatingRect is between fromRect and toRect
|
|
726
|
-
if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&
|
|
621
|
+
if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&
|
|
622
|
+
// Make sure animatingRect is on line between toRect & fromRect
|
|
727
623
|
(animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {
|
|
728
624
|
// If returning to same place as started from animation and on same axis
|
|
729
625
|
time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);
|
|
730
626
|
}
|
|
731
|
-
}
|
|
732
|
-
|
|
627
|
+
}
|
|
733
628
|
|
|
629
|
+
// if fromRect != toRect: animate
|
|
734
630
|
if (!isRectEqual(toRect, fromRect)) {
|
|
735
631
|
target.prevFromRect = fromRect;
|
|
736
632
|
target.prevToRect = toRect;
|
|
737
|
-
|
|
738
633
|
if (!time) {
|
|
739
634
|
time = _this.options.animation;
|
|
740
635
|
}
|
|
741
|
-
|
|
742
636
|
_this.animate(target, animatingRect, toRect, time);
|
|
743
637
|
}
|
|
744
|
-
|
|
745
638
|
if (time) {
|
|
746
639
|
animating = true;
|
|
747
640
|
animationTime = Math.max(animationTime, time);
|
|
@@ -757,7 +650,6 @@ function AnimationStateManager() {
|
|
|
757
650
|
}
|
|
758
651
|
});
|
|
759
652
|
clearTimeout(animationCallbackId);
|
|
760
|
-
|
|
761
653
|
if (!animating) {
|
|
762
654
|
if (typeof callback === 'function') callback();
|
|
763
655
|
} else {
|
|
@@ -765,7 +657,6 @@ function AnimationStateManager() {
|
|
|
765
657
|
if (typeof callback === 'function') callback();
|
|
766
658
|
}, animationTime);
|
|
767
659
|
}
|
|
768
|
-
|
|
769
660
|
animationStates = [];
|
|
770
661
|
},
|
|
771
662
|
animate: function animate(target, currentRect, toRect, duration) {
|
|
@@ -773,10 +664,10 @@ function AnimationStateManager() {
|
|
|
773
664
|
css(target, 'transition', '');
|
|
774
665
|
css(target, 'transform', '');
|
|
775
666
|
var elMatrix = matrix(this.el),
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
667
|
+
scaleX = elMatrix && elMatrix.a,
|
|
668
|
+
scaleY = elMatrix && elMatrix.d,
|
|
669
|
+
translateX = (currentRect.left - toRect.left) / (scaleX || 1),
|
|
670
|
+
translateY = (currentRect.top - toRect.top) / (scaleY || 1);
|
|
780
671
|
target.animatingX = !!translateX;
|
|
781
672
|
target.animatingY = !!translateY;
|
|
782
673
|
css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');
|
|
@@ -796,11 +687,9 @@ function AnimationStateManager() {
|
|
|
796
687
|
}
|
|
797
688
|
};
|
|
798
689
|
}
|
|
799
|
-
|
|
800
690
|
function repaint(target) {
|
|
801
691
|
return target.offsetWidth;
|
|
802
692
|
}
|
|
803
|
-
|
|
804
693
|
function calculateRealTime(animatingRect, fromRect, toRect, options) {
|
|
805
694
|
return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;
|
|
806
695
|
}
|
|
@@ -817,7 +706,6 @@ var PluginManager = {
|
|
|
817
706
|
plugin[option] = defaults[option];
|
|
818
707
|
}
|
|
819
708
|
}
|
|
820
|
-
|
|
821
709
|
plugins.forEach(function (p) {
|
|
822
710
|
if (p.pluginName === plugin.pluginName) {
|
|
823
711
|
throw "Sortable: Cannot mount plugin ".concat(plugin.pluginName, " more than once");
|
|
@@ -827,25 +715,22 @@ var PluginManager = {
|
|
|
827
715
|
},
|
|
828
716
|
pluginEvent: function pluginEvent(eventName, sortable, evt) {
|
|
829
717
|
var _this = this;
|
|
830
|
-
|
|
831
718
|
this.eventCanceled = false;
|
|
832
|
-
|
|
833
719
|
evt.cancel = function () {
|
|
834
720
|
_this.eventCanceled = true;
|
|
835
721
|
};
|
|
836
|
-
|
|
837
722
|
var eventNameGlobal = eventName + 'Global';
|
|
838
723
|
plugins.forEach(function (plugin) {
|
|
839
|
-
if (!sortable[plugin.pluginName]) return;
|
|
840
|
-
|
|
724
|
+
if (!sortable[plugin.pluginName]) return;
|
|
725
|
+
// Fire global events if it exists in this sortable
|
|
841
726
|
if (sortable[plugin.pluginName][eventNameGlobal]) {
|
|
842
727
|
sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({
|
|
843
728
|
sortable: sortable
|
|
844
729
|
}, evt));
|
|
845
|
-
}
|
|
846
|
-
// and plugin has event defined
|
|
847
|
-
|
|
730
|
+
}
|
|
848
731
|
|
|
732
|
+
// Only fire plugin event if plugin is enabled in this sortable,
|
|
733
|
+
// and plugin has event defined
|
|
849
734
|
if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {
|
|
850
735
|
sortable[plugin.pluginName][eventName](_objectSpread2({
|
|
851
736
|
sortable: sortable
|
|
@@ -860,15 +745,14 @@ var PluginManager = {
|
|
|
860
745
|
var initialized = new plugin(sortable, el, sortable.options);
|
|
861
746
|
initialized.sortable = sortable;
|
|
862
747
|
initialized.options = sortable.options;
|
|
863
|
-
sortable[pluginName] = initialized;
|
|
748
|
+
sortable[pluginName] = initialized;
|
|
864
749
|
|
|
750
|
+
// Add default options from plugin
|
|
865
751
|
_extends(defaults, initialized.defaults);
|
|
866
752
|
});
|
|
867
|
-
|
|
868
753
|
for (var option in sortable.options) {
|
|
869
754
|
if (!sortable.options.hasOwnProperty(option)) continue;
|
|
870
755
|
var modified = this.modifyOption(sortable, option, sortable.options[option]);
|
|
871
|
-
|
|
872
756
|
if (typeof modified !== 'undefined') {
|
|
873
757
|
sortable.options[option] = modified;
|
|
874
758
|
}
|
|
@@ -878,7 +762,6 @@ var PluginManager = {
|
|
|
878
762
|
var eventProperties = {};
|
|
879
763
|
plugins.forEach(function (plugin) {
|
|
880
764
|
if (typeof plugin.eventProperties !== 'function') return;
|
|
881
|
-
|
|
882
765
|
_extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));
|
|
883
766
|
});
|
|
884
767
|
return eventProperties;
|
|
@@ -887,8 +770,9 @@ var PluginManager = {
|
|
|
887
770
|
var modifiedValue;
|
|
888
771
|
plugins.forEach(function (plugin) {
|
|
889
772
|
// Plugin must exist on the Sortable
|
|
890
|
-
if (!sortable[plugin.pluginName]) return;
|
|
773
|
+
if (!sortable[plugin.pluginName]) return;
|
|
891
774
|
|
|
775
|
+
// If static option listener exists for this option, call in the context of the Sortable's instance of this plugin
|
|
892
776
|
if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {
|
|
893
777
|
modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);
|
|
894
778
|
}
|
|
@@ -899,25 +783,25 @@ var PluginManager = {
|
|
|
899
783
|
|
|
900
784
|
function dispatchEvent(_ref) {
|
|
901
785
|
var sortable = _ref.sortable,
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
786
|
+
rootEl = _ref.rootEl,
|
|
787
|
+
name = _ref.name,
|
|
788
|
+
targetEl = _ref.targetEl,
|
|
789
|
+
cloneEl = _ref.cloneEl,
|
|
790
|
+
toEl = _ref.toEl,
|
|
791
|
+
fromEl = _ref.fromEl,
|
|
792
|
+
oldIndex = _ref.oldIndex,
|
|
793
|
+
newIndex = _ref.newIndex,
|
|
794
|
+
oldDraggableIndex = _ref.oldDraggableIndex,
|
|
795
|
+
newDraggableIndex = _ref.newDraggableIndex,
|
|
796
|
+
originalEvent = _ref.originalEvent,
|
|
797
|
+
putSortable = _ref.putSortable,
|
|
798
|
+
extraEventProperties = _ref.extraEventProperties;
|
|
915
799
|
sortable = sortable || rootEl && rootEl[expando];
|
|
916
800
|
if (!sortable) return;
|
|
917
801
|
var evt,
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
802
|
+
options = sortable.options,
|
|
803
|
+
onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);
|
|
804
|
+
// Support for new CustomEvent feature
|
|
921
805
|
if (window.CustomEvent && !IE11OrLess && !Edge) {
|
|
922
806
|
evt = new CustomEvent(name, {
|
|
923
807
|
bubbles: true,
|
|
@@ -927,7 +811,6 @@ function dispatchEvent(_ref) {
|
|
|
927
811
|
evt = document.createEvent('Event');
|
|
928
812
|
evt.initEvent(name, true, true);
|
|
929
813
|
}
|
|
930
|
-
|
|
931
814
|
evt.to = toEl || rootEl;
|
|
932
815
|
evt.from = fromEl || rootEl;
|
|
933
816
|
evt.item = targetEl || rootEl;
|
|
@@ -938,29 +821,23 @@ function dispatchEvent(_ref) {
|
|
|
938
821
|
evt.newDraggableIndex = newDraggableIndex;
|
|
939
822
|
evt.originalEvent = originalEvent;
|
|
940
823
|
evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;
|
|
941
|
-
|
|
942
824
|
var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));
|
|
943
|
-
|
|
944
825
|
for (var option in allEventProperties) {
|
|
945
826
|
evt[option] = allEventProperties[option];
|
|
946
827
|
}
|
|
947
|
-
|
|
948
828
|
if (rootEl) {
|
|
949
829
|
rootEl.dispatchEvent(evt);
|
|
950
830
|
}
|
|
951
|
-
|
|
952
831
|
if (options[onName]) {
|
|
953
832
|
options[onName].call(sortable, evt);
|
|
954
833
|
}
|
|
955
834
|
}
|
|
956
835
|
|
|
957
836
|
var _excluded = ["evt"];
|
|
958
|
-
|
|
959
837
|
var pluginEvent = function pluginEvent(eventName, sortable) {
|
|
960
838
|
var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
839
|
+
originalEvent = _ref.evt,
|
|
840
|
+
data = _objectWithoutProperties(_ref, _excluded);
|
|
964
841
|
PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({
|
|
965
842
|
dragEl: dragEl,
|
|
966
843
|
parentEl: parentEl,
|
|
@@ -995,7 +872,6 @@ var pluginEvent = function pluginEvent(eventName, sortable) {
|
|
|
995
872
|
}
|
|
996
873
|
}, data));
|
|
997
874
|
};
|
|
998
|
-
|
|
999
875
|
function _dispatchEvent(info) {
|
|
1000
876
|
dispatchEvent(_objectSpread2({
|
|
1001
877
|
putSortable: putSortable,
|
|
@@ -1008,62 +884,61 @@ function _dispatchEvent(info) {
|
|
|
1008
884
|
newDraggableIndex: newDraggableIndex
|
|
1009
885
|
}, info));
|
|
1010
886
|
}
|
|
1011
|
-
|
|
1012
887
|
var dragEl,
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
ghostRelativeParent,
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
888
|
+
parentEl,
|
|
889
|
+
ghostEl,
|
|
890
|
+
rootEl,
|
|
891
|
+
nextEl,
|
|
892
|
+
lastDownEl,
|
|
893
|
+
cloneEl,
|
|
894
|
+
cloneHidden,
|
|
895
|
+
oldIndex,
|
|
896
|
+
newIndex,
|
|
897
|
+
oldDraggableIndex,
|
|
898
|
+
newDraggableIndex,
|
|
899
|
+
activeGroup,
|
|
900
|
+
putSortable,
|
|
901
|
+
awaitingDragStarted = false,
|
|
902
|
+
ignoreNextClick = false,
|
|
903
|
+
sortables = [],
|
|
904
|
+
tapEvt,
|
|
905
|
+
touchEvt,
|
|
906
|
+
lastDx,
|
|
907
|
+
lastDy,
|
|
908
|
+
tapDistanceLeft,
|
|
909
|
+
tapDistanceTop,
|
|
910
|
+
moved,
|
|
911
|
+
lastTarget,
|
|
912
|
+
lastDirection,
|
|
913
|
+
pastFirstInvertThresh = false,
|
|
914
|
+
isCircumstantialInvert = false,
|
|
915
|
+
targetMoveDistance,
|
|
916
|
+
// For positioning ghost absolutely
|
|
917
|
+
ghostRelativeParent,
|
|
918
|
+
ghostRelativeParentInitialScroll = [],
|
|
919
|
+
// (left, top)
|
|
920
|
+
|
|
921
|
+
_silent = false,
|
|
922
|
+
savedInputChecked = [];
|
|
1048
923
|
|
|
924
|
+
/** @const */
|
|
1049
925
|
var documentExists = typeof document !== 'undefined',
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
var elCSS = css(el),
|
|
926
|
+
PositionGhostAbsolutely = IOS,
|
|
927
|
+
CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',
|
|
928
|
+
// This will not pass for IE9, because IE9 DnD only works on anchors
|
|
929
|
+
supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),
|
|
930
|
+
supportCssPointerEvents = function () {
|
|
931
|
+
if (!documentExists) return;
|
|
932
|
+
// false when <= IE11
|
|
933
|
+
if (IE11OrLess) {
|
|
934
|
+
return false;
|
|
935
|
+
}
|
|
936
|
+
var el = document.createElement('x');
|
|
937
|
+
el.style.cssText = 'pointer-events:auto';
|
|
938
|
+
return el.style.pointerEvents === 'auto';
|
|
939
|
+
}(),
|
|
940
|
+
_detectDirection = function _detectDirection(el, options) {
|
|
941
|
+
var elCSS = css(el),
|
|
1067
942
|
elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),
|
|
1068
943
|
child1 = getChild(el, 0, options),
|
|
1069
944
|
child2 = getChild(el, 1, options),
|
|
@@ -1071,103 +946,93 @@ supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in
|
|
|
1071
946
|
secondChildCSS = child2 && css(child2),
|
|
1072
947
|
firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,
|
|
1073
948
|
secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';
|
|
1089
|
-
},
|
|
1090
|
-
_dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {
|
|
1091
|
-
var dragElS1Opp = vertical ? dragRect.left : dragRect.top,
|
|
949
|
+
if (elCSS.display === 'flex') {
|
|
950
|
+
return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';
|
|
951
|
+
}
|
|
952
|
+
if (elCSS.display === 'grid') {
|
|
953
|
+
return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';
|
|
954
|
+
}
|
|
955
|
+
if (child1 && firstChildCSS["float"] && firstChildCSS["float"] !== 'none') {
|
|
956
|
+
var touchingSideChild2 = firstChildCSS["float"] === 'left' ? 'left' : 'right';
|
|
957
|
+
return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';
|
|
958
|
+
}
|
|
959
|
+
return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';
|
|
960
|
+
},
|
|
961
|
+
_dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {
|
|
962
|
+
var dragElS1Opp = vertical ? dragRect.left : dragRect.top,
|
|
1092
963
|
dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,
|
|
1093
964
|
dragElOppLength = vertical ? dragRect.width : dragRect.height,
|
|
1094
965
|
targetS1Opp = vertical ? targetRect.left : targetRect.top,
|
|
1095
966
|
targetS2Opp = vertical ? targetRect.right : targetRect.bottom,
|
|
1096
967
|
targetOppLength = vertical ? targetRect.width : targetRect.height;
|
|
1097
|
-
|
|
1098
|
-
},
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
var rect = getRect(sortable),
|
|
968
|
+
return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;
|
|
969
|
+
},
|
|
970
|
+
/**
|
|
971
|
+
* Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.
|
|
972
|
+
* @param {Number} x X position
|
|
973
|
+
* @param {Number} y Y position
|
|
974
|
+
* @return {HTMLElement} Element of the first found nearest Sortable
|
|
975
|
+
*/
|
|
976
|
+
_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {
|
|
977
|
+
var ret;
|
|
978
|
+
sortables.some(function (sortable) {
|
|
979
|
+
var threshold = sortable[expando].options.emptyInsertThreshold;
|
|
980
|
+
if (!threshold || lastChild(sortable)) return;
|
|
981
|
+
var rect = getRect(sortable),
|
|
1112
982
|
insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,
|
|
1113
983
|
insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
return ret = sortable;
|
|
1117
|
-
}
|
|
1118
|
-
});
|
|
1119
|
-
return ret;
|
|
1120
|
-
},
|
|
1121
|
-
_prepareGroup = function _prepareGroup(options) {
|
|
1122
|
-
function toFn(value, pull) {
|
|
1123
|
-
return function (to, from, dragEl, evt) {
|
|
1124
|
-
var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;
|
|
1125
|
-
|
|
1126
|
-
if (value == null && (pull || sameGroup)) {
|
|
1127
|
-
// Default pull value
|
|
1128
|
-
// Default pull and put value if same group
|
|
1129
|
-
return true;
|
|
1130
|
-
} else if (value == null || value === false) {
|
|
1131
|
-
return false;
|
|
1132
|
-
} else if (pull && value === 'clone') {
|
|
1133
|
-
return value;
|
|
1134
|
-
} else if (typeof value === 'function') {
|
|
1135
|
-
return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);
|
|
1136
|
-
} else {
|
|
1137
|
-
var otherGroup = (pull ? to : from).options.group.name;
|
|
1138
|
-
return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;
|
|
984
|
+
if (insideHorizontally && insideVertically) {
|
|
985
|
+
return ret = sortable;
|
|
1139
986
|
}
|
|
1140
|
-
};
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
}
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
}
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
987
|
+
});
|
|
988
|
+
return ret;
|
|
989
|
+
},
|
|
990
|
+
_prepareGroup = function _prepareGroup(options) {
|
|
991
|
+
function toFn(value, pull) {
|
|
992
|
+
return function (to, from, dragEl, evt) {
|
|
993
|
+
var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;
|
|
994
|
+
if (value == null && (pull || sameGroup)) {
|
|
995
|
+
// Default pull value
|
|
996
|
+
// Default pull and put value if same group
|
|
997
|
+
return true;
|
|
998
|
+
} else if (value == null || value === false) {
|
|
999
|
+
return false;
|
|
1000
|
+
} else if (pull && value === 'clone') {
|
|
1001
|
+
return value;
|
|
1002
|
+
} else if (typeof value === 'function') {
|
|
1003
|
+
return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);
|
|
1004
|
+
} else {
|
|
1005
|
+
var otherGroup = (pull ? to : from).options.group.name;
|
|
1006
|
+
return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;
|
|
1007
|
+
}
|
|
1008
|
+
};
|
|
1009
|
+
}
|
|
1010
|
+
var group = {};
|
|
1011
|
+
var originalGroup = options.group;
|
|
1012
|
+
if (!originalGroup || _typeof(originalGroup) != 'object') {
|
|
1013
|
+
originalGroup = {
|
|
1014
|
+
name: originalGroup
|
|
1015
|
+
};
|
|
1016
|
+
}
|
|
1017
|
+
group.name = originalGroup.name;
|
|
1018
|
+
group.checkPull = toFn(originalGroup.pull, true);
|
|
1019
|
+
group.checkPut = toFn(originalGroup.put);
|
|
1020
|
+
group.revertClone = originalGroup.revertClone;
|
|
1021
|
+
options.group = group;
|
|
1022
|
+
},
|
|
1023
|
+
_hideGhostForTarget = function _hideGhostForTarget() {
|
|
1024
|
+
if (!supportCssPointerEvents && ghostEl) {
|
|
1025
|
+
css(ghostEl, 'display', 'none');
|
|
1026
|
+
}
|
|
1027
|
+
},
|
|
1028
|
+
_unhideGhostForTarget = function _unhideGhostForTarget() {
|
|
1029
|
+
if (!supportCssPointerEvents && ghostEl) {
|
|
1030
|
+
css(ghostEl, 'display', '');
|
|
1031
|
+
}
|
|
1032
|
+
};
|
|
1169
1033
|
|
|
1170
|
-
if
|
|
1034
|
+
// #1184 fix - Prevent click event on fallback if dragged but item not changed position
|
|
1035
|
+
if (documentExists && !ChromeForAndroid) {
|
|
1171
1036
|
document.addEventListener('click', function (evt) {
|
|
1172
1037
|
if (ignoreNextClick) {
|
|
1173
1038
|
evt.preventDefault();
|
|
@@ -1178,53 +1043,44 @@ if (documentExists) {
|
|
|
1178
1043
|
}
|
|
1179
1044
|
}, true);
|
|
1180
1045
|
}
|
|
1181
|
-
|
|
1182
1046
|
var nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {
|
|
1183
1047
|
if (dragEl) {
|
|
1184
1048
|
evt = evt.touches ? evt.touches[0] : evt;
|
|
1185
|
-
|
|
1186
1049
|
var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);
|
|
1187
|
-
|
|
1188
1050
|
if (nearest) {
|
|
1189
1051
|
// Create imitation event
|
|
1190
1052
|
var event = {};
|
|
1191
|
-
|
|
1192
1053
|
for (var i in evt) {
|
|
1193
1054
|
if (evt.hasOwnProperty(i)) {
|
|
1194
1055
|
event[i] = evt[i];
|
|
1195
1056
|
}
|
|
1196
1057
|
}
|
|
1197
|
-
|
|
1198
1058
|
event.target = event.rootEl = nearest;
|
|
1199
1059
|
event.preventDefault = void 0;
|
|
1200
1060
|
event.stopPropagation = void 0;
|
|
1201
|
-
|
|
1202
1061
|
nearest[expando]._onDragOver(event);
|
|
1203
1062
|
}
|
|
1204
1063
|
}
|
|
1205
1064
|
};
|
|
1206
|
-
|
|
1207
1065
|
var _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {
|
|
1208
1066
|
if (dragEl) {
|
|
1209
1067
|
dragEl.parentNode[expando]._isOutsideThisEl(evt.target);
|
|
1210
1068
|
}
|
|
1211
1069
|
};
|
|
1212
|
-
/**
|
|
1213
|
-
* @class Sortable
|
|
1214
|
-
* @param {HTMLElement} el
|
|
1215
|
-
* @param {Object} [options]
|
|
1216
|
-
*/
|
|
1217
|
-
|
|
1218
1070
|
|
|
1071
|
+
/**
|
|
1072
|
+
* @class Sortable
|
|
1073
|
+
* @param {HTMLElement} el
|
|
1074
|
+
* @param {Object} [options]
|
|
1075
|
+
*/
|
|
1219
1076
|
function Sortable(el, options) {
|
|
1220
1077
|
if (!(el && el.nodeType && el.nodeType === 1)) {
|
|
1221
1078
|
throw "Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(el));
|
|
1222
1079
|
}
|
|
1223
|
-
|
|
1224
1080
|
this.el = el; // root element
|
|
1081
|
+
this.options = options = _extends({}, options);
|
|
1225
1082
|
|
|
1226
|
-
|
|
1227
|
-
|
|
1083
|
+
// Export instance
|
|
1228
1084
|
el[expando] = this;
|
|
1229
1085
|
var defaults = {
|
|
1230
1086
|
group: null,
|
|
@@ -1271,52 +1127,48 @@ function Sortable(el, options) {
|
|
|
1271
1127
|
supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,
|
|
1272
1128
|
emptyInsertThreshold: 5
|
|
1273
1129
|
};
|
|
1274
|
-
PluginManager.initializePlugins(this, el, defaults);
|
|
1130
|
+
PluginManager.initializePlugins(this, el, defaults);
|
|
1275
1131
|
|
|
1132
|
+
// Set default options
|
|
1276
1133
|
for (var name in defaults) {
|
|
1277
1134
|
!(name in options) && (options[name] = defaults[name]);
|
|
1278
1135
|
}
|
|
1136
|
+
_prepareGroup(options);
|
|
1279
1137
|
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1138
|
+
// Bind all private methods
|
|
1283
1139
|
for (var fn in this) {
|
|
1284
1140
|
if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {
|
|
1285
1141
|
this[fn] = this[fn].bind(this);
|
|
1286
1142
|
}
|
|
1287
|
-
}
|
|
1288
|
-
|
|
1143
|
+
}
|
|
1289
1144
|
|
|
1145
|
+
// Setup drag mode
|
|
1290
1146
|
this.nativeDraggable = options.forceFallback ? false : supportDraggable;
|
|
1291
|
-
|
|
1292
1147
|
if (this.nativeDraggable) {
|
|
1293
1148
|
// Touch start threshold cannot be greater than the native dragstart threshold
|
|
1294
1149
|
this.options.touchStartThreshold = 1;
|
|
1295
|
-
}
|
|
1296
|
-
|
|
1150
|
+
}
|
|
1297
1151
|
|
|
1152
|
+
// Bind events
|
|
1298
1153
|
if (options.supportPointer) {
|
|
1299
1154
|
on(el, 'pointerdown', this._onTapStart);
|
|
1300
1155
|
} else {
|
|
1301
1156
|
on(el, 'mousedown', this._onTapStart);
|
|
1302
1157
|
on(el, 'touchstart', this._onTapStart);
|
|
1303
1158
|
}
|
|
1304
|
-
|
|
1305
1159
|
if (this.nativeDraggable) {
|
|
1306
1160
|
on(el, 'dragover', this);
|
|
1307
1161
|
on(el, 'dragenter', this);
|
|
1308
1162
|
}
|
|
1163
|
+
sortables.push(this.el);
|
|
1309
1164
|
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager
|
|
1165
|
+
// Restore sorting
|
|
1166
|
+
options.store && options.store.get && this.sort(options.store.get(this) || []);
|
|
1313
1167
|
|
|
1168
|
+
// Add animation state manager
|
|
1314
1169
|
_extends(this, AnimationStateManager());
|
|
1315
1170
|
}
|
|
1316
|
-
|
|
1317
|
-
Sortable.prototype =
|
|
1318
|
-
/** @lends Sortable.prototype */
|
|
1319
|
-
{
|
|
1171
|
+
Sortable.prototype = /** @lends Sortable.prototype */{
|
|
1320
1172
|
constructor: Sortable,
|
|
1321
1173
|
_isOutsideThisEl: function _isOutsideThisEl(target) {
|
|
1322
1174
|
if (!this.el.contains(target) && target !== this.el) {
|
|
@@ -1326,57 +1178,50 @@ Sortable.prototype =
|
|
|
1326
1178
|
_getDirection: function _getDirection(evt, target) {
|
|
1327
1179
|
return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;
|
|
1328
1180
|
},
|
|
1329
|
-
_onTapStart: function _onTapStart(
|
|
1330
|
-
/** Event|TouchEvent */
|
|
1331
|
-
evt) {
|
|
1181
|
+
_onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {
|
|
1332
1182
|
if (!evt.cancelable) return;
|
|
1333
|
-
|
|
1334
1183
|
var _this = this,
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1184
|
+
el = this.el,
|
|
1185
|
+
options = this.options,
|
|
1186
|
+
preventOnFilter = options.preventOnFilter,
|
|
1187
|
+
type = evt.type,
|
|
1188
|
+
touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,
|
|
1189
|
+
target = (touch || evt).target,
|
|
1190
|
+
originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,
|
|
1191
|
+
filter = options.filter;
|
|
1192
|
+
_saveInputCheckedState(el);
|
|
1193
|
+
|
|
1194
|
+
// Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.
|
|
1347
1195
|
if (dragEl) {
|
|
1348
1196
|
return;
|
|
1349
1197
|
}
|
|
1350
|
-
|
|
1351
1198
|
if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {
|
|
1352
1199
|
return; // only left button and enabled
|
|
1353
|
-
}
|
|
1354
|
-
|
|
1200
|
+
}
|
|
1355
1201
|
|
|
1202
|
+
// cancel dnd if original target is content editable
|
|
1356
1203
|
if (originalTarget.isContentEditable) {
|
|
1357
1204
|
return;
|
|
1358
|
-
}
|
|
1359
|
-
|
|
1205
|
+
}
|
|
1360
1206
|
|
|
1207
|
+
// Safari ignores further event handling after mousedown
|
|
1361
1208
|
if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {
|
|
1362
1209
|
return;
|
|
1363
1210
|
}
|
|
1364
|
-
|
|
1365
1211
|
target = closest(target, options.draggable, el, false);
|
|
1366
|
-
|
|
1367
1212
|
if (target && target.animated) {
|
|
1368
1213
|
return;
|
|
1369
1214
|
}
|
|
1370
|
-
|
|
1371
1215
|
if (lastDownEl === target) {
|
|
1372
1216
|
// Ignoring duplicate `down`
|
|
1373
1217
|
return;
|
|
1374
|
-
}
|
|
1375
|
-
|
|
1218
|
+
}
|
|
1376
1219
|
|
|
1220
|
+
// Get the index of the dragged element within its parent
|
|
1377
1221
|
oldIndex = index(target);
|
|
1378
|
-
oldDraggableIndex = index(target, options.draggable);
|
|
1222
|
+
oldDraggableIndex = index(target, options.draggable);
|
|
1379
1223
|
|
|
1224
|
+
// Check filter
|
|
1380
1225
|
if (typeof filter === 'function') {
|
|
1381
1226
|
if (filter.call(this, evt, target, this)) {
|
|
1382
1227
|
_dispatchEvent({
|
|
@@ -1387,7 +1232,6 @@ Sortable.prototype =
|
|
|
1387
1232
|
toEl: el,
|
|
1388
1233
|
fromEl: el
|
|
1389
1234
|
});
|
|
1390
|
-
|
|
1391
1235
|
pluginEvent('filter', _this, {
|
|
1392
1236
|
evt: evt
|
|
1393
1237
|
});
|
|
@@ -1397,7 +1241,6 @@ Sortable.prototype =
|
|
|
1397
1241
|
} else if (filter) {
|
|
1398
1242
|
filter = filter.split(',').some(function (criteria) {
|
|
1399
1243
|
criteria = closest(originalTarget, criteria.trim(), el, false);
|
|
1400
|
-
|
|
1401
1244
|
if (criteria) {
|
|
1402
1245
|
_dispatchEvent({
|
|
1403
1246
|
sortable: _this,
|
|
@@ -1407,40 +1250,30 @@ Sortable.prototype =
|
|
|
1407
1250
|
fromEl: el,
|
|
1408
1251
|
toEl: el
|
|
1409
1252
|
});
|
|
1410
|
-
|
|
1411
1253
|
pluginEvent('filter', _this, {
|
|
1412
1254
|
evt: evt
|
|
1413
1255
|
});
|
|
1414
1256
|
return true;
|
|
1415
1257
|
}
|
|
1416
1258
|
});
|
|
1417
|
-
|
|
1418
1259
|
if (filter) {
|
|
1419
1260
|
preventOnFilter && evt.cancelable && evt.preventDefault();
|
|
1420
1261
|
return; // cancel dnd
|
|
1421
1262
|
}
|
|
1422
1263
|
}
|
|
1423
|
-
|
|
1424
1264
|
if (options.handle && !closest(originalTarget, options.handle, el, false)) {
|
|
1425
1265
|
return;
|
|
1426
|
-
}
|
|
1427
|
-
|
|
1266
|
+
}
|
|
1428
1267
|
|
|
1268
|
+
// Prepare `dragstart`
|
|
1429
1269
|
this._prepareDragStart(evt, touch, target);
|
|
1430
1270
|
},
|
|
1431
|
-
_prepareDragStart: function _prepareDragStart(
|
|
1432
|
-
/** Event */
|
|
1433
|
-
evt,
|
|
1434
|
-
/** Touch */
|
|
1435
|
-
touch,
|
|
1436
|
-
/** HTMLElement */
|
|
1437
|
-
target) {
|
|
1271
|
+
_prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {
|
|
1438
1272
|
var _this = this,
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1273
|
+
el = _this.el,
|
|
1274
|
+
options = _this.options,
|
|
1275
|
+
ownerDocument = el.ownerDocument,
|
|
1276
|
+
dragStartFn;
|
|
1444
1277
|
if (target && !dragEl && target.parentNode === el) {
|
|
1445
1278
|
var dragRect = getRect(target);
|
|
1446
1279
|
rootEl = el;
|
|
@@ -1460,41 +1293,36 @@ Sortable.prototype =
|
|
|
1460
1293
|
this._lastX = (touch || evt).clientX;
|
|
1461
1294
|
this._lastY = (touch || evt).clientY;
|
|
1462
1295
|
dragEl.style['will-change'] = 'all';
|
|
1463
|
-
|
|
1464
1296
|
dragStartFn = function dragStartFn() {
|
|
1465
1297
|
pluginEvent('delayEnded', _this, {
|
|
1466
1298
|
evt: evt
|
|
1467
1299
|
});
|
|
1468
|
-
|
|
1469
1300
|
if (Sortable.eventCanceled) {
|
|
1470
1301
|
_this._onDrop();
|
|
1471
|
-
|
|
1472
1302
|
return;
|
|
1473
|
-
}
|
|
1303
|
+
}
|
|
1304
|
+
// Delayed drag has been triggered
|
|
1474
1305
|
// we can re-enable the events: touchmove/mousemove
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
1306
|
_this._disableDelayedDragEvents();
|
|
1478
|
-
|
|
1479
1307
|
if (!FireFox && _this.nativeDraggable) {
|
|
1480
1308
|
dragEl.draggable = true;
|
|
1481
|
-
}
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
_this._triggerDragStart(evt, touch); // Drag start event
|
|
1309
|
+
}
|
|
1485
1310
|
|
|
1311
|
+
// Bind the events: dragstart/dragend
|
|
1312
|
+
_this._triggerDragStart(evt, touch);
|
|
1486
1313
|
|
|
1314
|
+
// Drag start event
|
|
1487
1315
|
_dispatchEvent({
|
|
1488
1316
|
sortable: _this,
|
|
1489
1317
|
name: 'choose',
|
|
1490
1318
|
originalEvent: evt
|
|
1491
|
-
});
|
|
1492
|
-
|
|
1319
|
+
});
|
|
1493
1320
|
|
|
1321
|
+
// Chosen item
|
|
1494
1322
|
toggleClass(dragEl, options.chosenClass, true);
|
|
1495
|
-
};
|
|
1496
|
-
|
|
1323
|
+
};
|
|
1497
1324
|
|
|
1325
|
+
// Disable "draggable"
|
|
1498
1326
|
options.ignore.split(',').forEach(function (criteria) {
|
|
1499
1327
|
find(dragEl, criteria.trim(), _disableDraggable);
|
|
1500
1328
|
});
|
|
@@ -1503,27 +1331,26 @@ Sortable.prototype =
|
|
|
1503
1331
|
on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);
|
|
1504
1332
|
on(ownerDocument, 'mouseup', _this._onDrop);
|
|
1505
1333
|
on(ownerDocument, 'touchend', _this._onDrop);
|
|
1506
|
-
on(ownerDocument, 'touchcancel', _this._onDrop);
|
|
1334
|
+
on(ownerDocument, 'touchcancel', _this._onDrop);
|
|
1507
1335
|
|
|
1336
|
+
// Make dragEl draggable (must be before delay for FireFox)
|
|
1508
1337
|
if (FireFox && this.nativeDraggable) {
|
|
1509
1338
|
this.options.touchStartThreshold = 4;
|
|
1510
1339
|
dragEl.draggable = true;
|
|
1511
1340
|
}
|
|
1512
|
-
|
|
1513
1341
|
pluginEvent('delayStart', this, {
|
|
1514
1342
|
evt: evt
|
|
1515
|
-
});
|
|
1343
|
+
});
|
|
1516
1344
|
|
|
1345
|
+
// Delay is impossible for native DnD in Edge or IE
|
|
1517
1346
|
if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {
|
|
1518
1347
|
if (Sortable.eventCanceled) {
|
|
1519
1348
|
this._onDrop();
|
|
1520
|
-
|
|
1521
1349
|
return;
|
|
1522
|
-
}
|
|
1350
|
+
}
|
|
1351
|
+
// If the user moves the pointer or let go the click or touch
|
|
1523
1352
|
// before the delay has been reached:
|
|
1524
1353
|
// disable the delayed drag
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
1354
|
on(ownerDocument, 'mouseup', _this._disableDelayedDrag);
|
|
1528
1355
|
on(ownerDocument, 'touchend', _this._disableDelayedDrag);
|
|
1529
1356
|
on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);
|
|
@@ -1536,11 +1363,8 @@ Sortable.prototype =
|
|
|
1536
1363
|
}
|
|
1537
1364
|
}
|
|
1538
1365
|
},
|
|
1539
|
-
_delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(
|
|
1540
|
-
/** TouchEvent|PointerEvent **/
|
|
1541
|
-
e) {
|
|
1366
|
+
_delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {
|
|
1542
1367
|
var touch = e.touches ? e.touches[0] : e;
|
|
1543
|
-
|
|
1544
1368
|
if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {
|
|
1545
1369
|
this._disableDelayedDrag();
|
|
1546
1370
|
}
|
|
@@ -1548,7 +1372,6 @@ Sortable.prototype =
|
|
|
1548
1372
|
_disableDelayedDrag: function _disableDelayedDrag() {
|
|
1549
1373
|
dragEl && _disableDraggable(dragEl);
|
|
1550
1374
|
clearTimeout(this._dragStartTimer);
|
|
1551
|
-
|
|
1552
1375
|
this._disableDelayedDragEvents();
|
|
1553
1376
|
},
|
|
1554
1377
|
_disableDelayedDragEvents: function _disableDelayedDragEvents() {
|
|
@@ -1560,13 +1383,8 @@ Sortable.prototype =
|
|
|
1560
1383
|
off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);
|
|
1561
1384
|
off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);
|
|
1562
1385
|
},
|
|
1563
|
-
_triggerDragStart: function _triggerDragStart(
|
|
1564
|
-
/** Event */
|
|
1565
|
-
evt,
|
|
1566
|
-
/** Touch */
|
|
1567
|
-
touch) {
|
|
1386
|
+
_triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {
|
|
1568
1387
|
touch = touch || evt.pointerType == 'touch' && evt;
|
|
1569
|
-
|
|
1570
1388
|
if (!this.nativeDraggable || touch) {
|
|
1571
1389
|
if (this.options.supportPointer) {
|
|
1572
1390
|
on(document, 'pointermove', this._onTouchMove);
|
|
@@ -1579,7 +1397,6 @@ Sortable.prototype =
|
|
|
1579
1397
|
on(dragEl, 'dragend', this);
|
|
1580
1398
|
on(rootEl, 'dragstart', this._onDragStart);
|
|
1581
1399
|
}
|
|
1582
|
-
|
|
1583
1400
|
try {
|
|
1584
1401
|
if (document.selection) {
|
|
1585
1402
|
// Timeout neccessary for IE9
|
|
@@ -1592,25 +1409,23 @@ Sortable.prototype =
|
|
|
1592
1409
|
} catch (err) {}
|
|
1593
1410
|
},
|
|
1594
1411
|
_dragStarted: function _dragStarted(fallback, evt) {
|
|
1595
|
-
|
|
1596
1412
|
awaitingDragStarted = false;
|
|
1597
|
-
|
|
1598
1413
|
if (rootEl && dragEl) {
|
|
1599
1414
|
pluginEvent('dragStarted', this, {
|
|
1600
1415
|
evt: evt
|
|
1601
1416
|
});
|
|
1602
|
-
|
|
1603
1417
|
if (this.nativeDraggable) {
|
|
1604
1418
|
on(document, 'dragover', _checkOutsideTargetEl);
|
|
1605
1419
|
}
|
|
1420
|
+
var options = this.options;
|
|
1606
1421
|
|
|
1607
|
-
|
|
1608
|
-
|
|
1422
|
+
// Apply effect
|
|
1609
1423
|
!fallback && toggleClass(dragEl, options.dragClass, false);
|
|
1610
1424
|
toggleClass(dragEl, options.ghostClass, true);
|
|
1611
1425
|
Sortable.active = this;
|
|
1612
|
-
fallback && this._appendGhost();
|
|
1426
|
+
fallback && this._appendGhost();
|
|
1613
1427
|
|
|
1428
|
+
// Drag start event
|
|
1614
1429
|
_dispatchEvent({
|
|
1615
1430
|
sortable: this,
|
|
1616
1431
|
name: 'start',
|
|
@@ -1624,20 +1439,15 @@ Sortable.prototype =
|
|
|
1624
1439
|
if (touchEvt) {
|
|
1625
1440
|
this._lastX = touchEvt.clientX;
|
|
1626
1441
|
this._lastY = touchEvt.clientY;
|
|
1627
|
-
|
|
1628
1442
|
_hideGhostForTarget();
|
|
1629
|
-
|
|
1630
1443
|
var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);
|
|
1631
1444
|
var parent = target;
|
|
1632
|
-
|
|
1633
1445
|
while (target && target.shadowRoot) {
|
|
1634
1446
|
target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);
|
|
1635
1447
|
if (target === parent) break;
|
|
1636
1448
|
parent = target;
|
|
1637
1449
|
}
|
|
1638
|
-
|
|
1639
1450
|
dragEl.parentNode[expando]._isOutsideThisEl(target);
|
|
1640
|
-
|
|
1641
1451
|
if (parent) {
|
|
1642
1452
|
do {
|
|
1643
1453
|
if (parent[expando]) {
|
|
@@ -1648,44 +1458,37 @@ Sortable.prototype =
|
|
|
1648
1458
|
target: target,
|
|
1649
1459
|
rootEl: parent
|
|
1650
1460
|
});
|
|
1651
|
-
|
|
1652
1461
|
if (inserted && !this.options.dragoverBubble) {
|
|
1653
1462
|
break;
|
|
1654
1463
|
}
|
|
1655
1464
|
}
|
|
1656
|
-
|
|
1657
1465
|
target = parent; // store last element
|
|
1658
1466
|
}
|
|
1659
|
-
/* jshint boss:true */
|
|
1660
|
-
while (parent = parent.parentNode);
|
|
1467
|
+
/* jshint boss:true */ while (parent = parent.parentNode);
|
|
1661
1468
|
}
|
|
1662
|
-
|
|
1663
1469
|
_unhideGhostForTarget();
|
|
1664
1470
|
}
|
|
1665
1471
|
},
|
|
1666
|
-
_onTouchMove: function _onTouchMove(
|
|
1667
|
-
/**TouchEvent*/
|
|
1668
|
-
evt) {
|
|
1472
|
+
_onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {
|
|
1669
1473
|
if (tapEvt) {
|
|
1670
1474
|
var options = this.options,
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1475
|
+
fallbackTolerance = options.fallbackTolerance,
|
|
1476
|
+
fallbackOffset = options.fallbackOffset,
|
|
1477
|
+
touch = evt.touches ? evt.touches[0] : evt,
|
|
1478
|
+
ghostMatrix = ghostEl && matrix(ghostEl, true),
|
|
1479
|
+
scaleX = ghostEl && ghostMatrix && ghostMatrix.a,
|
|
1480
|
+
scaleY = ghostEl && ghostMatrix && ghostMatrix.d,
|
|
1481
|
+
relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),
|
|
1482
|
+
dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),
|
|
1483
|
+
dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);
|
|
1484
|
+
|
|
1485
|
+
// only set the status to dragging, when we are actually dragging
|
|
1681
1486
|
if (!Sortable.active && !awaitingDragStarted) {
|
|
1682
1487
|
if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {
|
|
1683
1488
|
return;
|
|
1684
1489
|
}
|
|
1685
|
-
|
|
1686
1490
|
this._onDragStart(evt, true);
|
|
1687
1491
|
}
|
|
1688
|
-
|
|
1689
1492
|
if (ghostEl) {
|
|
1690
1493
|
if (ghostMatrix) {
|
|
1691
1494
|
ghostMatrix.e += dx - (lastDx || 0);
|
|
@@ -1700,7 +1503,6 @@ Sortable.prototype =
|
|
|
1700
1503
|
f: dy
|
|
1701
1504
|
};
|
|
1702
1505
|
}
|
|
1703
|
-
|
|
1704
1506
|
var cssMatrix = "matrix(".concat(ghostMatrix.a, ",").concat(ghostMatrix.b, ",").concat(ghostMatrix.c, ",").concat(ghostMatrix.d, ",").concat(ghostMatrix.e, ",").concat(ghostMatrix.f, ")");
|
|
1705
1507
|
css(ghostEl, 'webkitTransform', cssMatrix);
|
|
1706
1508
|
css(ghostEl, 'mozTransform', cssMatrix);
|
|
@@ -1710,7 +1512,6 @@ Sortable.prototype =
|
|
|
1710
1512
|
lastDy = dy;
|
|
1711
1513
|
touchEvt = touch;
|
|
1712
1514
|
}
|
|
1713
|
-
|
|
1714
1515
|
evt.cancelable && evt.preventDefault();
|
|
1715
1516
|
}
|
|
1716
1517
|
},
|
|
@@ -1719,17 +1520,16 @@ Sortable.prototype =
|
|
|
1719
1520
|
// Not being adjusted for
|
|
1720
1521
|
if (!ghostEl) {
|
|
1721
1522
|
var container = this.options.fallbackOnBody ? document.body : rootEl,
|
|
1722
|
-
|
|
1723
|
-
|
|
1523
|
+
rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),
|
|
1524
|
+
options = this.options;
|
|
1724
1525
|
|
|
1526
|
+
// Position absolutely
|
|
1725
1527
|
if (PositionGhostAbsolutely) {
|
|
1726
1528
|
// Get relatively positioned parent
|
|
1727
1529
|
ghostRelativeParent = container;
|
|
1728
|
-
|
|
1729
1530
|
while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {
|
|
1730
1531
|
ghostRelativeParent = ghostRelativeParent.parentNode;
|
|
1731
1532
|
}
|
|
1732
|
-
|
|
1733
1533
|
if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {
|
|
1734
1534
|
if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();
|
|
1735
1535
|
rect.top += ghostRelativeParent.scrollTop;
|
|
@@ -1737,10 +1537,8 @@ Sortable.prototype =
|
|
|
1737
1537
|
} else {
|
|
1738
1538
|
ghostRelativeParent = getWindowScrollingElement();
|
|
1739
1539
|
}
|
|
1740
|
-
|
|
1741
1540
|
ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);
|
|
1742
1541
|
}
|
|
1743
|
-
|
|
1744
1542
|
ghostEl = dragEl.cloneNode(true);
|
|
1745
1543
|
toggleClass(ghostEl, options.ghostClass, false);
|
|
1746
1544
|
toggleClass(ghostEl, options.fallbackClass, true);
|
|
@@ -1758,61 +1556,50 @@ Sortable.prototype =
|
|
|
1758
1556
|
css(ghostEl, 'zIndex', '100000');
|
|
1759
1557
|
css(ghostEl, 'pointerEvents', 'none');
|
|
1760
1558
|
Sortable.ghost = ghostEl;
|
|
1761
|
-
container.appendChild(ghostEl);
|
|
1559
|
+
container.appendChild(ghostEl);
|
|
1762
1560
|
|
|
1561
|
+
// Set transform-origin
|
|
1763
1562
|
css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');
|
|
1764
1563
|
}
|
|
1765
1564
|
},
|
|
1766
|
-
_onDragStart: function _onDragStart(
|
|
1767
|
-
/**Event*/
|
|
1768
|
-
evt,
|
|
1769
|
-
/**boolean*/
|
|
1770
|
-
fallback) {
|
|
1565
|
+
_onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {
|
|
1771
1566
|
var _this = this;
|
|
1772
|
-
|
|
1773
1567
|
var dataTransfer = evt.dataTransfer;
|
|
1774
1568
|
var options = _this.options;
|
|
1775
1569
|
pluginEvent('dragStart', this, {
|
|
1776
1570
|
evt: evt
|
|
1777
1571
|
});
|
|
1778
|
-
|
|
1779
1572
|
if (Sortable.eventCanceled) {
|
|
1780
1573
|
this._onDrop();
|
|
1781
|
-
|
|
1782
1574
|
return;
|
|
1783
1575
|
}
|
|
1784
|
-
|
|
1785
1576
|
pluginEvent('setupClone', this);
|
|
1786
|
-
|
|
1787
1577
|
if (!Sortable.eventCanceled) {
|
|
1788
1578
|
cloneEl = clone(dragEl);
|
|
1579
|
+
cloneEl.removeAttribute("id");
|
|
1789
1580
|
cloneEl.draggable = false;
|
|
1790
1581
|
cloneEl.style['will-change'] = '';
|
|
1791
|
-
|
|
1792
1582
|
this._hideClone();
|
|
1793
|
-
|
|
1794
1583
|
toggleClass(cloneEl, this.options.chosenClass, false);
|
|
1795
1584
|
Sortable.clone = cloneEl;
|
|
1796
|
-
}
|
|
1797
|
-
|
|
1585
|
+
}
|
|
1798
1586
|
|
|
1587
|
+
// #1143: IFrame support workaround
|
|
1799
1588
|
_this.cloneId = _nextTick(function () {
|
|
1800
1589
|
pluginEvent('clone', _this);
|
|
1801
1590
|
if (Sortable.eventCanceled) return;
|
|
1802
|
-
|
|
1803
1591
|
if (!_this.options.removeCloneOnHide) {
|
|
1804
1592
|
rootEl.insertBefore(cloneEl, dragEl);
|
|
1805
1593
|
}
|
|
1806
|
-
|
|
1807
1594
|
_this._hideClone();
|
|
1808
|
-
|
|
1809
1595
|
_dispatchEvent({
|
|
1810
1596
|
sortable: _this,
|
|
1811
1597
|
name: 'clone'
|
|
1812
1598
|
});
|
|
1813
1599
|
});
|
|
1814
|
-
!fallback && toggleClass(dragEl, options.dragClass, true);
|
|
1600
|
+
!fallback && toggleClass(dragEl, options.dragClass, true);
|
|
1815
1601
|
|
|
1602
|
+
// Set proper drop events
|
|
1816
1603
|
if (fallback) {
|
|
1817
1604
|
ignoreNextClick = true;
|
|
1818
1605
|
_this._loopId = setInterval(_this._emulateDragOver, 50);
|
|
@@ -1821,47 +1608,40 @@ Sortable.prototype =
|
|
|
1821
1608
|
off(document, 'mouseup', _this._onDrop);
|
|
1822
1609
|
off(document, 'touchend', _this._onDrop);
|
|
1823
1610
|
off(document, 'touchcancel', _this._onDrop);
|
|
1824
|
-
|
|
1825
1611
|
if (dataTransfer) {
|
|
1826
1612
|
dataTransfer.effectAllowed = 'move';
|
|
1827
1613
|
options.setData && options.setData.call(_this, dataTransfer, dragEl);
|
|
1828
1614
|
}
|
|
1615
|
+
on(document, 'drop', _this);
|
|
1829
1616
|
|
|
1830
|
-
|
|
1831
|
-
|
|
1617
|
+
// #1276 fix:
|
|
1832
1618
|
css(dragEl, 'transform', 'translateZ(0)');
|
|
1833
1619
|
}
|
|
1834
|
-
|
|
1835
1620
|
awaitingDragStarted = true;
|
|
1836
1621
|
_this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));
|
|
1837
1622
|
on(document, 'selectstart', _this);
|
|
1838
1623
|
moved = true;
|
|
1839
|
-
|
|
1840
1624
|
if (Safari) {
|
|
1841
1625
|
css(document.body, 'user-select', 'none');
|
|
1842
1626
|
}
|
|
1843
1627
|
},
|
|
1844
1628
|
// Returns true - if no further action is needed (either inserted or another condition)
|
|
1845
|
-
_onDragOver: function _onDragOver(
|
|
1846
|
-
/**Event*/
|
|
1847
|
-
evt) {
|
|
1629
|
+
_onDragOver: function _onDragOver( /**Event*/evt) {
|
|
1848
1630
|
var el = this.el,
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1631
|
+
target = evt.target,
|
|
1632
|
+
dragRect,
|
|
1633
|
+
targetRect,
|
|
1634
|
+
revert,
|
|
1635
|
+
options = this.options,
|
|
1636
|
+
group = options.group,
|
|
1637
|
+
activeSortable = Sortable.active,
|
|
1638
|
+
isOwner = activeGroup === group,
|
|
1639
|
+
canSort = options.sort,
|
|
1640
|
+
fromSortable = putSortable || activeSortable,
|
|
1641
|
+
vertical,
|
|
1642
|
+
_this = this,
|
|
1643
|
+
completedFired = false;
|
|
1863
1644
|
if (_silent) return;
|
|
1864
|
-
|
|
1865
1645
|
function dragOverEvent(name, extra) {
|
|
1866
1646
|
pluginEvent(name, _this, _objectSpread2({
|
|
1867
1647
|
evt: evt,
|
|
@@ -1879,25 +1659,22 @@ Sortable.prototype =
|
|
|
1879
1659
|
},
|
|
1880
1660
|
changed: changed
|
|
1881
1661
|
}, extra));
|
|
1882
|
-
}
|
|
1883
|
-
|
|
1662
|
+
}
|
|
1884
1663
|
|
|
1664
|
+
// Capture animation state
|
|
1885
1665
|
function capture() {
|
|
1886
1666
|
dragOverEvent('dragOverAnimationCapture');
|
|
1887
|
-
|
|
1888
1667
|
_this.captureAnimationState();
|
|
1889
|
-
|
|
1890
1668
|
if (_this !== fromSortable) {
|
|
1891
1669
|
fromSortable.captureAnimationState();
|
|
1892
1670
|
}
|
|
1893
|
-
}
|
|
1894
|
-
|
|
1671
|
+
}
|
|
1895
1672
|
|
|
1673
|
+
// Return invocation when dragEl is inserted (or completed)
|
|
1896
1674
|
function completed(insertion) {
|
|
1897
1675
|
dragOverEvent('dragOverCompleted', {
|
|
1898
1676
|
insertion: insertion
|
|
1899
1677
|
});
|
|
1900
|
-
|
|
1901
1678
|
if (insertion) {
|
|
1902
1679
|
// Clones must be hidden before folding animation to capture dragRectAbsolute properly
|
|
1903
1680
|
if (isOwner) {
|
|
@@ -1905,57 +1682,51 @@ Sortable.prototype =
|
|
|
1905
1682
|
} else {
|
|
1906
1683
|
activeSortable._showClone(_this);
|
|
1907
1684
|
}
|
|
1908
|
-
|
|
1909
1685
|
if (_this !== fromSortable) {
|
|
1910
1686
|
// Set ghost class to new sortable's ghost class
|
|
1911
1687
|
toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);
|
|
1912
1688
|
toggleClass(dragEl, options.ghostClass, true);
|
|
1913
1689
|
}
|
|
1914
|
-
|
|
1915
1690
|
if (putSortable !== _this && _this !== Sortable.active) {
|
|
1916
1691
|
putSortable = _this;
|
|
1917
1692
|
} else if (_this === Sortable.active && putSortable) {
|
|
1918
1693
|
putSortable = null;
|
|
1919
|
-
}
|
|
1920
|
-
|
|
1694
|
+
}
|
|
1921
1695
|
|
|
1696
|
+
// Animation
|
|
1922
1697
|
if (fromSortable === _this) {
|
|
1923
1698
|
_this._ignoreWhileAnimating = target;
|
|
1924
1699
|
}
|
|
1925
|
-
|
|
1926
1700
|
_this.animateAll(function () {
|
|
1927
1701
|
dragOverEvent('dragOverAnimationComplete');
|
|
1928
1702
|
_this._ignoreWhileAnimating = null;
|
|
1929
1703
|
});
|
|
1930
|
-
|
|
1931
1704
|
if (_this !== fromSortable) {
|
|
1932
1705
|
fromSortable.animateAll();
|
|
1933
1706
|
fromSortable._ignoreWhileAnimating = null;
|
|
1934
1707
|
}
|
|
1935
|
-
}
|
|
1936
|
-
|
|
1708
|
+
}
|
|
1937
1709
|
|
|
1710
|
+
// Null lastTarget if it is not inside a previously swapped element
|
|
1938
1711
|
if (target === dragEl && !dragEl.animated || target === el && !target.animated) {
|
|
1939
1712
|
lastTarget = null;
|
|
1940
|
-
}
|
|
1941
|
-
|
|
1713
|
+
}
|
|
1942
1714
|
|
|
1715
|
+
// no bubbling and not fallback
|
|
1943
1716
|
if (!options.dragoverBubble && !evt.rootEl && target !== document) {
|
|
1944
|
-
dragEl.parentNode[expando]._isOutsideThisEl(evt.target);
|
|
1945
|
-
|
|
1717
|
+
dragEl.parentNode[expando]._isOutsideThisEl(evt.target);
|
|
1946
1718
|
|
|
1719
|
+
// Do not detect for empty insert if already inserted
|
|
1947
1720
|
!insertion && nearestEmptyInsertDetectEvent(evt);
|
|
1948
1721
|
}
|
|
1949
|
-
|
|
1950
1722
|
!options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();
|
|
1951
1723
|
return completedFired = true;
|
|
1952
|
-
}
|
|
1953
|
-
|
|
1724
|
+
}
|
|
1954
1725
|
|
|
1726
|
+
// Call when dragEl has been inserted
|
|
1955
1727
|
function changed() {
|
|
1956
1728
|
newIndex = index(dragEl);
|
|
1957
1729
|
newDraggableIndex = index(dragEl, options.draggable);
|
|
1958
|
-
|
|
1959
1730
|
_dispatchEvent({
|
|
1960
1731
|
sortable: _this,
|
|
1961
1732
|
name: 'change',
|
|
@@ -1965,37 +1736,27 @@ Sortable.prototype =
|
|
|
1965
1736
|
originalEvent: evt
|
|
1966
1737
|
});
|
|
1967
1738
|
}
|
|
1968
|
-
|
|
1969
1739
|
if (evt.preventDefault !== void 0) {
|
|
1970
1740
|
evt.cancelable && evt.preventDefault();
|
|
1971
1741
|
}
|
|
1972
|
-
|
|
1973
1742
|
target = closest(target, options.draggable, el, true);
|
|
1974
1743
|
dragOverEvent('dragOver');
|
|
1975
1744
|
if (Sortable.eventCanceled) return completedFired;
|
|
1976
|
-
|
|
1977
1745
|
if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {
|
|
1978
1746
|
return completed(false);
|
|
1979
1747
|
}
|
|
1980
|
-
|
|
1981
1748
|
ignoreNextClick = false;
|
|
1982
|
-
|
|
1983
1749
|
if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list
|
|
1984
1750
|
: putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {
|
|
1985
1751
|
vertical = this._getDirection(evt, target) === 'vertical';
|
|
1986
1752
|
dragRect = getRect(dragEl);
|
|
1987
1753
|
dragOverEvent('dragOverValid');
|
|
1988
1754
|
if (Sortable.eventCanceled) return completedFired;
|
|
1989
|
-
|
|
1990
1755
|
if (revert) {
|
|
1991
1756
|
parentEl = rootEl; // actualization
|
|
1992
|
-
|
|
1993
1757
|
capture();
|
|
1994
|
-
|
|
1995
1758
|
this._hideClone();
|
|
1996
|
-
|
|
1997
1759
|
dragOverEvent('revert');
|
|
1998
|
-
|
|
1999
1760
|
if (!Sortable.eventCanceled) {
|
|
2000
1761
|
if (nextEl) {
|
|
2001
1762
|
rootEl.insertBefore(dragEl, nextEl);
|
|
@@ -2003,31 +1764,32 @@ Sortable.prototype =
|
|
|
2003
1764
|
rootEl.appendChild(dragEl);
|
|
2004
1765
|
}
|
|
2005
1766
|
}
|
|
2006
|
-
|
|
2007
1767
|
return completed(true);
|
|
2008
1768
|
}
|
|
2009
|
-
|
|
2010
1769
|
var elLastChild = lastChild(el, options.draggable);
|
|
2011
|
-
|
|
2012
1770
|
if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {
|
|
2013
1771
|
// Insert to end of list
|
|
1772
|
+
|
|
2014
1773
|
// If already at end of list: Do not insert
|
|
2015
1774
|
if (elLastChild === dragEl) {
|
|
2016
1775
|
return completed(false);
|
|
2017
|
-
}
|
|
2018
|
-
|
|
1776
|
+
}
|
|
2019
1777
|
|
|
1778
|
+
// if there is a last element, it is the target
|
|
2020
1779
|
if (elLastChild && el === evt.target) {
|
|
2021
1780
|
target = elLastChild;
|
|
2022
1781
|
}
|
|
2023
|
-
|
|
2024
1782
|
if (target) {
|
|
2025
1783
|
targetRect = getRect(target);
|
|
2026
1784
|
}
|
|
2027
|
-
|
|
2028
1785
|
if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {
|
|
2029
1786
|
capture();
|
|
2030
|
-
|
|
1787
|
+
if (elLastChild && elLastChild.nextSibling) {
|
|
1788
|
+
// the last draggable element is not the last node
|
|
1789
|
+
el.insertBefore(dragEl, elLastChild.nextSibling);
|
|
1790
|
+
} else {
|
|
1791
|
+
el.appendChild(dragEl);
|
|
1792
|
+
}
|
|
2031
1793
|
parentEl = el; // actualization
|
|
2032
1794
|
|
|
2033
1795
|
changed();
|
|
@@ -2036,14 +1798,11 @@ Sortable.prototype =
|
|
|
2036
1798
|
} else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {
|
|
2037
1799
|
// Insert to start of list
|
|
2038
1800
|
var firstChild = getChild(el, 0, options, true);
|
|
2039
|
-
|
|
2040
1801
|
if (firstChild === dragEl) {
|
|
2041
1802
|
return completed(false);
|
|
2042
1803
|
}
|
|
2043
|
-
|
|
2044
1804
|
target = firstChild;
|
|
2045
1805
|
targetRect = getRect(target);
|
|
2046
|
-
|
|
2047
1806
|
if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {
|
|
2048
1807
|
capture();
|
|
2049
1808
|
el.insertBefore(dragEl, firstChild);
|
|
@@ -2055,82 +1814,68 @@ Sortable.prototype =
|
|
|
2055
1814
|
} else if (target.parentNode === el) {
|
|
2056
1815
|
targetRect = getRect(target);
|
|
2057
1816
|
var direction = 0,
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2061
|
-
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
|
|
1817
|
+
targetBeforeFirstSwap,
|
|
1818
|
+
differentLevel = dragEl.parentNode !== el,
|
|
1819
|
+
differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),
|
|
1820
|
+
side1 = vertical ? 'top' : 'left',
|
|
1821
|
+
scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),
|
|
1822
|
+
scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;
|
|
2065
1823
|
if (lastTarget !== target) {
|
|
2066
1824
|
targetBeforeFirstSwap = targetRect[side1];
|
|
2067
1825
|
pastFirstInvertThresh = false;
|
|
2068
1826
|
isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;
|
|
2069
1827
|
}
|
|
2070
|
-
|
|
2071
1828
|
direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);
|
|
2072
1829
|
var sibling;
|
|
2073
|
-
|
|
2074
1830
|
if (direction !== 0) {
|
|
2075
1831
|
// Check if target is beside dragEl in respective direction (ignoring hidden elements)
|
|
2076
1832
|
var dragIndex = index(dragEl);
|
|
2077
|
-
|
|
2078
1833
|
do {
|
|
2079
1834
|
dragIndex -= direction;
|
|
2080
1835
|
sibling = parentEl.children[dragIndex];
|
|
2081
1836
|
} while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));
|
|
2082
|
-
}
|
|
2083
|
-
|
|
2084
|
-
|
|
1837
|
+
}
|
|
1838
|
+
// If dragEl is already beside target: Do not insert
|
|
2085
1839
|
if (direction === 0 || sibling === target) {
|
|
2086
1840
|
return completed(false);
|
|
2087
1841
|
}
|
|
2088
|
-
|
|
2089
1842
|
lastTarget = target;
|
|
2090
1843
|
lastDirection = direction;
|
|
2091
1844
|
var nextSibling = target.nextElementSibling,
|
|
2092
|
-
|
|
1845
|
+
after = false;
|
|
2093
1846
|
after = direction === 1;
|
|
2094
|
-
|
|
2095
1847
|
var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);
|
|
2096
|
-
|
|
2097
1848
|
if (moveVector !== false) {
|
|
2098
1849
|
if (moveVector === 1 || moveVector === -1) {
|
|
2099
1850
|
after = moveVector === 1;
|
|
2100
1851
|
}
|
|
2101
|
-
|
|
2102
1852
|
_silent = true;
|
|
2103
1853
|
setTimeout(_unsilent, 30);
|
|
2104
1854
|
capture();
|
|
2105
|
-
|
|
2106
1855
|
if (after && !nextSibling) {
|
|
2107
1856
|
el.appendChild(dragEl);
|
|
2108
1857
|
} else {
|
|
2109
1858
|
target.parentNode.insertBefore(dragEl, after ? nextSibling : target);
|
|
2110
|
-
}
|
|
2111
|
-
|
|
1859
|
+
}
|
|
2112
1860
|
|
|
1861
|
+
// Undo chrome's scroll adjustment (has no effect on other browsers)
|
|
2113
1862
|
if (scrolledPastTop) {
|
|
2114
1863
|
scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);
|
|
2115
1864
|
}
|
|
2116
|
-
|
|
2117
1865
|
parentEl = dragEl.parentNode; // actualization
|
|
2118
|
-
// must be done before animation
|
|
2119
1866
|
|
|
1867
|
+
// must be done before animation
|
|
2120
1868
|
if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {
|
|
2121
1869
|
targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);
|
|
2122
1870
|
}
|
|
2123
|
-
|
|
2124
1871
|
changed();
|
|
2125
1872
|
return completed(true);
|
|
2126
1873
|
}
|
|
2127
1874
|
}
|
|
2128
|
-
|
|
2129
1875
|
if (el.contains(dragEl)) {
|
|
2130
1876
|
return completed(false);
|
|
2131
1877
|
}
|
|
2132
1878
|
}
|
|
2133
|
-
|
|
2134
1879
|
return false;
|
|
2135
1880
|
},
|
|
2136
1881
|
_ignoreWhileAnimating: null,
|
|
@@ -2150,83 +1895,69 @@ Sortable.prototype =
|
|
|
2150
1895
|
off(ownerDocument, 'touchcancel', this._onDrop);
|
|
2151
1896
|
off(document, 'selectstart', this);
|
|
2152
1897
|
},
|
|
2153
|
-
_onDrop: function _onDrop(
|
|
2154
|
-
/**Event*/
|
|
2155
|
-
evt) {
|
|
1898
|
+
_onDrop: function _onDrop( /**Event*/evt) {
|
|
2156
1899
|
var el = this.el,
|
|
2157
|
-
|
|
1900
|
+
options = this.options;
|
|
2158
1901
|
|
|
1902
|
+
// Get the index of the dragged element within its parent
|
|
2159
1903
|
newIndex = index(dragEl);
|
|
2160
1904
|
newDraggableIndex = index(dragEl, options.draggable);
|
|
2161
1905
|
pluginEvent('drop', this, {
|
|
2162
1906
|
evt: evt
|
|
2163
1907
|
});
|
|
2164
|
-
parentEl = dragEl && dragEl.parentNode;
|
|
1908
|
+
parentEl = dragEl && dragEl.parentNode;
|
|
2165
1909
|
|
|
1910
|
+
// Get again after plugin event
|
|
2166
1911
|
newIndex = index(dragEl);
|
|
2167
1912
|
newDraggableIndex = index(dragEl, options.draggable);
|
|
2168
|
-
|
|
2169
1913
|
if (Sortable.eventCanceled) {
|
|
2170
1914
|
this._nulling();
|
|
2171
|
-
|
|
2172
1915
|
return;
|
|
2173
1916
|
}
|
|
2174
|
-
|
|
2175
1917
|
awaitingDragStarted = false;
|
|
2176
1918
|
isCircumstantialInvert = false;
|
|
2177
1919
|
pastFirstInvertThresh = false;
|
|
2178
1920
|
clearInterval(this._loopId);
|
|
2179
1921
|
clearTimeout(this._dragStartTimer);
|
|
2180
|
-
|
|
2181
1922
|
_cancelNextTick(this.cloneId);
|
|
1923
|
+
_cancelNextTick(this._dragStartId);
|
|
2182
1924
|
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
1925
|
+
// Unbind events
|
|
2186
1926
|
if (this.nativeDraggable) {
|
|
2187
1927
|
off(document, 'drop', this);
|
|
2188
1928
|
off(el, 'dragstart', this._onDragStart);
|
|
2189
1929
|
}
|
|
2190
|
-
|
|
2191
1930
|
this._offMoveEvents();
|
|
2192
|
-
|
|
2193
1931
|
this._offUpEvents();
|
|
2194
|
-
|
|
2195
1932
|
if (Safari) {
|
|
2196
1933
|
css(document.body, 'user-select', '');
|
|
2197
1934
|
}
|
|
2198
|
-
|
|
2199
1935
|
css(dragEl, 'transform', '');
|
|
2200
|
-
|
|
2201
1936
|
if (evt) {
|
|
2202
1937
|
if (moved) {
|
|
2203
1938
|
evt.cancelable && evt.preventDefault();
|
|
2204
1939
|
!options.dropBubble && evt.stopPropagation();
|
|
2205
1940
|
}
|
|
2206
|
-
|
|
2207
1941
|
ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);
|
|
2208
|
-
|
|
2209
1942
|
if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {
|
|
2210
1943
|
// Remove clone(s)
|
|
2211
1944
|
cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);
|
|
2212
1945
|
}
|
|
2213
|
-
|
|
2214
1946
|
if (dragEl) {
|
|
2215
1947
|
if (this.nativeDraggable) {
|
|
2216
1948
|
off(dragEl, 'dragend', this);
|
|
2217
1949
|
}
|
|
2218
|
-
|
|
2219
1950
|
_disableDraggable(dragEl);
|
|
1951
|
+
dragEl.style['will-change'] = '';
|
|
2220
1952
|
|
|
2221
|
-
|
|
1953
|
+
// Remove classes
|
|
2222
1954
|
// ghostClass is added in dragStarted
|
|
2223
|
-
|
|
2224
1955
|
if (moved && !awaitingDragStarted) {
|
|
2225
1956
|
toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);
|
|
2226
1957
|
}
|
|
1958
|
+
toggleClass(dragEl, this.options.chosenClass, false);
|
|
2227
1959
|
|
|
2228
|
-
|
|
2229
|
-
|
|
1960
|
+
// Drag stop event
|
|
2230
1961
|
_dispatchEvent({
|
|
2231
1962
|
sortable: this,
|
|
2232
1963
|
name: 'unchoose',
|
|
@@ -2235,7 +1966,6 @@ Sortable.prototype =
|
|
|
2235
1966
|
newDraggableIndex: null,
|
|
2236
1967
|
originalEvent: evt
|
|
2237
1968
|
});
|
|
2238
|
-
|
|
2239
1969
|
if (rootEl !== parentEl) {
|
|
2240
1970
|
if (newIndex >= 0) {
|
|
2241
1971
|
// Add event
|
|
@@ -2245,17 +1975,17 @@ Sortable.prototype =
|
|
|
2245
1975
|
toEl: parentEl,
|
|
2246
1976
|
fromEl: rootEl,
|
|
2247
1977
|
originalEvent: evt
|
|
2248
|
-
});
|
|
2249
|
-
|
|
1978
|
+
});
|
|
2250
1979
|
|
|
1980
|
+
// Remove event
|
|
2251
1981
|
_dispatchEvent({
|
|
2252
1982
|
sortable: this,
|
|
2253
1983
|
name: 'remove',
|
|
2254
1984
|
toEl: parentEl,
|
|
2255
1985
|
originalEvent: evt
|
|
2256
|
-
});
|
|
2257
|
-
|
|
1986
|
+
});
|
|
2258
1987
|
|
|
1988
|
+
// drag from one list and drop into another
|
|
2259
1989
|
_dispatchEvent({
|
|
2260
1990
|
rootEl: parentEl,
|
|
2261
1991
|
name: 'sort',
|
|
@@ -2263,7 +1993,6 @@ Sortable.prototype =
|
|
|
2263
1993
|
fromEl: rootEl,
|
|
2264
1994
|
originalEvent: evt
|
|
2265
1995
|
});
|
|
2266
|
-
|
|
2267
1996
|
_dispatchEvent({
|
|
2268
1997
|
sortable: this,
|
|
2269
1998
|
name: 'sort',
|
|
@@ -2271,7 +2000,6 @@ Sortable.prototype =
|
|
|
2271
2000
|
originalEvent: evt
|
|
2272
2001
|
});
|
|
2273
2002
|
}
|
|
2274
|
-
|
|
2275
2003
|
putSortable && putSortable.save();
|
|
2276
2004
|
} else {
|
|
2277
2005
|
if (newIndex !== oldIndex) {
|
|
@@ -2283,7 +2011,6 @@ Sortable.prototype =
|
|
|
2283
2011
|
toEl: parentEl,
|
|
2284
2012
|
originalEvent: evt
|
|
2285
2013
|
});
|
|
2286
|
-
|
|
2287
2014
|
_dispatchEvent({
|
|
2288
2015
|
sortable: this,
|
|
2289
2016
|
name: 'sort',
|
|
@@ -2293,27 +2020,24 @@ Sortable.prototype =
|
|
|
2293
2020
|
}
|
|
2294
2021
|
}
|
|
2295
2022
|
}
|
|
2296
|
-
|
|
2297
2023
|
if (Sortable.active) {
|
|
2298
2024
|
/* jshint eqnull:true */
|
|
2299
2025
|
if (newIndex == null || newIndex === -1) {
|
|
2300
2026
|
newIndex = oldIndex;
|
|
2301
2027
|
newDraggableIndex = oldDraggableIndex;
|
|
2302
2028
|
}
|
|
2303
|
-
|
|
2304
2029
|
_dispatchEvent({
|
|
2305
2030
|
sortable: this,
|
|
2306
2031
|
name: 'end',
|
|
2307
2032
|
toEl: parentEl,
|
|
2308
2033
|
originalEvent: evt
|
|
2309
|
-
});
|
|
2310
|
-
|
|
2034
|
+
});
|
|
2311
2035
|
|
|
2036
|
+
// Save sorting
|
|
2312
2037
|
this.save();
|
|
2313
2038
|
}
|
|
2314
2039
|
}
|
|
2315
2040
|
}
|
|
2316
|
-
|
|
2317
2041
|
this._nulling();
|
|
2318
2042
|
},
|
|
2319
2043
|
_nulling: function _nulling() {
|
|
@@ -2324,65 +2048,52 @@ Sortable.prototype =
|
|
|
2324
2048
|
});
|
|
2325
2049
|
savedInputChecked.length = lastDx = lastDy = 0;
|
|
2326
2050
|
},
|
|
2327
|
-
handleEvent: function handleEvent(
|
|
2328
|
-
/**Event*/
|
|
2329
|
-
evt) {
|
|
2051
|
+
handleEvent: function handleEvent( /**Event*/evt) {
|
|
2330
2052
|
switch (evt.type) {
|
|
2331
2053
|
case 'drop':
|
|
2332
2054
|
case 'dragend':
|
|
2333
2055
|
this._onDrop(evt);
|
|
2334
|
-
|
|
2335
2056
|
break;
|
|
2336
|
-
|
|
2337
2057
|
case 'dragenter':
|
|
2338
2058
|
case 'dragover':
|
|
2339
2059
|
if (dragEl) {
|
|
2340
2060
|
this._onDragOver(evt);
|
|
2341
|
-
|
|
2342
2061
|
_globalDragOver(evt);
|
|
2343
2062
|
}
|
|
2344
|
-
|
|
2345
2063
|
break;
|
|
2346
|
-
|
|
2347
2064
|
case 'selectstart':
|
|
2348
2065
|
evt.preventDefault();
|
|
2349
2066
|
break;
|
|
2350
2067
|
}
|
|
2351
2068
|
},
|
|
2352
|
-
|
|
2353
|
-
|
|
2354
|
-
*
|
|
2355
|
-
* @returns {String[]}
|
|
2069
|
+
/**
|
|
2070
|
+
* Serializes the item into an array of string.
|
|
2071
|
+
* @returns {String[]}
|
|
2356
2072
|
*/
|
|
2357
2073
|
toArray: function toArray() {
|
|
2358
2074
|
var order = [],
|
|
2359
|
-
|
|
2360
|
-
|
|
2361
|
-
|
|
2362
|
-
|
|
2363
|
-
|
|
2364
|
-
|
|
2075
|
+
el,
|
|
2076
|
+
children = this.el.children,
|
|
2077
|
+
i = 0,
|
|
2078
|
+
n = children.length,
|
|
2079
|
+
options = this.options;
|
|
2365
2080
|
for (; i < n; i++) {
|
|
2366
2081
|
el = children[i];
|
|
2367
|
-
|
|
2368
2082
|
if (closest(el, options.draggable, this.el, false)) {
|
|
2369
2083
|
order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));
|
|
2370
2084
|
}
|
|
2371
2085
|
}
|
|
2372
|
-
|
|
2373
2086
|
return order;
|
|
2374
2087
|
},
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
*
|
|
2378
|
-
* @param {String[]} order order of the items
|
|
2088
|
+
/**
|
|
2089
|
+
* Sorts the elements according to the array.
|
|
2090
|
+
* @param {String[]} order order of the items
|
|
2379
2091
|
*/
|
|
2380
2092
|
sort: function sort(order, useAnimation) {
|
|
2381
2093
|
var items = {},
|
|
2382
|
-
|
|
2094
|
+
rootEl = this.el;
|
|
2383
2095
|
this.toArray().forEach(function (id, i) {
|
|
2384
2096
|
var el = rootEl.children[i];
|
|
2385
|
-
|
|
2386
2097
|
if (closest(el, this.options.draggable, rootEl, false)) {
|
|
2387
2098
|
items[id] = el;
|
|
2388
2099
|
}
|
|
@@ -2396,53 +2107,46 @@ Sortable.prototype =
|
|
|
2396
2107
|
});
|
|
2397
2108
|
useAnimation && this.animateAll();
|
|
2398
2109
|
},
|
|
2399
|
-
|
|
2400
|
-
|
|
2401
|
-
* Save the current sorting
|
|
2110
|
+
/**
|
|
2111
|
+
* Save the current sorting
|
|
2402
2112
|
*/
|
|
2403
2113
|
save: function save() {
|
|
2404
2114
|
var store = this.options.store;
|
|
2405
2115
|
store && store.set && store.set(this);
|
|
2406
2116
|
},
|
|
2407
|
-
|
|
2408
|
-
|
|
2409
|
-
*
|
|
2410
|
-
* @param {
|
|
2411
|
-
* @
|
|
2412
|
-
* @returns {HTMLElement|null}
|
|
2117
|
+
/**
|
|
2118
|
+
* For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.
|
|
2119
|
+
* @param {HTMLElement} el
|
|
2120
|
+
* @param {String} [selector] default: `options.draggable`
|
|
2121
|
+
* @returns {HTMLElement|null}
|
|
2413
2122
|
*/
|
|
2414
2123
|
closest: function closest$1(el, selector) {
|
|
2415
2124
|
return closest(el, selector || this.options.draggable, this.el, false);
|
|
2416
2125
|
},
|
|
2417
|
-
|
|
2418
|
-
|
|
2419
|
-
*
|
|
2420
|
-
* @param {
|
|
2421
|
-
* @
|
|
2422
|
-
* @returns {*}
|
|
2126
|
+
/**
|
|
2127
|
+
* Set/get option
|
|
2128
|
+
* @param {string} name
|
|
2129
|
+
* @param {*} [value]
|
|
2130
|
+
* @returns {*}
|
|
2423
2131
|
*/
|
|
2424
2132
|
option: function option(name, value) {
|
|
2425
2133
|
var options = this.options;
|
|
2426
|
-
|
|
2427
2134
|
if (value === void 0) {
|
|
2428
2135
|
return options[name];
|
|
2429
2136
|
} else {
|
|
2430
2137
|
var modifiedValue = PluginManager.modifyOption(this, name, value);
|
|
2431
|
-
|
|
2432
2138
|
if (typeof modifiedValue !== 'undefined') {
|
|
2433
2139
|
options[name] = modifiedValue;
|
|
2434
2140
|
} else {
|
|
2435
2141
|
options[name] = value;
|
|
2436
2142
|
}
|
|
2437
|
-
|
|
2438
2143
|
if (name === 'group') {
|
|
2439
2144
|
_prepareGroup(options);
|
|
2440
2145
|
}
|
|
2441
2146
|
}
|
|
2442
2147
|
},
|
|
2443
|
-
|
|
2444
|
-
|
|
2445
|
-
* Destroy
|
|
2148
|
+
/**
|
|
2149
|
+
* Destroy
|
|
2446
2150
|
*/
|
|
2447
2151
|
destroy: function destroy() {
|
|
2448
2152
|
pluginEvent('destroy', this);
|
|
@@ -2451,21 +2155,16 @@ Sortable.prototype =
|
|
|
2451
2155
|
off(el, 'mousedown', this._onTapStart);
|
|
2452
2156
|
off(el, 'touchstart', this._onTapStart);
|
|
2453
2157
|
off(el, 'pointerdown', this._onTapStart);
|
|
2454
|
-
|
|
2455
2158
|
if (this.nativeDraggable) {
|
|
2456
2159
|
off(el, 'dragover', this);
|
|
2457
2160
|
off(el, 'dragenter', this);
|
|
2458
|
-
}
|
|
2459
|
-
|
|
2460
|
-
|
|
2161
|
+
}
|
|
2162
|
+
// Remove draggable attributes
|
|
2461
2163
|
Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {
|
|
2462
2164
|
el.removeAttribute('draggable');
|
|
2463
2165
|
});
|
|
2464
|
-
|
|
2465
2166
|
this._onDrop();
|
|
2466
|
-
|
|
2467
2167
|
this._disableDelayedDragEvents();
|
|
2468
|
-
|
|
2469
2168
|
sortables.splice(sortables.indexOf(this.el), 1);
|
|
2470
2169
|
this.el = el = null;
|
|
2471
2170
|
},
|
|
@@ -2474,25 +2173,22 @@ Sortable.prototype =
|
|
|
2474
2173
|
pluginEvent('hideClone', this);
|
|
2475
2174
|
if (Sortable.eventCanceled) return;
|
|
2476
2175
|
css(cloneEl, 'display', 'none');
|
|
2477
|
-
|
|
2478
2176
|
if (this.options.removeCloneOnHide && cloneEl.parentNode) {
|
|
2479
2177
|
cloneEl.parentNode.removeChild(cloneEl);
|
|
2480
2178
|
}
|
|
2481
|
-
|
|
2482
2179
|
cloneHidden = true;
|
|
2483
2180
|
}
|
|
2484
2181
|
},
|
|
2485
2182
|
_showClone: function _showClone(putSortable) {
|
|
2486
2183
|
if (putSortable.lastPutMode !== 'clone') {
|
|
2487
2184
|
this._hideClone();
|
|
2488
|
-
|
|
2489
2185
|
return;
|
|
2490
2186
|
}
|
|
2491
|
-
|
|
2492
2187
|
if (cloneHidden) {
|
|
2493
2188
|
pluginEvent('showClone', this);
|
|
2494
|
-
if (Sortable.eventCanceled) return;
|
|
2189
|
+
if (Sortable.eventCanceled) return;
|
|
2495
2190
|
|
|
2191
|
+
// show clone at dragEl or original position
|
|
2496
2192
|
if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {
|
|
2497
2193
|
rootEl.insertBefore(cloneEl, dragEl);
|
|
2498
2194
|
} else if (nextEl) {
|
|
@@ -2500,33 +2196,26 @@ Sortable.prototype =
|
|
|
2500
2196
|
} else {
|
|
2501
2197
|
rootEl.appendChild(cloneEl);
|
|
2502
2198
|
}
|
|
2503
|
-
|
|
2504
2199
|
if (this.options.group.revertClone) {
|
|
2505
2200
|
this.animate(dragEl, cloneEl);
|
|
2506
2201
|
}
|
|
2507
|
-
|
|
2508
2202
|
css(cloneEl, 'display', '');
|
|
2509
2203
|
cloneHidden = false;
|
|
2510
2204
|
}
|
|
2511
2205
|
}
|
|
2512
2206
|
};
|
|
2513
|
-
|
|
2514
|
-
function _globalDragOver(
|
|
2515
|
-
/**Event*/
|
|
2516
|
-
evt) {
|
|
2207
|
+
function _globalDragOver( /**Event*/evt) {
|
|
2517
2208
|
if (evt.dataTransfer) {
|
|
2518
2209
|
evt.dataTransfer.dropEffect = 'move';
|
|
2519
2210
|
}
|
|
2520
|
-
|
|
2521
2211
|
evt.cancelable && evt.preventDefault();
|
|
2522
2212
|
}
|
|
2523
|
-
|
|
2524
2213
|
function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {
|
|
2525
2214
|
var evt,
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2215
|
+
sortable = fromEl[expando],
|
|
2216
|
+
onMoveFn = sortable.options.onMove,
|
|
2217
|
+
retVal;
|
|
2218
|
+
// Support for new CustomEvent feature
|
|
2530
2219
|
if (window.CustomEvent && !IE11OrLess && !Edge) {
|
|
2531
2220
|
evt = new CustomEvent('move', {
|
|
2532
2221
|
bubbles: true,
|
|
@@ -2536,7 +2225,6 @@ function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalE
|
|
|
2536
2225
|
evt = document.createEvent('Event');
|
|
2537
2226
|
evt.initEvent('move', true, true);
|
|
2538
2227
|
}
|
|
2539
|
-
|
|
2540
2228
|
evt.to = toEl;
|
|
2541
2229
|
evt.from = fromEl;
|
|
2542
2230
|
evt.dragged = dragEl;
|
|
@@ -2546,41 +2234,35 @@ function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalE
|
|
|
2546
2234
|
evt.willInsertAfter = willInsertAfter;
|
|
2547
2235
|
evt.originalEvent = originalEvent;
|
|
2548
2236
|
fromEl.dispatchEvent(evt);
|
|
2549
|
-
|
|
2550
2237
|
if (onMoveFn) {
|
|
2551
2238
|
retVal = onMoveFn.call(sortable, evt, originalEvent);
|
|
2552
2239
|
}
|
|
2553
|
-
|
|
2554
2240
|
return retVal;
|
|
2555
2241
|
}
|
|
2556
|
-
|
|
2557
2242
|
function _disableDraggable(el) {
|
|
2558
2243
|
el.draggable = false;
|
|
2559
2244
|
}
|
|
2560
|
-
|
|
2561
2245
|
function _unsilent() {
|
|
2562
2246
|
_silent = false;
|
|
2563
2247
|
}
|
|
2564
|
-
|
|
2565
2248
|
function _ghostIsFirst(evt, vertical, sortable) {
|
|
2566
|
-
var
|
|
2249
|
+
var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));
|
|
2250
|
+
var sortableContentRect = getContentRect(sortable.el);
|
|
2567
2251
|
var spacer = 10;
|
|
2568
|
-
return vertical ? evt.clientX <
|
|
2252
|
+
return vertical ? evt.clientX < sortableContentRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < sortableContentRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;
|
|
2569
2253
|
}
|
|
2570
|
-
|
|
2571
2254
|
function _ghostIsLast(evt, vertical, sortable) {
|
|
2572
|
-
var
|
|
2255
|
+
var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));
|
|
2256
|
+
var sortableContentRect = getContentRect(sortable.el);
|
|
2573
2257
|
var spacer = 10;
|
|
2574
|
-
return vertical ? evt.clientX >
|
|
2258
|
+
return vertical ? evt.clientX > sortableContentRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > sortableContentRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;
|
|
2575
2259
|
}
|
|
2576
|
-
|
|
2577
2260
|
function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {
|
|
2578
2261
|
var mouseOnAxis = vertical ? evt.clientY : evt.clientX,
|
|
2579
|
-
|
|
2580
|
-
|
|
2581
|
-
|
|
2582
|
-
|
|
2583
|
-
|
|
2262
|
+
targetLength = vertical ? targetRect.height : targetRect.width,
|
|
2263
|
+
targetS1 = vertical ? targetRect.top : targetRect.left,
|
|
2264
|
+
targetS2 = vertical ? targetRect.bottom : targetRect.right,
|
|
2265
|
+
invert = false;
|
|
2584
2266
|
if (!invertSwap) {
|
|
2585
2267
|
// Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold
|
|
2586
2268
|
if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {
|
|
@@ -2590,7 +2272,6 @@ function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, inv
|
|
|
2590
2272
|
// past first invert threshold, do not restrict inverted threshold to dragEl shadow
|
|
2591
2273
|
pastFirstInvertThresh = true;
|
|
2592
2274
|
}
|
|
2593
|
-
|
|
2594
2275
|
if (!pastFirstInvertThresh) {
|
|
2595
2276
|
// dragEl shadow (target move distance shadow)
|
|
2596
2277
|
if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow
|
|
@@ -2607,26 +2288,22 @@ function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, inv
|
|
|
2607
2288
|
}
|
|
2608
2289
|
}
|
|
2609
2290
|
}
|
|
2610
|
-
|
|
2611
2291
|
invert = invert || invertSwap;
|
|
2612
|
-
|
|
2613
2292
|
if (invert) {
|
|
2614
2293
|
// Invert of regular
|
|
2615
2294
|
if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {
|
|
2616
2295
|
return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;
|
|
2617
2296
|
}
|
|
2618
2297
|
}
|
|
2619
|
-
|
|
2620
2298
|
return 0;
|
|
2621
2299
|
}
|
|
2622
|
-
/**
|
|
2623
|
-
* Gets the direction dragEl must be swapped relative to target in order to make it
|
|
2624
|
-
* seem that dragEl has been "inserted" into that element's position
|
|
2625
|
-
* @param {HTMLElement} target The target whose position dragEl is being inserted at
|
|
2626
|
-
* @return {Number} Direction dragEl must be swapped
|
|
2627
|
-
*/
|
|
2628
|
-
|
|
2629
2300
|
|
|
2301
|
+
/**
|
|
2302
|
+
* Gets the direction dragEl must be swapped relative to target in order to make it
|
|
2303
|
+
* seem that dragEl has been "inserted" into that element's position
|
|
2304
|
+
* @param {HTMLElement} target The target whose position dragEl is being inserted at
|
|
2305
|
+
* @return {Number} Direction dragEl must be swapped
|
|
2306
|
+
*/
|
|
2630
2307
|
function _getInsertDirection(target) {
|
|
2631
2308
|
if (index(dragEl) < index(target)) {
|
|
2632
2309
|
return 1;
|
|
@@ -2634,55 +2311,48 @@ function _getInsertDirection(target) {
|
|
|
2634
2311
|
return -1;
|
|
2635
2312
|
}
|
|
2636
2313
|
}
|
|
2637
|
-
/**
|
|
2638
|
-
* Generate id
|
|
2639
|
-
* @param {HTMLElement} el
|
|
2640
|
-
* @returns {String}
|
|
2641
|
-
* @private
|
|
2642
|
-
*/
|
|
2643
|
-
|
|
2644
2314
|
|
|
2315
|
+
/**
|
|
2316
|
+
* Generate id
|
|
2317
|
+
* @param {HTMLElement} el
|
|
2318
|
+
* @returns {String}
|
|
2319
|
+
* @private
|
|
2320
|
+
*/
|
|
2645
2321
|
function _generateId(el) {
|
|
2646
2322
|
var str = el.tagName + el.className + el.src + el.href + el.textContent,
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
|
|
2323
|
+
i = str.length,
|
|
2324
|
+
sum = 0;
|
|
2650
2325
|
while (i--) {
|
|
2651
2326
|
sum += str.charCodeAt(i);
|
|
2652
2327
|
}
|
|
2653
|
-
|
|
2654
2328
|
return sum.toString(36);
|
|
2655
2329
|
}
|
|
2656
|
-
|
|
2657
2330
|
function _saveInputCheckedState(root) {
|
|
2658
2331
|
savedInputChecked.length = 0;
|
|
2659
2332
|
var inputs = root.getElementsByTagName('input');
|
|
2660
2333
|
var idx = inputs.length;
|
|
2661
|
-
|
|
2662
2334
|
while (idx--) {
|
|
2663
2335
|
var el = inputs[idx];
|
|
2664
2336
|
el.checked && savedInputChecked.push(el);
|
|
2665
2337
|
}
|
|
2666
2338
|
}
|
|
2667
|
-
|
|
2668
2339
|
function _nextTick(fn) {
|
|
2669
2340
|
return setTimeout(fn, 0);
|
|
2670
2341
|
}
|
|
2671
|
-
|
|
2672
2342
|
function _cancelNextTick(id) {
|
|
2673
2343
|
return clearTimeout(id);
|
|
2674
|
-
}
|
|
2675
|
-
|
|
2344
|
+
}
|
|
2676
2345
|
|
|
2346
|
+
// Fixed #973:
|
|
2677
2347
|
if (documentExists) {
|
|
2678
2348
|
on(document, 'touchmove', function (evt) {
|
|
2679
2349
|
if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {
|
|
2680
2350
|
evt.preventDefault();
|
|
2681
2351
|
}
|
|
2682
2352
|
});
|
|
2683
|
-
}
|
|
2684
|
-
|
|
2353
|
+
}
|
|
2685
2354
|
|
|
2355
|
+
// Export utils
|
|
2686
2356
|
Sortable.utils = {
|
|
2687
2357
|
on: on,
|
|
2688
2358
|
off: off,
|
|
@@ -2702,59 +2372,54 @@ Sortable.utils = {
|
|
|
2702
2372
|
detectDirection: _detectDirection,
|
|
2703
2373
|
getChild: getChild
|
|
2704
2374
|
};
|
|
2705
|
-
/**
|
|
2706
|
-
* Get the Sortable instance of an element
|
|
2707
|
-
* @param {HTMLElement} element The element
|
|
2708
|
-
* @return {Sortable|undefined} The instance of Sortable
|
|
2709
|
-
*/
|
|
2710
2375
|
|
|
2376
|
+
/**
|
|
2377
|
+
* Get the Sortable instance of an element
|
|
2378
|
+
* @param {HTMLElement} element The element
|
|
2379
|
+
* @return {Sortable|undefined} The instance of Sortable
|
|
2380
|
+
*/
|
|
2711
2381
|
Sortable.get = function (element) {
|
|
2712
2382
|
return element[expando];
|
|
2713
2383
|
};
|
|
2714
|
-
/**
|
|
2715
|
-
* Mount a plugin to Sortable
|
|
2716
|
-
* @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted
|
|
2717
|
-
*/
|
|
2718
|
-
|
|
2719
2384
|
|
|
2385
|
+
/**
|
|
2386
|
+
* Mount a plugin to Sortable
|
|
2387
|
+
* @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted
|
|
2388
|
+
*/
|
|
2720
2389
|
Sortable.mount = function () {
|
|
2721
2390
|
for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
2722
2391
|
plugins[_key] = arguments[_key];
|
|
2723
2392
|
}
|
|
2724
|
-
|
|
2725
2393
|
if (plugins[0].constructor === Array) plugins = plugins[0];
|
|
2726
2394
|
plugins.forEach(function (plugin) {
|
|
2727
2395
|
if (!plugin.prototype || !plugin.prototype.constructor) {
|
|
2728
2396
|
throw "Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(plugin));
|
|
2729
2397
|
}
|
|
2730
|
-
|
|
2731
2398
|
if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);
|
|
2732
2399
|
PluginManager.mount(plugin);
|
|
2733
2400
|
});
|
|
2734
2401
|
};
|
|
2735
|
-
/**
|
|
2736
|
-
* Create sortable instance
|
|
2737
|
-
* @param {HTMLElement} el
|
|
2738
|
-
* @param {Object} [options]
|
|
2739
|
-
*/
|
|
2740
|
-
|
|
2741
2402
|
|
|
2403
|
+
/**
|
|
2404
|
+
* Create sortable instance
|
|
2405
|
+
* @param {HTMLElement} el
|
|
2406
|
+
* @param {Object} [options]
|
|
2407
|
+
*/
|
|
2742
2408
|
Sortable.create = function (el, options) {
|
|
2743
2409
|
return new Sortable(el, options);
|
|
2744
|
-
};
|
|
2745
|
-
|
|
2410
|
+
};
|
|
2746
2411
|
|
|
2412
|
+
// Export
|
|
2747
2413
|
Sortable.version = version;
|
|
2748
2414
|
|
|
2749
2415
|
var autoScrolls = [],
|
|
2750
|
-
|
|
2751
|
-
|
|
2752
|
-
|
|
2753
|
-
|
|
2754
|
-
|
|
2755
|
-
|
|
2756
|
-
|
|
2757
|
-
|
|
2416
|
+
scrollEl,
|
|
2417
|
+
scrollRootEl,
|
|
2418
|
+
scrolling = false,
|
|
2419
|
+
lastAutoScrollX,
|
|
2420
|
+
lastAutoScrollY,
|
|
2421
|
+
touchEvt$1,
|
|
2422
|
+
pointerElemChangedInterval;
|
|
2758
2423
|
function AutoScrollPlugin() {
|
|
2759
2424
|
function AutoScroll() {
|
|
2760
2425
|
this.defaults = {
|
|
@@ -2763,19 +2428,18 @@ function AutoScrollPlugin() {
|
|
|
2763
2428
|
scrollSensitivity: 30,
|
|
2764
2429
|
scrollSpeed: 10,
|
|
2765
2430
|
bubbleScroll: true
|
|
2766
|
-
};
|
|
2431
|
+
};
|
|
2767
2432
|
|
|
2433
|
+
// Bind all private methods
|
|
2768
2434
|
for (var fn in this) {
|
|
2769
2435
|
if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {
|
|
2770
2436
|
this[fn] = this[fn].bind(this);
|
|
2771
2437
|
}
|
|
2772
2438
|
}
|
|
2773
2439
|
}
|
|
2774
|
-
|
|
2775
2440
|
AutoScroll.prototype = {
|
|
2776
2441
|
dragStarted: function dragStarted(_ref) {
|
|
2777
2442
|
var originalEvent = _ref.originalEvent;
|
|
2778
|
-
|
|
2779
2443
|
if (this.sortable.nativeDraggable) {
|
|
2780
2444
|
on(document, 'dragover', this._handleAutoScroll);
|
|
2781
2445
|
} else {
|
|
@@ -2790,7 +2454,6 @@ function AutoScrollPlugin() {
|
|
|
2790
2454
|
},
|
|
2791
2455
|
dragOverCompleted: function dragOverCompleted(_ref2) {
|
|
2792
2456
|
var originalEvent = _ref2.originalEvent;
|
|
2793
|
-
|
|
2794
2457
|
// For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)
|
|
2795
2458
|
if (!this.options.dragOverBubble && !originalEvent.rootEl) {
|
|
2796
2459
|
this._handleAutoScroll(originalEvent);
|
|
@@ -2804,7 +2467,6 @@ function AutoScrollPlugin() {
|
|
|
2804
2467
|
off(document, 'touchmove', this._handleFallbackAutoScroll);
|
|
2805
2468
|
off(document, 'mousemove', this._handleFallbackAutoScroll);
|
|
2806
2469
|
}
|
|
2807
|
-
|
|
2808
2470
|
clearPointerElemChangedInterval();
|
|
2809
2471
|
clearAutoScrolls();
|
|
2810
2472
|
cancelThrottle();
|
|
@@ -2818,31 +2480,29 @@ function AutoScrollPlugin() {
|
|
|
2818
2480
|
},
|
|
2819
2481
|
_handleAutoScroll: function _handleAutoScroll(evt, fallback) {
|
|
2820
2482
|
var _this = this;
|
|
2821
|
-
|
|
2822
2483
|
var x = (evt.touches ? evt.touches[0] : evt).clientX,
|
|
2823
|
-
|
|
2824
|
-
|
|
2825
|
-
touchEvt$1 = evt;
|
|
2484
|
+
y = (evt.touches ? evt.touches[0] : evt).clientY,
|
|
2485
|
+
elem = document.elementFromPoint(x, y);
|
|
2486
|
+
touchEvt$1 = evt;
|
|
2487
|
+
|
|
2488
|
+
// IE does not seem to have native autoscroll,
|
|
2826
2489
|
// Edge's autoscroll seems too conditional,
|
|
2827
2490
|
// MACOS Safari does not have autoscroll,
|
|
2828
2491
|
// Firefox and Chrome are good
|
|
2829
|
-
|
|
2830
2492
|
if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {
|
|
2831
|
-
autoScroll(evt, this.options, elem, fallback);
|
|
2493
|
+
autoScroll(evt, this.options, elem, fallback);
|
|
2832
2494
|
|
|
2495
|
+
// Listener for pointer element change
|
|
2833
2496
|
var ogElemScroller = getParentAutoScrollElement(elem, true);
|
|
2834
|
-
|
|
2835
2497
|
if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {
|
|
2836
|
-
pointerElemChangedInterval && clearPointerElemChangedInterval();
|
|
2837
|
-
|
|
2498
|
+
pointerElemChangedInterval && clearPointerElemChangedInterval();
|
|
2499
|
+
// Detect for pointer elem change, emulating native DnD behaviour
|
|
2838
2500
|
pointerElemChangedInterval = setInterval(function () {
|
|
2839
2501
|
var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);
|
|
2840
|
-
|
|
2841
2502
|
if (newElem !== ogElemScroller) {
|
|
2842
2503
|
ogElemScroller = newElem;
|
|
2843
2504
|
clearAutoScrolls();
|
|
2844
2505
|
}
|
|
2845
|
-
|
|
2846
2506
|
autoScroll(evt, _this.options, newElem, fallback);
|
|
2847
2507
|
}, 10);
|
|
2848
2508
|
lastAutoScrollX = x;
|
|
@@ -2854,7 +2514,6 @@ function AutoScrollPlugin() {
|
|
|
2854
2514
|
clearAutoScrolls();
|
|
2855
2515
|
return;
|
|
2856
2516
|
}
|
|
2857
|
-
|
|
2858
2517
|
autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);
|
|
2859
2518
|
}
|
|
2860
2519
|
}
|
|
@@ -2864,60 +2523,54 @@ function AutoScrollPlugin() {
|
|
|
2864
2523
|
initializeByDefault: true
|
|
2865
2524
|
});
|
|
2866
2525
|
}
|
|
2867
|
-
|
|
2868
2526
|
function clearAutoScrolls() {
|
|
2869
2527
|
autoScrolls.forEach(function (autoScroll) {
|
|
2870
2528
|
clearInterval(autoScroll.pid);
|
|
2871
2529
|
});
|
|
2872
2530
|
autoScrolls = [];
|
|
2873
2531
|
}
|
|
2874
|
-
|
|
2875
2532
|
function clearPointerElemChangedInterval() {
|
|
2876
2533
|
clearInterval(pointerElemChangedInterval);
|
|
2877
2534
|
}
|
|
2878
|
-
|
|
2879
2535
|
var autoScroll = throttle(function (evt, options, rootEl, isFallback) {
|
|
2880
2536
|
// Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521
|
|
2881
2537
|
if (!options.scroll) return;
|
|
2882
2538
|
var x = (evt.touches ? evt.touches[0] : evt).clientX,
|
|
2883
|
-
|
|
2884
|
-
|
|
2885
|
-
|
|
2886
|
-
|
|
2539
|
+
y = (evt.touches ? evt.touches[0] : evt).clientY,
|
|
2540
|
+
sens = options.scrollSensitivity,
|
|
2541
|
+
speed = options.scrollSpeed,
|
|
2542
|
+
winScroller = getWindowScrollingElement();
|
|
2887
2543
|
var scrollThisInstance = false,
|
|
2888
|
-
|
|
2544
|
+
scrollCustomFn;
|
|
2889
2545
|
|
|
2546
|
+
// New scroll root, set scrollEl
|
|
2890
2547
|
if (scrollRootEl !== rootEl) {
|
|
2891
2548
|
scrollRootEl = rootEl;
|
|
2892
2549
|
clearAutoScrolls();
|
|
2893
2550
|
scrollEl = options.scroll;
|
|
2894
2551
|
scrollCustomFn = options.scrollFn;
|
|
2895
|
-
|
|
2896
2552
|
if (scrollEl === true) {
|
|
2897
2553
|
scrollEl = getParentAutoScrollElement(rootEl, true);
|
|
2898
2554
|
}
|
|
2899
2555
|
}
|
|
2900
|
-
|
|
2901
2556
|
var layersOut = 0;
|
|
2902
2557
|
var currentParent = scrollEl;
|
|
2903
|
-
|
|
2904
2558
|
do {
|
|
2905
2559
|
var el = currentParent,
|
|
2906
|
-
|
|
2907
|
-
|
|
2908
|
-
|
|
2909
|
-
|
|
2910
|
-
|
|
2911
|
-
|
|
2912
|
-
|
|
2913
|
-
|
|
2914
|
-
|
|
2915
|
-
|
|
2916
|
-
|
|
2917
|
-
|
|
2918
|
-
|
|
2919
|
-
|
|
2920
|
-
|
|
2560
|
+
rect = getRect(el),
|
|
2561
|
+
top = rect.top,
|
|
2562
|
+
bottom = rect.bottom,
|
|
2563
|
+
left = rect.left,
|
|
2564
|
+
right = rect.right,
|
|
2565
|
+
width = rect.width,
|
|
2566
|
+
height = rect.height,
|
|
2567
|
+
canScrollX = void 0,
|
|
2568
|
+
canScrollY = void 0,
|
|
2569
|
+
scrollWidth = el.scrollWidth,
|
|
2570
|
+
scrollHeight = el.scrollHeight,
|
|
2571
|
+
elCSS = css(el),
|
|
2572
|
+
scrollPosX = el.scrollLeft,
|
|
2573
|
+
scrollPosY = el.scrollTop;
|
|
2921
2574
|
if (el === winScroller) {
|
|
2922
2575
|
canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');
|
|
2923
2576
|
canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');
|
|
@@ -2925,10 +2578,8 @@ var autoScroll = throttle(function (evt, options, rootEl, isFallback) {
|
|
|
2925
2578
|
canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');
|
|
2926
2579
|
canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');
|
|
2927
2580
|
}
|
|
2928
|
-
|
|
2929
2581
|
var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);
|
|
2930
2582
|
var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);
|
|
2931
|
-
|
|
2932
2583
|
if (!autoScrolls[layersOut]) {
|
|
2933
2584
|
for (var i = 0; i <= layersOut; i++) {
|
|
2934
2585
|
if (!autoScrolls[i]) {
|
|
@@ -2936,61 +2587,51 @@ var autoScroll = throttle(function (evt, options, rootEl, isFallback) {
|
|
|
2936
2587
|
}
|
|
2937
2588
|
}
|
|
2938
2589
|
}
|
|
2939
|
-
|
|
2940
2590
|
if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {
|
|
2941
2591
|
autoScrolls[layersOut].el = el;
|
|
2942
2592
|
autoScrolls[layersOut].vx = vx;
|
|
2943
2593
|
autoScrolls[layersOut].vy = vy;
|
|
2944
2594
|
clearInterval(autoScrolls[layersOut].pid);
|
|
2945
|
-
|
|
2946
2595
|
if (vx != 0 || vy != 0) {
|
|
2947
2596
|
scrollThisInstance = true;
|
|
2948
2597
|
/* jshint loopfunc:true */
|
|
2949
|
-
|
|
2950
2598
|
autoScrolls[layersOut].pid = setInterval(function () {
|
|
2951
2599
|
// emulate drag over during autoscroll (fallback), emulating native DnD behaviour
|
|
2952
2600
|
if (isFallback && this.layer === 0) {
|
|
2953
2601
|
Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely
|
|
2954
|
-
|
|
2955
2602
|
}
|
|
2956
|
-
|
|
2957
2603
|
var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;
|
|
2958
2604
|
var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;
|
|
2959
|
-
|
|
2960
2605
|
if (typeof scrollCustomFn === 'function') {
|
|
2961
2606
|
if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {
|
|
2962
2607
|
return;
|
|
2963
2608
|
}
|
|
2964
2609
|
}
|
|
2965
|
-
|
|
2966
2610
|
scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);
|
|
2967
2611
|
}.bind({
|
|
2968
2612
|
layer: layersOut
|
|
2969
2613
|
}), 24);
|
|
2970
2614
|
}
|
|
2971
2615
|
}
|
|
2972
|
-
|
|
2973
2616
|
layersOut++;
|
|
2974
2617
|
} while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));
|
|
2975
|
-
|
|
2976
2618
|
scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not
|
|
2977
2619
|
}, 30);
|
|
2978
2620
|
|
|
2979
2621
|
var drop = function drop(_ref) {
|
|
2980
2622
|
var originalEvent = _ref.originalEvent,
|
|
2981
|
-
|
|
2982
|
-
|
|
2983
|
-
|
|
2984
|
-
|
|
2985
|
-
|
|
2986
|
-
|
|
2623
|
+
putSortable = _ref.putSortable,
|
|
2624
|
+
dragEl = _ref.dragEl,
|
|
2625
|
+
activeSortable = _ref.activeSortable,
|
|
2626
|
+
dispatchSortableEvent = _ref.dispatchSortableEvent,
|
|
2627
|
+
hideGhostForTarget = _ref.hideGhostForTarget,
|
|
2628
|
+
unhideGhostForTarget = _ref.unhideGhostForTarget;
|
|
2987
2629
|
if (!originalEvent) return;
|
|
2988
2630
|
var toSortable = putSortable || activeSortable;
|
|
2989
2631
|
hideGhostForTarget();
|
|
2990
2632
|
var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;
|
|
2991
2633
|
var target = document.elementFromPoint(touch.clientX, touch.clientY);
|
|
2992
2634
|
unhideGhostForTarget();
|
|
2993
|
-
|
|
2994
2635
|
if (toSortable && !toSortable.el.contains(target)) {
|
|
2995
2636
|
dispatchSortableEvent('spill');
|
|
2996
2637
|
this.onSpill({
|
|
@@ -2999,9 +2640,7 @@ var drop = function drop(_ref) {
|
|
|
2999
2640
|
});
|
|
3000
2641
|
}
|
|
3001
2642
|
};
|
|
3002
|
-
|
|
3003
2643
|
function Revert() {}
|
|
3004
|
-
|
|
3005
2644
|
Revert.prototype = {
|
|
3006
2645
|
startIndex: null,
|
|
3007
2646
|
dragStart: function dragStart(_ref2) {
|
|
@@ -3010,40 +2649,32 @@ Revert.prototype = {
|
|
|
3010
2649
|
},
|
|
3011
2650
|
onSpill: function onSpill(_ref3) {
|
|
3012
2651
|
var dragEl = _ref3.dragEl,
|
|
3013
|
-
|
|
2652
|
+
putSortable = _ref3.putSortable;
|
|
3014
2653
|
this.sortable.captureAnimationState();
|
|
3015
|
-
|
|
3016
2654
|
if (putSortable) {
|
|
3017
2655
|
putSortable.captureAnimationState();
|
|
3018
2656
|
}
|
|
3019
|
-
|
|
3020
2657
|
var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);
|
|
3021
|
-
|
|
3022
2658
|
if (nextSibling) {
|
|
3023
2659
|
this.sortable.el.insertBefore(dragEl, nextSibling);
|
|
3024
2660
|
} else {
|
|
3025
2661
|
this.sortable.el.appendChild(dragEl);
|
|
3026
2662
|
}
|
|
3027
|
-
|
|
3028
2663
|
this.sortable.animateAll();
|
|
3029
|
-
|
|
3030
2664
|
if (putSortable) {
|
|
3031
2665
|
putSortable.animateAll();
|
|
3032
2666
|
}
|
|
3033
2667
|
},
|
|
3034
2668
|
drop: drop
|
|
3035
2669
|
};
|
|
3036
|
-
|
|
3037
2670
|
_extends(Revert, {
|
|
3038
2671
|
pluginName: 'revertOnSpill'
|
|
3039
2672
|
});
|
|
3040
|
-
|
|
3041
2673
|
function Remove() {}
|
|
3042
|
-
|
|
3043
2674
|
Remove.prototype = {
|
|
3044
2675
|
onSpill: function onSpill(_ref4) {
|
|
3045
2676
|
var dragEl = _ref4.dragEl,
|
|
3046
|
-
|
|
2677
|
+
putSortable = _ref4.putSortable;
|
|
3047
2678
|
var parentSortable = putSortable || this.sortable;
|
|
3048
2679
|
parentSortable.captureAnimationState();
|
|
3049
2680
|
dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);
|
|
@@ -3051,20 +2682,17 @@ Remove.prototype = {
|
|
|
3051
2682
|
},
|
|
3052
2683
|
drop: drop
|
|
3053
2684
|
};
|
|
3054
|
-
|
|
3055
2685
|
_extends(Remove, {
|
|
3056
2686
|
pluginName: 'removeOnSpill'
|
|
3057
2687
|
});
|
|
3058
2688
|
|
|
3059
2689
|
var lastSwapEl;
|
|
3060
|
-
|
|
3061
2690
|
function SwapPlugin() {
|
|
3062
2691
|
function Swap() {
|
|
3063
2692
|
this.defaults = {
|
|
3064
2693
|
swapClass: 'sortable-swap-highlight'
|
|
3065
2694
|
};
|
|
3066
2695
|
}
|
|
3067
|
-
|
|
3068
2696
|
Swap.prototype = {
|
|
3069
2697
|
dragStart: function dragStart(_ref) {
|
|
3070
2698
|
var dragEl = _ref.dragEl;
|
|
@@ -3072,42 +2700,37 @@ function SwapPlugin() {
|
|
|
3072
2700
|
},
|
|
3073
2701
|
dragOverValid: function dragOverValid(_ref2) {
|
|
3074
2702
|
var completed = _ref2.completed,
|
|
3075
|
-
|
|
3076
|
-
|
|
3077
|
-
|
|
3078
|
-
|
|
3079
|
-
|
|
2703
|
+
target = _ref2.target,
|
|
2704
|
+
onMove = _ref2.onMove,
|
|
2705
|
+
activeSortable = _ref2.activeSortable,
|
|
2706
|
+
changed = _ref2.changed,
|
|
2707
|
+
cancel = _ref2.cancel;
|
|
3080
2708
|
if (!activeSortable.options.swap) return;
|
|
3081
2709
|
var el = this.sortable.el,
|
|
3082
|
-
|
|
3083
|
-
|
|
2710
|
+
options = this.options;
|
|
3084
2711
|
if (target && target !== el) {
|
|
3085
2712
|
var prevSwapEl = lastSwapEl;
|
|
3086
|
-
|
|
3087
2713
|
if (onMove(target) !== false) {
|
|
3088
2714
|
toggleClass(target, options.swapClass, true);
|
|
3089
2715
|
lastSwapEl = target;
|
|
3090
2716
|
} else {
|
|
3091
2717
|
lastSwapEl = null;
|
|
3092
2718
|
}
|
|
3093
|
-
|
|
3094
2719
|
if (prevSwapEl && prevSwapEl !== lastSwapEl) {
|
|
3095
2720
|
toggleClass(prevSwapEl, options.swapClass, false);
|
|
3096
2721
|
}
|
|
3097
2722
|
}
|
|
3098
|
-
|
|
3099
2723
|
changed();
|
|
3100
2724
|
completed(true);
|
|
3101
2725
|
cancel();
|
|
3102
2726
|
},
|
|
3103
2727
|
drop: function drop(_ref3) {
|
|
3104
2728
|
var activeSortable = _ref3.activeSortable,
|
|
3105
|
-
|
|
3106
|
-
|
|
2729
|
+
putSortable = _ref3.putSortable,
|
|
2730
|
+
dragEl = _ref3.dragEl;
|
|
3107
2731
|
var toSortable = putSortable || this.sortable;
|
|
3108
2732
|
var options = this.options;
|
|
3109
2733
|
lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);
|
|
3110
|
-
|
|
3111
2734
|
if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {
|
|
3112
2735
|
if (dragEl !== lastSwapEl) {
|
|
3113
2736
|
toSortable.captureAnimationState();
|
|
@@ -3131,38 +2754,34 @@ function SwapPlugin() {
|
|
|
3131
2754
|
}
|
|
3132
2755
|
});
|
|
3133
2756
|
}
|
|
3134
|
-
|
|
3135
2757
|
function swapNodes(n1, n2) {
|
|
3136
2758
|
var p1 = n1.parentNode,
|
|
3137
|
-
|
|
3138
|
-
|
|
3139
|
-
|
|
2759
|
+
p2 = n2.parentNode,
|
|
2760
|
+
i1,
|
|
2761
|
+
i2;
|
|
3140
2762
|
if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;
|
|
3141
2763
|
i1 = index(n1);
|
|
3142
2764
|
i2 = index(n2);
|
|
3143
|
-
|
|
3144
2765
|
if (p1.isEqualNode(p2) && i1 < i2) {
|
|
3145
2766
|
i2++;
|
|
3146
2767
|
}
|
|
3147
|
-
|
|
3148
2768
|
p1.insertBefore(n2, p1.children[i1]);
|
|
3149
2769
|
p2.insertBefore(n1, p2.children[i2]);
|
|
3150
2770
|
}
|
|
3151
2771
|
|
|
3152
2772
|
var multiDragElements = [],
|
|
3153
|
-
|
|
3154
|
-
|
|
3155
|
-
|
|
3156
|
-
multiDragSortable,
|
|
3157
|
-
|
|
3158
|
-
|
|
3159
|
-
folding = false,
|
|
3160
|
-
|
|
3161
|
-
dragStarted = false,
|
|
3162
|
-
|
|
3163
|
-
|
|
3164
|
-
|
|
3165
|
-
|
|
2773
|
+
multiDragClones = [],
|
|
2774
|
+
lastMultiDragSelect,
|
|
2775
|
+
// for selection with modifier key down (SHIFT)
|
|
2776
|
+
multiDragSortable,
|
|
2777
|
+
initialFolding = false,
|
|
2778
|
+
// Initial multi-drag fold when drag started
|
|
2779
|
+
folding = false,
|
|
2780
|
+
// Folding any other time
|
|
2781
|
+
dragStarted = false,
|
|
2782
|
+
dragEl$1,
|
|
2783
|
+
clonesFromRect,
|
|
2784
|
+
clonesHidden;
|
|
3166
2785
|
function MultiDragPlugin() {
|
|
3167
2786
|
function MultiDrag(sortable) {
|
|
3168
2787
|
// Bind all private methods
|
|
@@ -3171,22 +2790,22 @@ function MultiDragPlugin() {
|
|
|
3171
2790
|
this[fn] = this[fn].bind(this);
|
|
3172
2791
|
}
|
|
3173
2792
|
}
|
|
3174
|
-
|
|
3175
|
-
|
|
3176
|
-
|
|
3177
|
-
|
|
3178
|
-
|
|
3179
|
-
|
|
2793
|
+
if (!sortable.options.avoidImplicitDeselect) {
|
|
2794
|
+
if (sortable.options.supportPointer) {
|
|
2795
|
+
on(document, 'pointerup', this._deselectMultiDrag);
|
|
2796
|
+
} else {
|
|
2797
|
+
on(document, 'mouseup', this._deselectMultiDrag);
|
|
2798
|
+
on(document, 'touchend', this._deselectMultiDrag);
|
|
2799
|
+
}
|
|
3180
2800
|
}
|
|
3181
|
-
|
|
3182
2801
|
on(document, 'keydown', this._checkKeyDown);
|
|
3183
2802
|
on(document, 'keyup', this._checkKeyUp);
|
|
3184
2803
|
this.defaults = {
|
|
3185
2804
|
selectedClass: 'sortable-selected',
|
|
3186
2805
|
multiDragKey: null,
|
|
2806
|
+
avoidImplicitDeselect: false,
|
|
3187
2807
|
setData: function setData(dataTransfer, dragEl) {
|
|
3188
2808
|
var data = '';
|
|
3189
|
-
|
|
3190
2809
|
if (multiDragElements.length && multiDragSortable === sortable) {
|
|
3191
2810
|
multiDragElements.forEach(function (multiDragElement, i) {
|
|
3192
2811
|
data += (!i ? '' : ', ') + multiDragElement.textContent;
|
|
@@ -3194,12 +2813,10 @@ function MultiDragPlugin() {
|
|
|
3194
2813
|
} else {
|
|
3195
2814
|
data = dragEl.textContent;
|
|
3196
2815
|
}
|
|
3197
|
-
|
|
3198
2816
|
dataTransfer.setData('Text', data);
|
|
3199
2817
|
}
|
|
3200
2818
|
};
|
|
3201
2819
|
}
|
|
3202
|
-
|
|
3203
2820
|
MultiDrag.prototype = {
|
|
3204
2821
|
multiDragKeyDown: false,
|
|
3205
2822
|
isMultiDrag: false,
|
|
@@ -3212,9 +2829,8 @@ function MultiDragPlugin() {
|
|
|
3212
2829
|
},
|
|
3213
2830
|
setupClone: function setupClone(_ref2) {
|
|
3214
2831
|
var sortable = _ref2.sortable,
|
|
3215
|
-
|
|
2832
|
+
cancel = _ref2.cancel;
|
|
3216
2833
|
if (!this.isMultiDrag) return;
|
|
3217
|
-
|
|
3218
2834
|
for (var i = 0; i < multiDragElements.length; i++) {
|
|
3219
2835
|
multiDragClones.push(clone(multiDragElements[i]));
|
|
3220
2836
|
multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;
|
|
@@ -3223,18 +2839,15 @@ function MultiDragPlugin() {
|
|
|
3223
2839
|
toggleClass(multiDragClones[i], this.options.selectedClass, false);
|
|
3224
2840
|
multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);
|
|
3225
2841
|
}
|
|
3226
|
-
|
|
3227
2842
|
sortable._hideClone();
|
|
3228
|
-
|
|
3229
2843
|
cancel();
|
|
3230
2844
|
},
|
|
3231
2845
|
clone: function clone(_ref3) {
|
|
3232
2846
|
var sortable = _ref3.sortable,
|
|
3233
|
-
|
|
3234
|
-
|
|
3235
|
-
|
|
2847
|
+
rootEl = _ref3.rootEl,
|
|
2848
|
+
dispatchSortableEvent = _ref3.dispatchSortableEvent,
|
|
2849
|
+
cancel = _ref3.cancel;
|
|
3236
2850
|
if (!this.isMultiDrag) return;
|
|
3237
|
-
|
|
3238
2851
|
if (!this.options.removeCloneOnHide) {
|
|
3239
2852
|
if (multiDragElements.length && multiDragSortable === sortable) {
|
|
3240
2853
|
insertMultiDragClones(true, rootEl);
|
|
@@ -3245,8 +2858,8 @@ function MultiDragPlugin() {
|
|
|
3245
2858
|
},
|
|
3246
2859
|
showClone: function showClone(_ref4) {
|
|
3247
2860
|
var cloneNowShown = _ref4.cloneNowShown,
|
|
3248
|
-
|
|
3249
|
-
|
|
2861
|
+
rootEl = _ref4.rootEl,
|
|
2862
|
+
cancel = _ref4.cancel;
|
|
3250
2863
|
if (!this.isMultiDrag) return;
|
|
3251
2864
|
insertMultiDragClones(false, rootEl);
|
|
3252
2865
|
multiDragClones.forEach(function (clone) {
|
|
@@ -3258,14 +2871,12 @@ function MultiDragPlugin() {
|
|
|
3258
2871
|
},
|
|
3259
2872
|
hideClone: function hideClone(_ref5) {
|
|
3260
2873
|
var _this = this;
|
|
3261
|
-
|
|
3262
2874
|
var sortable = _ref5.sortable,
|
|
3263
|
-
|
|
3264
|
-
|
|
2875
|
+
cloneNowHidden = _ref5.cloneNowHidden,
|
|
2876
|
+
cancel = _ref5.cancel;
|
|
3265
2877
|
if (!this.isMultiDrag) return;
|
|
3266
2878
|
multiDragClones.forEach(function (clone) {
|
|
3267
2879
|
css(clone, 'display', 'none');
|
|
3268
|
-
|
|
3269
2880
|
if (_this.options.removeCloneOnHide && clone.parentNode) {
|
|
3270
2881
|
clone.parentNode.removeChild(clone);
|
|
3271
2882
|
}
|
|
@@ -3276,15 +2887,14 @@ function MultiDragPlugin() {
|
|
|
3276
2887
|
},
|
|
3277
2888
|
dragStartGlobal: function dragStartGlobal(_ref6) {
|
|
3278
2889
|
var sortable = _ref6.sortable;
|
|
3279
|
-
|
|
3280
2890
|
if (!this.isMultiDrag && multiDragSortable) {
|
|
3281
2891
|
multiDragSortable.multiDrag._deselectMultiDrag();
|
|
3282
2892
|
}
|
|
3283
|
-
|
|
3284
2893
|
multiDragElements.forEach(function (multiDragElement) {
|
|
3285
2894
|
multiDragElement.sortableIndex = index(multiDragElement);
|
|
3286
|
-
});
|
|
2895
|
+
});
|
|
3287
2896
|
|
|
2897
|
+
// Sort multi-drag elements
|
|
3288
2898
|
multiDragElements = multiDragElements.sort(function (a, b) {
|
|
3289
2899
|
return a.sortableIndex - b.sortableIndex;
|
|
3290
2900
|
});
|
|
@@ -3292,10 +2902,8 @@ function MultiDragPlugin() {
|
|
|
3292
2902
|
},
|
|
3293
2903
|
dragStarted: function dragStarted(_ref7) {
|
|
3294
2904
|
var _this2 = this;
|
|
3295
|
-
|
|
3296
2905
|
var sortable = _ref7.sortable;
|
|
3297
2906
|
if (!this.isMultiDrag) return;
|
|
3298
|
-
|
|
3299
2907
|
if (this.options.sort) {
|
|
3300
2908
|
// Capture rects,
|
|
3301
2909
|
// hide multi drag elements (by positioning them absolute),
|
|
@@ -3303,8 +2911,8 @@ function MultiDragPlugin() {
|
|
|
3303
2911
|
// show multi drag elements,
|
|
3304
2912
|
// animate to rects,
|
|
3305
2913
|
// unset rects & remove from DOM
|
|
3306
|
-
sortable.captureAnimationState();
|
|
3307
2914
|
|
|
2915
|
+
sortable.captureAnimationState();
|
|
3308
2916
|
if (this.options.animation) {
|
|
3309
2917
|
multiDragElements.forEach(function (multiDragElement) {
|
|
3310
2918
|
if (multiDragElement === dragEl$1) return;
|
|
@@ -3319,18 +2927,16 @@ function MultiDragPlugin() {
|
|
|
3319
2927
|
initialFolding = true;
|
|
3320
2928
|
}
|
|
3321
2929
|
}
|
|
3322
|
-
|
|
3323
2930
|
sortable.animateAll(function () {
|
|
3324
2931
|
folding = false;
|
|
3325
2932
|
initialFolding = false;
|
|
3326
|
-
|
|
3327
2933
|
if (_this2.options.animation) {
|
|
3328
2934
|
multiDragElements.forEach(function (multiDragElement) {
|
|
3329
2935
|
unsetRect(multiDragElement);
|
|
3330
2936
|
});
|
|
3331
|
-
}
|
|
3332
|
-
|
|
2937
|
+
}
|
|
3333
2938
|
|
|
2939
|
+
// Remove all auxiliary multidrag items from el, if sorting enabled
|
|
3334
2940
|
if (_this2.options.sort) {
|
|
3335
2941
|
removeMultiDragElements();
|
|
3336
2942
|
}
|
|
@@ -3338,9 +2944,8 @@ function MultiDragPlugin() {
|
|
|
3338
2944
|
},
|
|
3339
2945
|
dragOver: function dragOver(_ref8) {
|
|
3340
2946
|
var target = _ref8.target,
|
|
3341
|
-
|
|
3342
|
-
|
|
3343
|
-
|
|
2947
|
+
completed = _ref8.completed,
|
|
2948
|
+
cancel = _ref8.cancel;
|
|
3344
2949
|
if (folding && ~multiDragElements.indexOf(target)) {
|
|
3345
2950
|
completed(false);
|
|
3346
2951
|
cancel();
|
|
@@ -3348,10 +2953,9 @@ function MultiDragPlugin() {
|
|
|
3348
2953
|
},
|
|
3349
2954
|
revert: function revert(_ref9) {
|
|
3350
2955
|
var fromSortable = _ref9.fromSortable,
|
|
3351
|
-
|
|
3352
|
-
|
|
3353
|
-
|
|
3354
|
-
|
|
2956
|
+
rootEl = _ref9.rootEl,
|
|
2957
|
+
sortable = _ref9.sortable,
|
|
2958
|
+
dragRect = _ref9.dragRect;
|
|
3355
2959
|
if (multiDragElements.length > 1) {
|
|
3356
2960
|
// Setup unfold animation
|
|
3357
2961
|
multiDragElements.forEach(function (multiDragElement) {
|
|
@@ -3369,47 +2973,44 @@ function MultiDragPlugin() {
|
|
|
3369
2973
|
},
|
|
3370
2974
|
dragOverCompleted: function dragOverCompleted(_ref10) {
|
|
3371
2975
|
var sortable = _ref10.sortable,
|
|
3372
|
-
|
|
3373
|
-
|
|
3374
|
-
|
|
3375
|
-
|
|
3376
|
-
|
|
2976
|
+
isOwner = _ref10.isOwner,
|
|
2977
|
+
insertion = _ref10.insertion,
|
|
2978
|
+
activeSortable = _ref10.activeSortable,
|
|
2979
|
+
parentEl = _ref10.parentEl,
|
|
2980
|
+
putSortable = _ref10.putSortable;
|
|
3377
2981
|
var options = this.options;
|
|
3378
|
-
|
|
3379
2982
|
if (insertion) {
|
|
3380
2983
|
// Clones must be hidden before folding animation to capture dragRectAbsolute properly
|
|
3381
2984
|
if (isOwner) {
|
|
3382
2985
|
activeSortable._hideClone();
|
|
3383
2986
|
}
|
|
3384
|
-
|
|
3385
|
-
|
|
3386
|
-
|
|
2987
|
+
initialFolding = false;
|
|
2988
|
+
// If leaving sort:false root, or already folding - Fold to new location
|
|
3387
2989
|
if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {
|
|
3388
2990
|
// Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible
|
|
3389
2991
|
var dragRectAbsolute = getRect(dragEl$1, false, true, true);
|
|
3390
2992
|
multiDragElements.forEach(function (multiDragElement) {
|
|
3391
2993
|
if (multiDragElement === dragEl$1) return;
|
|
3392
|
-
setRect(multiDragElement, dragRectAbsolute);
|
|
3393
|
-
// while folding, and so that we can capture them again because old sortable will no longer be fromSortable
|
|
2994
|
+
setRect(multiDragElement, dragRectAbsolute);
|
|
3394
2995
|
|
|
2996
|
+
// Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted
|
|
2997
|
+
// while folding, and so that we can capture them again because old sortable will no longer be fromSortable
|
|
3395
2998
|
parentEl.appendChild(multiDragElement);
|
|
3396
2999
|
});
|
|
3397
3000
|
folding = true;
|
|
3398
|
-
}
|
|
3399
|
-
|
|
3001
|
+
}
|
|
3400
3002
|
|
|
3003
|
+
// Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out
|
|
3401
3004
|
if (!isOwner) {
|
|
3402
3005
|
// Only remove if not folding (folding will remove them anyways)
|
|
3403
3006
|
if (!folding) {
|
|
3404
3007
|
removeMultiDragElements();
|
|
3405
3008
|
}
|
|
3406
|
-
|
|
3407
3009
|
if (multiDragElements.length > 1) {
|
|
3408
3010
|
var clonesHiddenBefore = clonesHidden;
|
|
3011
|
+
activeSortable._showClone(sortable);
|
|
3409
3012
|
|
|
3410
|
-
|
|
3411
|
-
|
|
3412
|
-
|
|
3013
|
+
// Unfold animation for clones if showing from hidden
|
|
3413
3014
|
if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {
|
|
3414
3015
|
multiDragClones.forEach(function (clone) {
|
|
3415
3016
|
activeSortable.addAnimationState({
|
|
@@ -3428,12 +3029,11 @@ function MultiDragPlugin() {
|
|
|
3428
3029
|
},
|
|
3429
3030
|
dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {
|
|
3430
3031
|
var dragRect = _ref11.dragRect,
|
|
3431
|
-
|
|
3432
|
-
|
|
3032
|
+
isOwner = _ref11.isOwner,
|
|
3033
|
+
activeSortable = _ref11.activeSortable;
|
|
3433
3034
|
multiDragElements.forEach(function (multiDragElement) {
|
|
3434
3035
|
multiDragElement.thisAnimationDuration = null;
|
|
3435
3036
|
});
|
|
3436
|
-
|
|
3437
3037
|
if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {
|
|
3438
3038
|
clonesFromRect = _extends({}, dragRect);
|
|
3439
3039
|
var dragMatrix = matrix(dragEl$1, true);
|
|
@@ -3449,24 +3049,23 @@ function MultiDragPlugin() {
|
|
|
3449
3049
|
},
|
|
3450
3050
|
drop: function drop(_ref12) {
|
|
3451
3051
|
var evt = _ref12.originalEvent,
|
|
3452
|
-
|
|
3453
|
-
|
|
3454
|
-
|
|
3455
|
-
|
|
3456
|
-
|
|
3457
|
-
|
|
3052
|
+
rootEl = _ref12.rootEl,
|
|
3053
|
+
parentEl = _ref12.parentEl,
|
|
3054
|
+
sortable = _ref12.sortable,
|
|
3055
|
+
dispatchSortableEvent = _ref12.dispatchSortableEvent,
|
|
3056
|
+
oldIndex = _ref12.oldIndex,
|
|
3057
|
+
putSortable = _ref12.putSortable;
|
|
3458
3058
|
var toSortable = putSortable || this.sortable;
|
|
3459
3059
|
if (!evt) return;
|
|
3460
3060
|
var options = this.options,
|
|
3461
|
-
|
|
3061
|
+
children = parentEl.children;
|
|
3462
3062
|
|
|
3063
|
+
// Multi-drag selection
|
|
3463
3064
|
if (!dragStarted) {
|
|
3464
3065
|
if (options.multiDragKey && !this.multiDragKeyDown) {
|
|
3465
3066
|
this._deselectMultiDrag();
|
|
3466
3067
|
}
|
|
3467
|
-
|
|
3468
3068
|
toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));
|
|
3469
|
-
|
|
3470
3069
|
if (!~multiDragElements.indexOf(dragEl$1)) {
|
|
3471
3070
|
multiDragElements.push(dragEl$1);
|
|
3472
3071
|
dispatchEvent({
|
|
@@ -3474,18 +3073,17 @@ function MultiDragPlugin() {
|
|
|
3474
3073
|
rootEl: rootEl,
|
|
3475
3074
|
name: 'select',
|
|
3476
3075
|
targetEl: dragEl$1,
|
|
3477
|
-
|
|
3478
|
-
});
|
|
3076
|
+
originalEvent: evt
|
|
3077
|
+
});
|
|
3479
3078
|
|
|
3079
|
+
// Modifier activated, select from last to dragEl
|
|
3480
3080
|
if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {
|
|
3481
3081
|
var lastIndex = index(lastMultiDragSelect),
|
|
3482
|
-
|
|
3483
|
-
|
|
3082
|
+
currentIndex = index(dragEl$1);
|
|
3484
3083
|
if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {
|
|
3485
3084
|
// Must include lastMultiDragSelect (select it), in case modified selection from no selection
|
|
3486
3085
|
// (but previous selection existed)
|
|
3487
3086
|
var n, i;
|
|
3488
|
-
|
|
3489
3087
|
if (currentIndex > lastIndex) {
|
|
3490
3088
|
i = lastIndex;
|
|
3491
3089
|
n = currentIndex;
|
|
@@ -3493,7 +3091,6 @@ function MultiDragPlugin() {
|
|
|
3493
3091
|
i = currentIndex;
|
|
3494
3092
|
n = lastIndex + 1;
|
|
3495
3093
|
}
|
|
3496
|
-
|
|
3497
3094
|
for (; i < n; i++) {
|
|
3498
3095
|
if (~multiDragElements.indexOf(children[i])) continue;
|
|
3499
3096
|
toggleClass(children[i], options.selectedClass, true);
|
|
@@ -3503,14 +3100,13 @@ function MultiDragPlugin() {
|
|
|
3503
3100
|
rootEl: rootEl,
|
|
3504
3101
|
name: 'select',
|
|
3505
3102
|
targetEl: children[i],
|
|
3506
|
-
|
|
3103
|
+
originalEvent: evt
|
|
3507
3104
|
});
|
|
3508
3105
|
}
|
|
3509
3106
|
}
|
|
3510
3107
|
} else {
|
|
3511
3108
|
lastMultiDragSelect = dragEl$1;
|
|
3512
3109
|
}
|
|
3513
|
-
|
|
3514
3110
|
multiDragSortable = toSortable;
|
|
3515
3111
|
} else {
|
|
3516
3112
|
multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);
|
|
@@ -3520,41 +3116,40 @@ function MultiDragPlugin() {
|
|
|
3520
3116
|
rootEl: rootEl,
|
|
3521
3117
|
name: 'deselect',
|
|
3522
3118
|
targetEl: dragEl$1,
|
|
3523
|
-
|
|
3119
|
+
originalEvent: evt
|
|
3524
3120
|
});
|
|
3525
3121
|
}
|
|
3526
|
-
}
|
|
3527
|
-
|
|
3122
|
+
}
|
|
3528
3123
|
|
|
3124
|
+
// Multi-drag drop
|
|
3529
3125
|
if (dragStarted && this.isMultiDrag) {
|
|
3530
|
-
folding = false;
|
|
3531
|
-
|
|
3126
|
+
folding = false;
|
|
3127
|
+
// Do not "unfold" after around dragEl if reverted
|
|
3532
3128
|
if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {
|
|
3533
3129
|
var dragRect = getRect(dragEl$1),
|
|
3534
|
-
|
|
3130
|
+
multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');
|
|
3535
3131
|
if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;
|
|
3536
3132
|
toSortable.captureAnimationState();
|
|
3537
|
-
|
|
3538
3133
|
if (!initialFolding) {
|
|
3539
3134
|
if (options.animation) {
|
|
3540
3135
|
dragEl$1.fromRect = dragRect;
|
|
3541
3136
|
multiDragElements.forEach(function (multiDragElement) {
|
|
3542
3137
|
multiDragElement.thisAnimationDuration = null;
|
|
3543
|
-
|
|
3544
3138
|
if (multiDragElement !== dragEl$1) {
|
|
3545
3139
|
var rect = folding ? getRect(multiDragElement) : dragRect;
|
|
3546
|
-
multiDragElement.fromRect = rect;
|
|
3140
|
+
multiDragElement.fromRect = rect;
|
|
3547
3141
|
|
|
3142
|
+
// Prepare unfold animation
|
|
3548
3143
|
toSortable.addAnimationState({
|
|
3549
3144
|
target: multiDragElement,
|
|
3550
3145
|
rect: rect
|
|
3551
3146
|
});
|
|
3552
3147
|
}
|
|
3553
3148
|
});
|
|
3554
|
-
}
|
|
3555
|
-
// properly they must all be removed
|
|
3556
|
-
|
|
3149
|
+
}
|
|
3557
3150
|
|
|
3151
|
+
// Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert
|
|
3152
|
+
// properly they must all be removed
|
|
3558
3153
|
removeMultiDragElements();
|
|
3559
3154
|
multiDragElements.forEach(function (multiDragElement) {
|
|
3560
3155
|
if (children[multiDragIndex]) {
|
|
@@ -3562,12 +3157,12 @@ function MultiDragPlugin() {
|
|
|
3562
3157
|
} else {
|
|
3563
3158
|
parentEl.appendChild(multiDragElement);
|
|
3564
3159
|
}
|
|
3565
|
-
|
|
3566
3160
|
multiDragIndex++;
|
|
3567
|
-
});
|
|
3161
|
+
});
|
|
3162
|
+
|
|
3163
|
+
// If initial folding is done, the elements may have changed position because they are now
|
|
3568
3164
|
// unfolding around dragEl, even though dragEl may not have his index changed, so update event
|
|
3569
3165
|
// must be fired here as Sortable will not.
|
|
3570
|
-
|
|
3571
3166
|
if (oldIndex === index(dragEl$1)) {
|
|
3572
3167
|
var update = false;
|
|
3573
3168
|
multiDragElements.forEach(function (multiDragElement) {
|
|
@@ -3576,24 +3171,23 @@ function MultiDragPlugin() {
|
|
|
3576
3171
|
return;
|
|
3577
3172
|
}
|
|
3578
3173
|
});
|
|
3579
|
-
|
|
3580
3174
|
if (update) {
|
|
3581
3175
|
dispatchSortableEvent('update');
|
|
3176
|
+
dispatchSortableEvent('sort');
|
|
3582
3177
|
}
|
|
3583
3178
|
}
|
|
3584
|
-
}
|
|
3585
|
-
|
|
3179
|
+
}
|
|
3586
3180
|
|
|
3181
|
+
// Must be done after capturing individual rects (scroll bar)
|
|
3587
3182
|
multiDragElements.forEach(function (multiDragElement) {
|
|
3588
3183
|
unsetRect(multiDragElement);
|
|
3589
3184
|
});
|
|
3590
3185
|
toSortable.animateAll();
|
|
3591
3186
|
}
|
|
3592
|
-
|
|
3593
3187
|
multiDragSortable = toSortable;
|
|
3594
|
-
}
|
|
3595
|
-
|
|
3188
|
+
}
|
|
3596
3189
|
|
|
3190
|
+
// Remove clones if necessary
|
|
3597
3191
|
if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {
|
|
3598
3192
|
multiDragClones.forEach(function (clone) {
|
|
3599
3193
|
clone.parentNode && clone.parentNode.removeChild(clone);
|
|
@@ -3606,7 +3200,6 @@ function MultiDragPlugin() {
|
|
|
3606
3200
|
},
|
|
3607
3201
|
destroyGlobal: function destroyGlobal() {
|
|
3608
3202
|
this._deselectMultiDrag();
|
|
3609
|
-
|
|
3610
3203
|
off(document, 'pointerup', this._deselectMultiDrag);
|
|
3611
3204
|
off(document, 'mouseup', this._deselectMultiDrag);
|
|
3612
3205
|
off(document, 'touchend', this._deselectMultiDrag);
|
|
@@ -3614,14 +3207,16 @@ function MultiDragPlugin() {
|
|
|
3614
3207
|
off(document, 'keyup', this._checkKeyUp);
|
|
3615
3208
|
},
|
|
3616
3209
|
_deselectMultiDrag: function _deselectMultiDrag(evt) {
|
|
3617
|
-
if (typeof dragStarted !== "undefined" && dragStarted) return;
|
|
3210
|
+
if (typeof dragStarted !== "undefined" && dragStarted) return;
|
|
3618
3211
|
|
|
3619
|
-
|
|
3212
|
+
// Only deselect if selection is in this sortable
|
|
3213
|
+
if (multiDragSortable !== this.sortable) return;
|
|
3620
3214
|
|
|
3621
|
-
|
|
3215
|
+
// Only deselect if target is not item in this sortable
|
|
3216
|
+
if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;
|
|
3622
3217
|
|
|
3218
|
+
// Only deselect if left click
|
|
3623
3219
|
if (evt && evt.button !== 0) return;
|
|
3624
|
-
|
|
3625
3220
|
while (multiDragElements.length) {
|
|
3626
3221
|
var el = multiDragElements[0];
|
|
3627
3222
|
toggleClass(el, this.options.selectedClass, false);
|
|
@@ -3631,7 +3226,7 @@ function MultiDragPlugin() {
|
|
|
3631
3226
|
rootEl: this.sortable.el,
|
|
3632
3227
|
name: 'deselect',
|
|
3633
3228
|
targetEl: el,
|
|
3634
|
-
|
|
3229
|
+
originalEvent: evt
|
|
3635
3230
|
});
|
|
3636
3231
|
}
|
|
3637
3232
|
},
|
|
@@ -3650,31 +3245,27 @@ function MultiDragPlugin() {
|
|
|
3650
3245
|
// Static methods & properties
|
|
3651
3246
|
pluginName: 'multiDrag',
|
|
3652
3247
|
utils: {
|
|
3653
|
-
/**
|
|
3654
|
-
* Selects the provided multi-drag item
|
|
3655
|
-
* @param {HTMLElement} el The element to be selected
|
|
3248
|
+
/**
|
|
3249
|
+
* Selects the provided multi-drag item
|
|
3250
|
+
* @param {HTMLElement} el The element to be selected
|
|
3656
3251
|
*/
|
|
3657
3252
|
select: function select(el) {
|
|
3658
3253
|
var sortable = el.parentNode[expando];
|
|
3659
3254
|
if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;
|
|
3660
|
-
|
|
3661
3255
|
if (multiDragSortable && multiDragSortable !== sortable) {
|
|
3662
3256
|
multiDragSortable.multiDrag._deselectMultiDrag();
|
|
3663
|
-
|
|
3664
3257
|
multiDragSortable = sortable;
|
|
3665
3258
|
}
|
|
3666
|
-
|
|
3667
3259
|
toggleClass(el, sortable.options.selectedClass, true);
|
|
3668
3260
|
multiDragElements.push(el);
|
|
3669
3261
|
},
|
|
3670
|
-
|
|
3671
|
-
|
|
3672
|
-
*
|
|
3673
|
-
* @param {HTMLElement} el The element to be deselected
|
|
3262
|
+
/**
|
|
3263
|
+
* Deselects the provided multi-drag item
|
|
3264
|
+
* @param {HTMLElement} el The element to be deselected
|
|
3674
3265
|
*/
|
|
3675
3266
|
deselect: function deselect(el) {
|
|
3676
3267
|
var sortable = el.parentNode[expando],
|
|
3677
|
-
|
|
3268
|
+
index = multiDragElements.indexOf(el);
|
|
3678
3269
|
if (!sortable || !sortable.options.multiDrag || !~index) return;
|
|
3679
3270
|
toggleClass(el, sortable.options.selectedClass, false);
|
|
3680
3271
|
multiDragElements.splice(index, 1);
|
|
@@ -3682,17 +3273,16 @@ function MultiDragPlugin() {
|
|
|
3682
3273
|
},
|
|
3683
3274
|
eventProperties: function eventProperties() {
|
|
3684
3275
|
var _this3 = this;
|
|
3685
|
-
|
|
3686
3276
|
var oldIndicies = [],
|
|
3687
|
-
|
|
3277
|
+
newIndicies = [];
|
|
3688
3278
|
multiDragElements.forEach(function (multiDragElement) {
|
|
3689
3279
|
oldIndicies.push({
|
|
3690
3280
|
multiDragElement: multiDragElement,
|
|
3691
3281
|
index: multiDragElement.sortableIndex
|
|
3692
|
-
});
|
|
3282
|
+
});
|
|
3693
3283
|
|
|
3284
|
+
// multiDragElements will already be sorted if folding
|
|
3694
3285
|
var newIndex;
|
|
3695
|
-
|
|
3696
3286
|
if (folding && multiDragElement !== dragEl$1) {
|
|
3697
3287
|
newIndex = -1;
|
|
3698
3288
|
} else if (folding) {
|
|
@@ -3700,7 +3290,6 @@ function MultiDragPlugin() {
|
|
|
3700
3290
|
} else {
|
|
3701
3291
|
newIndex = index(multiDragElement);
|
|
3702
3292
|
}
|
|
3703
|
-
|
|
3704
3293
|
newIndicies.push({
|
|
3705
3294
|
multiDragElement: multiDragElement,
|
|
3706
3295
|
index: newIndex
|
|
@@ -3716,23 +3305,19 @@ function MultiDragPlugin() {
|
|
|
3716
3305
|
optionListeners: {
|
|
3717
3306
|
multiDragKey: function multiDragKey(key) {
|
|
3718
3307
|
key = key.toLowerCase();
|
|
3719
|
-
|
|
3720
3308
|
if (key === 'ctrl') {
|
|
3721
3309
|
key = 'Control';
|
|
3722
3310
|
} else if (key.length > 1) {
|
|
3723
3311
|
key = key.charAt(0).toUpperCase() + key.substr(1);
|
|
3724
3312
|
}
|
|
3725
|
-
|
|
3726
3313
|
return key;
|
|
3727
3314
|
}
|
|
3728
3315
|
}
|
|
3729
3316
|
});
|
|
3730
3317
|
}
|
|
3731
|
-
|
|
3732
3318
|
function insertMultiDragElements(clonesInserted, rootEl) {
|
|
3733
3319
|
multiDragElements.forEach(function (multiDragElement, i) {
|
|
3734
3320
|
var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];
|
|
3735
|
-
|
|
3736
3321
|
if (target) {
|
|
3737
3322
|
rootEl.insertBefore(multiDragElement, target);
|
|
3738
3323
|
} else {
|
|
@@ -3740,17 +3325,15 @@ function insertMultiDragElements(clonesInserted, rootEl) {
|
|
|
3740
3325
|
}
|
|
3741
3326
|
});
|
|
3742
3327
|
}
|
|
3743
|
-
/**
|
|
3744
|
-
* Insert multi-drag clones
|
|
3745
|
-
* @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted
|
|
3746
|
-
* @param {HTMLElement} rootEl
|
|
3747
|
-
*/
|
|
3748
|
-
|
|
3749
3328
|
|
|
3329
|
+
/**
|
|
3330
|
+
* Insert multi-drag clones
|
|
3331
|
+
* @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted
|
|
3332
|
+
* @param {HTMLElement} rootEl
|
|
3333
|
+
*/
|
|
3750
3334
|
function insertMultiDragClones(elementsInserted, rootEl) {
|
|
3751
3335
|
multiDragClones.forEach(function (clone, i) {
|
|
3752
3336
|
var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];
|
|
3753
|
-
|
|
3754
3337
|
if (target) {
|
|
3755
3338
|
rootEl.insertBefore(clone, target);
|
|
3756
3339
|
} else {
|
|
@@ -3758,7 +3341,6 @@ function insertMultiDragClones(elementsInserted, rootEl) {
|
|
|
3758
3341
|
}
|
|
3759
3342
|
});
|
|
3760
3343
|
}
|
|
3761
|
-
|
|
3762
3344
|
function removeMultiDragElements() {
|
|
3763
3345
|
multiDragElements.forEach(function (multiDragElement) {
|
|
3764
3346
|
if (multiDragElement === dragEl$1) return;
|