|
1 | 1 | /*@preserve
|
2 |
| - * Dragster - drag'n'drop library v1.4.1 |
| 2 | + * Dragster - drag'n'drop library v1.4.2 |
3 | 3 | * https://github.com/sunpietro/dragster
|
4 | 4 | *
|
5 | 5 | * Copyright 2015-2017 Piotr Nalepa
|
|
8 | 8 | * Released under the MIT license
|
9 | 9 | * https://github.com/sunpietro/dragster/blob/master/LICENSE
|
10 | 10 | *
|
11 |
| - * Date: 2017-02-07T16:30Z |
| 11 | + * Date: 2017-03-30T16:30Z |
12 | 12 | */
|
13 | 13 | (function (window, document) {
|
14 | 14 | 'use strict';
|
|
171 | 171 | updateRegionsHeight,
|
172 | 172 | scrollWindow,
|
173 | 173 | discoverWindowHeight,
|
| 174 | + resetDragsterWorkspace, |
174 | 175 | dropActions,
|
175 | 176 | moveActions,
|
176 | 177 | shadowElementPositionXDiff,
|
|
481 | 482 | }
|
482 | 483 | };
|
483 | 484 |
|
| 485 | + /** |
| 486 | + * Resets DragsterJS workspace by removing mouseup/touchend event listeners |
| 487 | + * |
| 488 | + * @method resetDragsterWorkspace |
| 489 | + * @private |
| 490 | + * @param moveEvent {String} move event name (either mousemove or touchmove) |
| 491 | + * @param upEvent {String} up event name (either mouseup or touchend) |
| 492 | + */ |
| 493 | + resetDragsterWorkspace = function (moveEvent, upEvent) { |
| 494 | + cleanWorkspace(draggedElement, moveEvent); |
| 495 | + cleanWorkspace(draggedElement, upEvent); |
| 496 | + }; |
| 497 | + |
484 | 498 | regionEventHandlers = {
|
485 | 499 | /*
|
486 | 500 | * `mousedown` or `touchstart` event handler.
|
|
495 | 509 | if (finalParams.dragHandleCssClass &&
|
496 | 510 | (typeof finalParams.dragHandleCssClass !== 'string' ||
|
497 | 511 | !event.target.classList.contains(finalParams.dragHandleCssClass))) {
|
498 |
| - return false; |
| 512 | + return FALSE; |
499 | 513 | }
|
500 | 514 |
|
501 | 515 | var targetRegion,
|
502 |
| - listenToEventName, |
| 516 | + moveEvent, |
| 517 | + upEvent, |
| 518 | + isTouch = event.type === EVT_TOUCHSTART, |
503 | 519 | eventObject = event.changedTouches ? event.changedTouches[0] : event;
|
504 | 520 |
|
505 | 521 | dragsterEventInfo = JSON.parse(JSON.stringify(defaultDragsterEventInfo));
|
506 |
| - |
507 | 522 | event.dragster = dragsterEventInfo;
|
508 | 523 |
|
509 | 524 | if (finalParams.onBeforeDragStart(event) === FALSE || event.which === 3 /* detect right click */) {
|
|
512 | 527 |
|
513 | 528 | event.preventDefault();
|
514 | 529 |
|
515 |
| - listenToEventName = event.type === EVT_TOUCHSTART ? EVT_TOUCHMOVE : EVT_MOUSEMOVE; |
516 |
| - |
517 |
| - regions.forEach(function (region) { |
518 |
| - region.addEventListener(listenToEventName, regionEventHandlers.mousemove); |
519 |
| - }); |
520 |
| - |
521 |
| - document.body.addEventListener(listenToEventName, regionEventHandlers.mousemove); |
522 |
| - |
523 | 530 | draggedElement = getElement(event.target, isDraggableCallback);
|
524 | 531 |
|
525 | 532 | if (!draggedElement) {
|
526 | 533 | return FALSE;
|
527 | 534 | }
|
528 | 535 |
|
| 536 | + moveEvent = isTouch ? EVT_TOUCHMOVE : EVT_MOUSEMOVE; |
| 537 | + upEvent = isTouch ? EVT_TOUCHEND : EVT_MOUSEUP; |
| 538 | + |
| 539 | + regions.forEach(function (region) { |
| 540 | + region.addEventListener(moveEvent, regionEventHandlers.mousemove, FALSE); |
| 541 | + region.addEventListener(upEvent, regionEventHandlers.mouseup, FALSE); |
| 542 | + }); |
| 543 | + |
| 544 | + document.body.addEventListener(moveEvent, regionEventHandlers.mousemove, FALSE); |
| 545 | + document.body.addEventListener(upEvent, regionEventHandlers.mouseup, FALSE); |
| 546 | + |
529 | 547 | targetRegion = draggedElement.getBoundingClientRect();
|
530 | 548 |
|
531 | 549 | shadowElementPositionXDiff = targetRegion.left - eventObject.clientX;
|
|
632 | 650 | mouseup: function (event) {
|
633 | 651 | event.dragster = dragsterEventInfo;
|
634 | 652 |
|
| 653 | + var isTouch = event.type === EVT_TOUCHSTART, |
| 654 | + moveEvent = isTouch ? EVT_TOUCHMOVE : EVT_MOUSEMOVE, |
| 655 | + upEvent = isTouch ? EVT_TOUCHEND : EVT_MOUSEUP, |
| 656 | + findByClass, |
| 657 | + dropTarget, |
| 658 | + dropDraggableTarget, |
| 659 | + isFromDragOnlyRegion, |
| 660 | + canBeCloned; |
| 661 | + |
635 | 662 | if (finalParams.onBeforeDragEnd(event) === FALSE) {
|
| 663 | + resetDragsterWorkspace(moveEvent, upEvent); |
| 664 | + |
636 | 665 | return FALSE;
|
637 | 666 | }
|
638 | 667 |
|
639 |
| - var findByClass = finalParams.replaceElements ? CLASS_REPLACABLE : CLASS_PLACEHOLDER, |
640 |
| - dropTarget = document.getElementsByClassName(findByClass)[0], |
641 |
| - dropDraggableTarget, |
642 |
| - isFromDragOnlyRegion = !!(draggedElement && getElement(draggedElement, isInDragOnlyRegionCallback)), |
643 |
| - unlistenToEventName = event.type === EVT_TOUCHSTART ? EVT_TOUCHMOVE : EVT_MOUSEMOVE, |
644 |
| - canBeCloned = finalParams.cloneElements && isFromDragOnlyRegion; |
| 668 | + findByClass = finalParams.replaceElements ? CLASS_REPLACABLE : CLASS_PLACEHOLDER; |
| 669 | + dropTarget = document.getElementsByClassName(findByClass)[0]; |
| 670 | + isFromDragOnlyRegion = !!(draggedElement && getElement(draggedElement, isInDragOnlyRegionCallback)), |
| 671 | + canBeCloned = finalParams.cloneElements && isFromDragOnlyRegion; |
645 | 672 |
|
646 |
| - hideShadowElementTimeout = setTimeout(function () { |
647 |
| - cleanWorkspace(draggedElement, unlistenToEventName); |
648 |
| - }, 200); |
| 673 | + hideShadowElementTimeout = setTimeout(resetDragsterWorkspace, 200); |
649 | 674 |
|
650 | 675 | cleanReplacables();
|
651 | 676 |
|
652 | 677 | if (!draggedElement || !dropTarget) {
|
653 |
| - cleanWorkspace(draggedElement, unlistenToEventName); |
| 678 | + resetDragsterWorkspace(moveEvent, upEvent); |
654 | 679 |
|
655 | 680 | return FALSE;
|
656 | 681 | }
|
|
676 | 701 | dropDraggableTarget.classList.remove(CLASS_DRAGOVER);
|
677 | 702 | }
|
678 | 703 |
|
679 |
| - cleanWorkspace(draggedElement, unlistenToEventName); |
| 704 | + resetDragsterWorkspace(moveEvent, upEvent); |
680 | 705 |
|
681 | 706 | finalParams.onAfterDragEnd(event);
|
682 | 707 | }
|
|
892 | 917 |
|
893 | 918 | wrapDraggableElements(draggableElements);
|
894 | 919 |
|
895 |
| - document.body.addEventListener(EVT_MOUSEUP, regionEventHandlers.mouseup, FALSE); |
896 |
| - document.body.addEventListener(EVT_TOUCHEND, regionEventHandlers.mouseup, FALSE); |
897 |
| - |
898 | 920 | // add `mousedown`/`touchstart` and `mouseup`/`touchend` event listeners to regions
|
899 | 921 | regions.forEach(function (region) {
|
900 | 922 | region.classList.add(CLASS_REGION);
|
901 | 923 | region.dataset.dragsterId = dragsterId;
|
902 | 924 |
|
903 | 925 | region.addEventListener(EVT_MOUSEDOWN, regionEventHandlers.mousedown, FALSE);
|
904 |
| - region.addEventListener(EVT_MOUSEUP, regionEventHandlers.mouseup, FALSE); |
905 |
| - |
906 | 926 | region.addEventListener(EVT_TOUCHSTART, regionEventHandlers.mousedown, FALSE);
|
907 |
| - region.addEventListener(EVT_TOUCHEND, regionEventHandlers.mouseup, FALSE); |
| 927 | + |
908 | 928 | });
|
909 | 929 |
|
910 | 930 | window.addEventListener('resize', discoverWindowHeight, false);
|
|
0 commit comments