|
73 | 73 | supportDraggable = !!('draggable' in document.createElement('div')), |
74 | 74 | supportCssPointerEvents = (function (el) { |
75 | 75 | // false when IE11 |
76 | | - if (!!navigator.userAgent.match(/Trident.*rv[ :]?11\./)) { |
| 76 | + if (!!navigator.userAgent.match(/(?:Trident.*rv[ :]?11\.|msie)/i)) { |
77 | 77 | return false; |
78 | 78 | } |
79 | 79 | el = document.createElement('x'); |
|
326 | 326 | return; // only left button or enabled |
327 | 327 | } |
328 | 328 |
|
| 329 | + // cancel dnd if original target is content editable |
| 330 | + if (originalTarget.isContentEditable) { |
| 331 | + return; |
| 332 | + } |
329 | 333 |
|
330 | 334 | target = _closest(target, options.draggable, el); |
331 | 335 |
|
|
344 | 348 | // Check filter |
345 | 349 | if (typeof filter === 'function') { |
346 | 350 | if (filter.call(this, evt, target, this)) { |
347 | | - _dispatchEvent(_this, originalTarget, 'filter', target, el, startIndex); |
| 351 | + _dispatchEvent(_this, originalTarget, 'filter', target, el, el, startIndex); |
348 | 352 | preventOnFilter && evt.preventDefault(); |
349 | 353 | return; // cancel dnd |
350 | 354 | } |
|
354 | 358 | criteria = _closest(originalTarget, criteria.trim(), el); |
355 | 359 |
|
356 | 360 | if (criteria) { |
357 | | - _dispatchEvent(_this, criteria, 'filter', target, el, startIndex); |
| 361 | + _dispatchEvent(_this, criteria, 'filter', target, el, el, startIndex); |
358 | 362 | return true; |
359 | 363 | } |
360 | 364 | }); |
|
411 | 415 | _this._triggerDragStart(evt, touch); |
412 | 416 |
|
413 | 417 | // Drag start event |
414 | | - _dispatchEvent(_this, rootEl, 'choose', dragEl, rootEl, oldIndex); |
| 418 | + _dispatchEvent(_this, rootEl, 'choose', dragEl, rootEl, rootEl, oldIndex); |
415 | 419 | }; |
416 | 420 |
|
417 | 421 | // Disable "draggable" |
|
502 | 506 | Sortable.active = this; |
503 | 507 |
|
504 | 508 | // Drag start event |
505 | | - _dispatchEvent(this, rootEl, 'start', dragEl, rootEl, oldIndex); |
| 509 | + _dispatchEvent(this, rootEl, 'start', dragEl, rootEl, rootEl, oldIndex); |
506 | 510 | } else { |
507 | 511 | this._nulling(); |
508 | 512 | } |
|
915 | 919 | _toggleClass(dragEl, this.options.chosenClass, false); |
916 | 920 |
|
917 | 921 | // Drag stop event |
918 | | - _dispatchEvent(this, rootEl, 'unchoose', dragEl, rootEl, oldIndex); |
| 922 | + _dispatchEvent(this, rootEl, 'unchoose', dragEl, parentEl, rootEl, oldIndex); |
919 | 923 |
|
920 | 924 | if (rootEl !== parentEl) { |
921 | 925 | newIndex = _index(dragEl, options.draggable); |
922 | 926 |
|
923 | 927 | if (newIndex >= 0) { |
924 | 928 | // Add event |
925 | | - _dispatchEvent(null, parentEl, 'add', dragEl, rootEl, oldIndex, newIndex); |
| 929 | + _dispatchEvent(null, parentEl, 'add', dragEl, parentEl, rootEl, oldIndex, newIndex); |
926 | 930 |
|
927 | 931 | // Remove event |
928 | | - _dispatchEvent(this, rootEl, 'remove', dragEl, rootEl, oldIndex, newIndex); |
| 932 | + _dispatchEvent(this, rootEl, 'remove', dragEl, parentEl, rootEl, oldIndex, newIndex); |
929 | 933 |
|
930 | 934 | // drag from one list and drop into another |
931 | | - _dispatchEvent(null, parentEl, 'sort', dragEl, rootEl, oldIndex, newIndex); |
932 | | - _dispatchEvent(this, rootEl, 'sort', dragEl, rootEl, oldIndex, newIndex); |
| 935 | + _dispatchEvent(null, parentEl, 'sort', dragEl, parentEl, rootEl, oldIndex, newIndex); |
| 936 | + _dispatchEvent(this, rootEl, 'sort', dragEl, parentEl, rootEl, oldIndex, newIndex); |
933 | 937 | } |
934 | 938 | } |
935 | 939 | else { |
|
939 | 943 |
|
940 | 944 | if (newIndex >= 0) { |
941 | 945 | // drag & drop within the same list |
942 | | - _dispatchEvent(this, rootEl, 'update', dragEl, rootEl, oldIndex, newIndex); |
943 | | - _dispatchEvent(this, rootEl, 'sort', dragEl, rootEl, oldIndex, newIndex); |
| 946 | + _dispatchEvent(this, rootEl, 'update', dragEl, parentEl, rootEl, oldIndex, newIndex); |
| 947 | + _dispatchEvent(this, rootEl, 'sort', dragEl, parentEl, rootEl, oldIndex, newIndex); |
944 | 948 | } |
945 | 949 | } |
946 | 950 | } |
|
951 | 955 | newIndex = oldIndex; |
952 | 956 | } |
953 | 957 |
|
954 | | - _dispatchEvent(this, rootEl, 'end', dragEl, rootEl, oldIndex, newIndex); |
| 958 | + _dispatchEvent(this, rootEl, 'end', dragEl, parentEl, rootEl, oldIndex, newIndex); |
955 | 959 |
|
956 | 960 | // Save sorting |
957 | 961 | this.save(); |
|
1256 | 1260 |
|
1257 | 1261 |
|
1258 | 1262 |
|
1259 | | - function _dispatchEvent(sortable, rootEl, name, targetEl, fromEl, startIndex, newIndex) { |
| 1263 | + function _dispatchEvent(sortable, rootEl, name, targetEl, toEl, fromEl, startIndex, newIndex) { |
1260 | 1264 | sortable = (sortable || rootEl[expando]); |
1261 | 1265 |
|
1262 | 1266 | var evt = document.createEvent('Event'), |
|
1265 | 1269 |
|
1266 | 1270 | evt.initEvent(name, true, true); |
1267 | 1271 |
|
1268 | | - evt.to = rootEl; |
| 1272 | + evt.to = toEl || rootEl; |
1269 | 1273 | evt.from = fromEl || rootEl; |
1270 | 1274 | evt.item = targetEl || rootEl; |
1271 | 1275 | evt.clone = cloneEl; |
|
1421 | 1425 | } |
1422 | 1426 |
|
1423 | 1427 | function _clone(el) { |
1424 | | - return $ |
1425 | | - ? $(el).clone(true)[0] |
1426 | | - : (Polymer && Polymer.dom |
1427 | | - ? Polymer.dom(el).cloneNode(true) |
1428 | | - : el.cloneNode(true) |
1429 | | - ); |
| 1428 | + if (Polymer && Polymer.dom) { |
| 1429 | + return Polymer.dom(el).cloneNode(true); |
| 1430 | + } |
| 1431 | + else if ($) { |
| 1432 | + return $(el).clone(true)[0]; |
| 1433 | + } |
| 1434 | + else { |
| 1435 | + return el.cloneNode(true); |
| 1436 | + } |
1430 | 1437 | } |
1431 | 1438 |
|
1432 | 1439 | function _saveInputCheckedState(root) { |
|
1439 | 1446 | } |
1440 | 1447 | } |
1441 | 1448 |
|
1442 | | - // Fixed #973: |
| 1449 | + // Fixed #973: |
1443 | 1450 | _on(document, 'touchmove', function (evt) { |
1444 | 1451 | if (Sortable.active) { |
1445 | 1452 | evt.preventDefault(); |
|
0 commit comments