Socket
Socket
Sign inDemoInstall

mobile-drag-drop

Package Overview
Dependencies
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

mobile-drag-drop - npm Package Compare versions

Comparing version 2.2.0 to 2.2.1-rc.0

internal/constants.d.ts

9

index.d.ts

@@ -0,1 +1,3 @@

import { Point } from "./internal/dom-utils";
export { Point } from "./internal/dom-utils";
export declare type DragImageTranslateOverrideFn = (event: TouchEvent, hoverCoordinates: Point, hoveredElement: HTMLElement, translateDragImageFn: (offsetX: number, offsetY: number) => void) => void;

@@ -11,8 +13,7 @@ export interface Config {

holdToDrag?: number;
tryFindDraggableTarget?: (event: TouchEvent) => HTMLElement | undefined;
dragImageSetup?: (element: HTMLElement) => HTMLElement;
elementFromPoint?: (x: number, y: number) => Element;
}
export declare function polyfill(override?: Config): boolean;
export interface Point {
x: number;
y: number;
}
export as namespace MobileDragDrop;
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global.MobileDragDrop = global.MobileDragDrop || {})));
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global.MobileDragDrop = global.MobileDragDrop || {})));
}(this, (function (exports) { 'use strict';
var DEBUG = false;
function detectFeatures() {
var features = {
dragEvents: ("ondragstart" in document.documentElement),
draggable: ("draggable" in document.documentElement),
touchEvents: ("ontouchstart" in document.documentElement),
userAgentSupportingNativeDnD: undefined
};
var isBlinkEngine = !!(window.chrome) || /chrome/i.test(navigator.userAgent);
features.userAgentSupportingNativeDnD = !((/iPad|iPhone|iPod|Android/.test(navigator.userAgent))
||
(isBlinkEngine && features.touchEvents));
if (DEBUG) {
Object.keys(features).forEach(function (key) {
console.log("dnd-poly: detected feature '" + key + " = " + features[key] + "'");
});
var CLASS_PREFIX = "dnd-poly-";
var CLASS_DRAG_IMAGE = CLASS_PREFIX + "drag-image";
var CLASS_DRAG_IMAGE_SNAPBACK = CLASS_PREFIX + "snapback";
var CLASS_DRAG_OPERATION_ICON = CLASS_PREFIX + "icon";
var ALLOWED_EFFECTS = ["none", "copy", "copyLink", "copyMove", "link", "linkMove", "move", "all"];
var DROP_EFFECTS = ["none", "copy", "move", "link"];
function detectFeatures() {
var features = {
dragEvents: ("ondragstart" in document.documentElement),
draggable: ("draggable" in document.documentElement),
userAgentSupportingNativeDnD: undefined
};
var isBlinkEngine = !!(window.chrome) || /chrome/i.test(navigator.userAgent);
features.userAgentSupportingNativeDnD = !((/iPad|iPhone|iPod|Android/.test(navigator.userAgent))
||
(isBlinkEngine && ("ontouchstart" in document.documentElement)));
return features;
}
function supportsPassiveEventListener() {
var supportsPassiveEventListeners = false;
try {
var opts = Object.defineProperty({}, "passive", {
get: function () {
supportsPassiveEventListeners = true;
}
});
window.addEventListener("test", null, opts);
}
catch (e) {
}
return supportsPassiveEventListeners;
}
var supportsPassive = supportsPassiveEventListener();
function isDOMElement(object) {
return object && object.tagName;
}
function addDocumentListener(ev, handler, passive) {
if (passive === void 0) { passive = true; }
document.addEventListener(ev, handler, supportsPassive ? { passive: passive } : false);
}
function removeDocumentListener(ev, handler) {
document.removeEventListener(ev, handler);
}
function onEvt(el, event, handler, context) {
if (context) {
handler = handler.bind(context);
}
el.addEventListener(event, handler);
return {
off: function () {
return el.removeEventListener(event, handler);
}
return features;
};
}
function prepareNodeCopyAsDragImage(srcNode, dstNode) {
if (srcNode.nodeType === 1) {
var cs = getComputedStyle(srcNode);
for (var i = 0; i < cs.length; i++) {
var csName = cs[i];
dstNode.style.setProperty(csName, cs.getPropertyValue(csName), cs.getPropertyPriority(csName));
}
dstNode.style.pointerEvents = "none";
dstNode.removeAttribute("id");
dstNode.removeAttribute("class");
dstNode.removeAttribute("draggable");
if (dstNode.nodeName === "CANVAS") {
var canvasSrc = srcNode;
var canvasDst = dstNode;
var canvasSrcImgData = canvasSrc.getContext("2d").getImageData(0, 0, canvasSrc.width, canvasSrc.height);
canvasDst.getContext("2d").putImageData(canvasSrcImgData, 0, 0);
}
}
var supportsPassive;
function supportsPassiveEventListener() {
var supportsPassiveEventListeners = false;
try {
var opts = Object.defineProperty({}, "passive", {
get: function () {
supportsPassiveEventListeners = true;
}
});
window.addEventListener("test", null, opts);
if (srcNode.hasChildNodes()) {
for (var i = 0; i < srcNode.childNodes.length; i++) {
prepareNodeCopyAsDragImage(srcNode.childNodes[i], dstNode.childNodes[i]);
}
catch (e) {
}
}
function createDragImage(sourceNode) {
var dragImage = sourceNode.cloneNode(true);
prepareNodeCopyAsDragImage(sourceNode, dragImage);
return dragImage;
}
function average(array) {
if (array.length === 0) {
return 0;
}
return array.reduce((function (s, v) {
return v + s;
}), 0) / array.length;
}
function isTouchIdentifierContainedInTouchEvent(touchEvent, touchIdentifier) {
for (var i = 0; i < touchEvent.changedTouches.length; i++) {
var touch = touchEvent.changedTouches[i];
if (touch.identifier === touchIdentifier) {
return true;
}
return supportsPassiveEventListeners;
}
var config = {
iterationInterval: 150,
return false;
}
function updateCentroidCoordinatesOfTouchesIn(coordinateProp, event, outPoint) {
var pageXs = [], pageYs = [];
for (var i = 0; i < event.touches.length; i++) {
var touch = event.touches[i];
pageXs.push(touch[coordinateProp + "X"]);
pageYs.push(touch[coordinateProp + "Y"]);
}
outPoint.x = average(pageXs);
outPoint.y = average(pageYs);
}
var TRANSFORM_CSS_VENDOR_PREFIXES = ["", "-webkit-"];
function extractTransformStyles(sourceNode) {
return TRANSFORM_CSS_VENDOR_PREFIXES.map(function (prefix) {
var transform = sourceNode.style[prefix + "transform"];
if (!transform || transform === "none") {
return "";
}
return transform.replace(/translate\(\D*\d+[^,]*,\D*\d+[^,]*\)\s*/g, "");
});
}
function translateElementToPoint(element, pnt, originalTransforms, offset, centerOnCoordinates) {
if (centerOnCoordinates === void 0) { centerOnCoordinates = true; }
var x = pnt.x, y = pnt.y;
if (offset) {
x += offset.x;
y += offset.y;
}
if (centerOnCoordinates) {
x -= (parseInt(element.offsetWidth, 10) / 2);
y -= (parseInt(element.offsetHeight, 10) / 2);
}
var translate = "translate3d(" + x + "px," + y + "px, 0)";
for (var i = 0; i < TRANSFORM_CSS_VENDOR_PREFIXES.length; i++) {
var transformProp = TRANSFORM_CSS_VENDOR_PREFIXES[i] + "transform";
element.style[transformProp] = translate + " " + originalTransforms[i];
}
}
function applyDragImageSnapback(sourceEl, dragImage, dragImageTransforms, transitionEndCb) {
var cs = getComputedStyle(sourceEl);
if (cs.visibility === "hidden" || cs.display === "none") {
console.log("dnd-poly: source node is not visible. skipping snapback transition.");
transitionEndCb();
return;
}
dragImage.classList.add(CLASS_DRAG_IMAGE_SNAPBACK);
var csDragImage = getComputedStyle(dragImage);
var durationInS = parseFloat(csDragImage.transitionDuration);
if (isNaN(durationInS) || durationInS === 0) {
console.log("dnd-poly: no transition used - skipping snapback");
transitionEndCb();
return;
}
console.log("dnd-poly: starting dragimage snap back");
var rect = sourceEl.getBoundingClientRect();
var pnt = {
x: rect.left,
y: rect.top
};
function polyfill(override) {
if (override) {
Object.keys(override).forEach(function (key) {
config[key] = override[key];
});
}
if (!config.forceApply) {
var detectedFeatures = detectFeatures();
if (detectedFeatures.userAgentSupportingNativeDnD
&& detectedFeatures.draggable
&& detectedFeatures.dragEvents) {
return false;
pnt.x += (document.body.scrollLeft || document.documentElement.scrollLeft);
pnt.y += (document.body.scrollTop || document.documentElement.scrollTop);
pnt.x -= parseInt(cs.marginLeft, 10);
pnt.y -= parseInt(cs.marginTop, 10);
var delayInS = parseFloat(csDragImage.transitionDelay);
var durationInMs = Math.round((durationInS + delayInS) * 1000);
translateElementToPoint(dragImage, pnt, dragImageTransforms, undefined, false);
setTimeout(transitionEndCb, durationInMs);
}
var DataTransfer = (function () {
function DataTransfer(_dataStore, _setDragImageHandler) {
this._dataStore = _dataStore;
this._setDragImageHandler = _setDragImageHandler;
this._dropEffect = DROP_EFFECTS[0];
}
Object.defineProperty(DataTransfer.prototype, "dropEffect", {
get: function () {
return this._dropEffect;
},
set: function (value) {
if (this._dataStore.mode !== 0
&& ALLOWED_EFFECTS.indexOf(value) > -1) {
this._dropEffect = value;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(DataTransfer.prototype, "types", {
get: function () {
if (this._dataStore.mode !== 0) {
return Object.freeze(this._dataStore.types);
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(DataTransfer.prototype, "effectAllowed", {
get: function () {
return this._dataStore.effectAllowed;
},
set: function (value) {
if (this._dataStore.mode === 2
&& ALLOWED_EFFECTS.indexOf(value) > -1) {
this._dataStore.effectAllowed = value;
}
},
enumerable: true,
configurable: true
});
DataTransfer.prototype.setData = function (type, data) {
if (this._dataStore.mode === 2) {
if (type.indexOf(" ") > -1) {
throw new Error("illegal arg: type contains space");
}
this._dataStore.data[type] = data;
if (this._dataStore.types.indexOf(type) === -1) {
this._dataStore.types.push(type);
}
}
console.log("dnd-poly: Applying mobile drag and drop polyfill.");
supportsPassive = supportsPassiveEventListener();
if (config.holdToDrag) {
addDocumentListener("touchstart", onDelayTouchstart, false);
};
DataTransfer.prototype.getData = function (type) {
if (this._dataStore.mode === 1
|| this._dataStore.mode === 2) {
return this._dataStore.data[type] || "";
}
else {
addDocumentListener("touchstart", onTouchstart, false);
};
DataTransfer.prototype.clearData = function (format) {
if (this._dataStore.mode === 2) {
if (format && this._dataStore.data[format]) {
delete this._dataStore.data[format];
var index = this._dataStore.types.indexOf(format);
if (index > -1) {
this._dataStore.types.splice(index, 1);
}
return;
}
this._dataStore.data = {};
this._dataStore.types = [];
}
return true;
}
var activeDragOperation;
function onTouchstart(e) {
console.log("dnd-poly: global touchstart");
if (activeDragOperation) {
console.log("dnd-poly: drag operation already active");
return;
};
DataTransfer.prototype.setDragImage = function (image, x, y) {
if (this._dataStore.mode === 2) {
this._setDragImageHandler(image, x, y);
}
var dragTarget = tryFindDraggableTarget(e);
if (!dragTarget) {
return;
};
return DataTransfer;
}());
function tryFindDraggableTarget(event) {
var el = event.target;
do {
if (el.draggable === false) {
continue;
}
try {
activeDragOperation = new DragOperationController(e, config, dragTarget, dragOperationEnded);
if (el.getAttribute && el.getAttribute("draggable") === "true") {
return el;
}
catch (err) {
dragOperationEnded(config, e, 3);
throw err;
} while ((el = el.parentNode) && el !== document.body);
}
function determineDropEffect(effectAllowed, sourceNode) {
if (!effectAllowed) {
if (sourceNode.nodeType === 3 && sourceNode.tagName === "A") {
return DROP_EFFECTS[3];
}
return DROP_EFFECTS[1];
}
function tryFindDraggableTarget(event) {
var el = event.target;
do {
if (el.draggable === false) {
continue;
}
if (el.getAttribute && el.getAttribute("draggable") === "true") {
return el;
}
} while ((el = el.parentNode) && el !== document.body);
if (effectAllowed === ALLOWED_EFFECTS[0]) {
return DROP_EFFECTS[0];
}
function dragOperationEnded(_config, event, state) {
if (state === 0) {
console.log("dnd-poly: Drag never started. Last event was " + event.type);
if (_config.defaultActionOverride) {
try {
_config.defaultActionOverride(event);
if (event.defaultPrevented) {
console.log("dnd-poly: defaultActionOverride has taken care of triggering the default action. preventing default on original event");
}
}
catch (e) {
console.log("dnd-poly: error in defaultActionOverride: " + e);
}
}
if (effectAllowed.indexOf(ALLOWED_EFFECTS[1]) === 0 || effectAllowed === ALLOWED_EFFECTS[7]) {
return DROP_EFFECTS[1];
}
if (effectAllowed.indexOf(ALLOWED_EFFECTS[4]) === 0) {
return DROP_EFFECTS[3];
}
if (effectAllowed === ALLOWED_EFFECTS[6]) {
return DROP_EFFECTS[2];
}
return DROP_EFFECTS[1];
}
function createDragEventFromTouch(targetElement, e, type, cancelable, window, dataTransfer, relatedTarget) {
if (relatedTarget === void 0) { relatedTarget = null; }
var touch = e.changedTouches[0];
var dndEvent = new Event(type, {
bubbles: true,
cancelable: cancelable
});
dndEvent.dataTransfer = dataTransfer;
dndEvent.relatedTarget = relatedTarget;
dndEvent.screenX = touch.screenX;
dndEvent.screenY = touch.screenY;
dndEvent.clientX = touch.clientX;
dndEvent.clientY = touch.clientY;
dndEvent.pageX = touch.pageX;
dndEvent.pageY = touch.pageY;
var targetRect = targetElement.getBoundingClientRect();
dndEvent.offsetX = dndEvent.clientX - targetRect.left;
dndEvent.offsetY = dndEvent.clientY - targetRect.top;
return dndEvent;
}
function dispatchDragEvent(dragEvent, targetElement, touchEvent, dataStore, dataTransfer, cancelable, relatedTarget) {
if (cancelable === void 0) { cancelable = true; }
if (relatedTarget === void 0) { relatedTarget = null; }
console.log("dnd-poly: dispatching " + dragEvent);
var leaveEvt = createDragEventFromTouch(targetElement, touchEvent, dragEvent, cancelable, document.defaultView, dataTransfer, relatedTarget);
var cancelled = !targetElement.dispatchEvent(leaveEvt);
dataStore.mode = 0;
return cancelled;
}
function determineDragOperation(effectAllowed, dropEffect) {
if (!effectAllowed || effectAllowed === ALLOWED_EFFECTS[7]) {
return dropEffect;
}
if (dropEffect === DROP_EFFECTS[1]) {
if (effectAllowed.indexOf(DROP_EFFECTS[1]) === 0) {
return DROP_EFFECTS[1];
}
activeDragOperation = null;
}
var ALLOWED_EFFECTS = ["none", "copy", "copyLink", "copyMove", "link", "linkMove", "move", "all"];
var DROP_EFFECTS = ["none", "copy", "move", "link"];
var TRANSFORM_CSS_VENDOR_PREFIXES = ["", "-webkit-"];
var CLASS_PREFIX = "dnd-poly-";
var CLASS_DRAG_IMAGE = CLASS_PREFIX + "drag-image";
var CLASS_DRAG_IMAGE_SNAPBACK = CLASS_PREFIX + "snapback";
var CLASS_DRAG_OPERATION_ICON = CLASS_PREFIX + "icon";
var DragOperationController = (function () {
function DragOperationController(_initialEvent, _config, _sourceNode, _dragOperationEndedCb) {
this._initialEvent = _initialEvent;
this._config = _config;
this._sourceNode = _sourceNode;
this._dragOperationEndedCb = _dragOperationEndedCb;
this._dragOperationState = 0;
this._immediateUserSelection = null;
this._currentDropTarget = null;
console.log("dnd-poly: setting up potential drag operation..");
this._lastTouchEvent = _initialEvent;
this._initialTouch = _initialEvent.changedTouches[0];
this._touchMoveHandler = this._onTouchMove.bind(this);
this._touchEndOrCancelHandler = this._onTouchEndOrCancel.bind(this);
addDocumentListener("touchmove", this._touchMoveHandler, false);
addDocumentListener("touchend", this._touchEndOrCancelHandler, false);
addDocumentListener("touchcancel", this._touchEndOrCancelHandler, false);
else if (dropEffect === DROP_EFFECTS[3]) {
if (effectAllowed.indexOf(DROP_EFFECTS[3]) === 0 || effectAllowed.indexOf("Link") > -1) {
return DROP_EFFECTS[3];
}
DragOperationController.prototype._setup = function () {
var _this = this;
console.log("dnd-poly: starting drag and drop operation");
this._dragOperationState = 1;
this._currentDragOperation = DROP_EFFECTS[0];
this._dragDataStore = {
_data: {},
_effectAllowed: undefined,
_mode: 3,
_types: [],
};
this._currentHotspotCoordinates = {
x: null,
y: null
};
this._dragImagePageCoordinates = {
x: null,
y: null
};
var dragImageSrc = this._sourceNode;
this._dataTransfer = new DataTransfer(this._dragDataStore, function (element, x, y) {
dragImageSrc = element;
if (typeof x === "number" || typeof y === "number") {
_this._dragImageOffset = {
x: x || 0,
y: y || 0
};
}
});
this._dragDataStore._mode = 2;
this._dataTransfer.dropEffect = DROP_EFFECTS[0];
if (dispatchDragEvent("dragstart", this._sourceNode, this._lastTouchEvent, this._dragDataStore, this._dataTransfer)) {
console.log("dnd-poly: dragstart cancelled");
this._dragOperationState = 3;
this._cleanup();
return false;
}
else if (dropEffect === DROP_EFFECTS[2]) {
if (effectAllowed.indexOf(DROP_EFFECTS[2]) === 0 || effectAllowed.indexOf("Move") > -1) {
return DROP_EFFECTS[2];
}
}
return DROP_EFFECTS[0];
}
var DragOperationController = (function () {
function DragOperationController(_initialEvent, _config, _sourceNode, _dragOperationEndedCb) {
this._initialEvent = _initialEvent;
this._config = _config;
this._sourceNode = _sourceNode;
this._dragOperationEndedCb = _dragOperationEndedCb;
this._dragOperationState = 0;
this._immediateUserSelection = null;
this._currentDropTarget = null;
console.log("dnd-poly: setting up potential drag operation..");
this._lastTouchEvent = _initialEvent;
this._initialTouch = _initialEvent.changedTouches[0];
this._touchMoveHandler = this._onTouchMove.bind(this);
this._touchEndOrCancelHandler = this._onTouchEndOrCancel.bind(this);
addDocumentListener("touchmove", this._touchMoveHandler, false);
addDocumentListener("touchend", this._touchEndOrCancelHandler, false);
addDocumentListener("touchcancel", this._touchEndOrCancelHandler, false);
}
DragOperationController.prototype._setup = function () {
var _this = this;
console.log("dnd-poly: starting drag and drop operation");
this._dragOperationState = 1;
this._currentDragOperation = DROP_EFFECTS[0];
this._dragDataStore = {
data: {},
effectAllowed: undefined,
mode: 3,
types: [],
};
this._currentHotspotCoordinates = {
x: null,
y: null
};
this._dragImagePageCoordinates = {
x: null,
y: null
};
var dragImageSrc = this._sourceNode;
this._dataTransfer = new DataTransfer(this._dragDataStore, function (element, x, y) {
dragImageSrc = element;
if (typeof x === "number" || typeof y === "number") {
_this._dragImageOffset = {
x: x || 0,
y: y || 0
};
}
updateCentroidCoordinatesOfTouchesIn("page", this._lastTouchEvent, this._dragImagePageCoordinates);
this._dragImage = createDragImage(dragImageSrc);
this._dragImageTransforms = extractTransformStyles(this._dragImage);
if (!this._dragImageOffset) {
if (this._config.dragImageOffset) {
this._dragImageOffset = {
x: this._config.dragImageOffset.x,
y: this._config.dragImageOffset.y
};
}
else if (this._config.dragImageCenterOnTouch) {
var cs = getComputedStyle(dragImageSrc);
this._dragImageOffset = {
x: 0 - parseInt(cs.marginLeft, 10),
y: 0 - parseInt(cs.marginTop, 10)
};
}
else {
var targetRect = dragImageSrc.getBoundingClientRect();
var cs = getComputedStyle(dragImageSrc);
this._dragImageOffset = {
x: targetRect.left - this._initialTouch.clientX - parseInt(cs.marginLeft, 10) + targetRect.width / 2,
y: targetRect.top - this._initialTouch.clientY - parseInt(cs.marginTop, 10) + targetRect.height / 2
};
}
});
this._dragDataStore.mode = 2;
this._dataTransfer.dropEffect = DROP_EFFECTS[0];
if (dispatchDragEvent("dragstart", this._sourceNode, this._lastTouchEvent, this._dragDataStore, this._dataTransfer)) {
console.log("dnd-poly: dragstart cancelled");
this._dragOperationState = 3;
this._cleanup();
return false;
}
updateCentroidCoordinatesOfTouchesIn("page", this._lastTouchEvent, this._dragImagePageCoordinates);
var dragImage = this._config.dragImageSetup(dragImageSrc);
this._dragImageTransforms = extractTransformStyles(dragImage);
dragImage.style.position = "absolute";
dragImage.style.left = "0px";
dragImage.style.top = "0px";
dragImage.style.zIndex = "999999";
dragImage.classList.add(CLASS_DRAG_IMAGE);
dragImage.classList.add(CLASS_DRAG_OPERATION_ICON);
this._dragImage = dragImage;
if (!this._dragImageOffset) {
if (this._config.dragImageOffset) {
this._dragImageOffset = {
x: this._config.dragImageOffset.x,
y: this._config.dragImageOffset.y
};
}
translateDragImage(this._dragImage, this._dragImagePageCoordinates, this._dragImageTransforms, this._dragImageOffset, this._config.dragImageCenterOnTouch);
document.body.appendChild(this._dragImage);
this._iterationIntervalId = setInterval(function () {
if (_this._iterationLock) {
console.log("dnd-poly: iteration skipped because previous iteration hast not yet finished.");
return;
}
_this._iterationLock = true;
_this._dragAndDropProcessModelIteration();
_this._iterationLock = false;
}, this._config.iterationInterval);
return true;
};
DragOperationController.prototype._cleanup = function () {
console.log("dnd-poly: cleanup");
if (this._iterationIntervalId) {
clearInterval(this._iterationIntervalId);
this._iterationIntervalId = null;
else if (this._config.dragImageCenterOnTouch) {
var cs = getComputedStyle(dragImageSrc);
this._dragImageOffset = {
x: 0 - parseInt(cs.marginLeft, 10),
y: 0 - parseInt(cs.marginTop, 10)
};
}
removeDocumentListener("touchmove", this._touchMoveHandler);
removeDocumentListener("touchend", this._touchEndOrCancelHandler);
removeDocumentListener("touchcancel", this._touchEndOrCancelHandler);
if (this._dragImage) {
this._dragImage.parentNode.removeChild(this._dragImage);
this._dragImage = null;
else {
var targetRect = dragImageSrc.getBoundingClientRect();
var cs = getComputedStyle(dragImageSrc);
this._dragImageOffset = {
x: targetRect.left - this._initialTouch.clientX - parseInt(cs.marginLeft, 10) + targetRect.width / 2,
y: targetRect.top - this._initialTouch.clientY - parseInt(cs.marginTop, 10) + targetRect.height / 2
};
}
this._dragOperationEndedCb(this._config, this._lastTouchEvent, this._dragOperationState);
};
DragOperationController.prototype._onTouchMove = function (event) {
var _this = this;
if (isTouchIdentifierContainedInTouchEvent(event, this._initialTouch.identifier) === false) {
}
translateElementToPoint(this._dragImage, this._dragImagePageCoordinates, this._dragImageTransforms, this._dragImageOffset, this._config.dragImageCenterOnTouch);
document.body.appendChild(this._dragImage);
this._iterationIntervalId = window.setInterval(function () {
if (_this._iterationLock) {
console.log("dnd-poly: iteration skipped because previous iteration hast not yet finished.");
return;
}
this._lastTouchEvent = event;
if (this._dragOperationState === 0) {
var startDrag = void 0;
if (this._config.dragStartConditionOverride) {
try {
startDrag = this._config.dragStartConditionOverride(event);
}
catch (e) {
console.error("dnd-poly: error in dragStartConditionOverride hook: " + e);
startDrag = false;
}
}
else {
startDrag = (event.touches.length === 1);
}
if (!startDrag) {
this._cleanup();
return;
}
if (this._setup() === true) {
this._initialEvent.preventDefault();
event.preventDefault();
}
return;
}
console.log("dnd-poly: moving draggable..");
event.preventDefault();
updateCentroidCoordinatesOfTouchesIn("client", event, this._currentHotspotCoordinates);
updateCentroidCoordinatesOfTouchesIn("page", event, this._dragImagePageCoordinates);
if (this._config.dragImageTranslateOverride) {
_this._iterationLock = true;
_this._dragAndDropProcessModelIteration();
_this._iterationLock = false;
}, this._config.iterationInterval);
return true;
};
DragOperationController.prototype._cleanup = function () {
console.log("dnd-poly: cleanup");
if (this._iterationIntervalId) {
clearInterval(this._iterationIntervalId);
this._iterationIntervalId = null;
}
removeDocumentListener("touchmove", this._touchMoveHandler);
removeDocumentListener("touchend", this._touchEndOrCancelHandler);
removeDocumentListener("touchcancel", this._touchEndOrCancelHandler);
if (this._dragImage) {
this._dragImage.parentNode.removeChild(this._dragImage);
this._dragImage = null;
}
this._dragOperationEndedCb(this._config, this._lastTouchEvent, this._dragOperationState);
};
DragOperationController.prototype._onTouchMove = function (event) {
var _this = this;
if (isTouchIdentifierContainedInTouchEvent(event, this._initialTouch.identifier) === false) {
return;
}
this._lastTouchEvent = event;
if (this._dragOperationState === 0) {
var startDrag = void 0;
if (this._config.dragStartConditionOverride) {
try {
var handledDragImageTranslate_1 = false;
this._config.dragImageTranslateOverride(event, {
x: this._currentHotspotCoordinates.x,
y: this._currentHotspotCoordinates.y
}, this._immediateUserSelection, function (offsetX, offsetY) {
if (!_this._dragImage) {
return;
}
handledDragImageTranslate_1 = true;
_this._currentHotspotCoordinates.x += offsetX;
_this._currentHotspotCoordinates.y += offsetY;
_this._dragImagePageCoordinates.x += offsetX;
_this._dragImagePageCoordinates.y += offsetY;
translateDragImage(_this._dragImage, _this._dragImagePageCoordinates, _this._dragImageTransforms, _this._dragImageOffset, _this._config.dragImageCenterOnTouch);
});
if (handledDragImageTranslate_1) {
return;
}
startDrag = this._config.dragStartConditionOverride(event);
}
catch (e) {
console.log("dnd-poly: error in dragImageTranslateOverride hook: " + e);
console.error("dnd-poly: error in dragStartConditionOverride hook: " + e);
startDrag = false;
}
}
translateDragImage(this._dragImage, this._dragImagePageCoordinates, this._dragImageTransforms, this._dragImageOffset, this._config.dragImageCenterOnTouch);
};
DragOperationController.prototype._onTouchEndOrCancel = function (event) {
if (isTouchIdentifierContainedInTouchEvent(event, this._initialTouch.identifier) === false) {
return;
else {
startDrag = (event.touches.length === 1);
}
if (this._config.dragImageTranslateOverride) {
try {
this._config.dragImageTranslateOverride(undefined, undefined, undefined, function () {
});
}
catch (e) {
console.log("dnd-poly: error in dragImageTranslateOverride hook: " + e);
}
}
if (this._dragOperationState === 0) {
if (!startDrag) {
this._cleanup();
return;
}
event.preventDefault();
this._dragOperationState = (event.type === "touchcancel") ? 3 : 2;
};
DragOperationController.prototype._dragAndDropProcessModelIteration = function () {
var _this = this;
if (DEBUG) {
var debug_class = CLASS_PREFIX + "debug", debug_class_user_selection = CLASS_PREFIX + "immediate-user-selection", debug_class_drop_target = CLASS_PREFIX + "current-drop-target";
if (this._setup() === true) {
this._initialEvent.preventDefault();
event.preventDefault();
}
var previousDragOperation = this._currentDragOperation;
this._dragDataStore._mode = 3;
this._dataTransfer.dropEffect = DROP_EFFECTS[0];
var dragCancelled = dispatchDragEvent("drag", this._sourceNode, this._lastTouchEvent, this._dragDataStore, this._dataTransfer);
if (dragCancelled) {
console.log("dnd-poly: drag event cancelled.");
this._currentDragOperation = DROP_EFFECTS[0];
}
if (dragCancelled || this._dragOperationState === 2 || this._dragOperationState === 3) {
var dragFailed = this._dragOperationEnded(this._dragOperationState);
if (dragFailed) {
applyDragImageSnapback(this._sourceNode, this._dragImage, this._dragImageTransforms, function () {
_this._finishDragOperation();
});
return;
}
console.log("dnd-poly: moving draggable..");
event.preventDefault();
updateCentroidCoordinatesOfTouchesIn("client", event, this._currentHotspotCoordinates);
updateCentroidCoordinatesOfTouchesIn("page", event, this._dragImagePageCoordinates);
if (this._config.dragImageTranslateOverride) {
try {
var handledDragImageTranslate_1 = false;
this._config.dragImageTranslateOverride(event, {
x: this._currentHotspotCoordinates.x,
y: this._currentHotspotCoordinates.y
}, this._immediateUserSelection, function (offsetX, offsetY) {
if (!_this._dragImage) {
return;
}
handledDragImageTranslate_1 = true;
_this._currentHotspotCoordinates.x += offsetX;
_this._currentHotspotCoordinates.y += offsetY;
_this._dragImagePageCoordinates.x += offsetX;
_this._dragImagePageCoordinates.y += offsetY;
translateElementToPoint(_this._dragImage, _this._dragImagePageCoordinates, _this._dragImageTransforms, _this._dragImageOffset, _this._config.dragImageCenterOnTouch);
});
if (handledDragImageTranslate_1) {
return;
}
this._finishDragOperation();
return;
}
var newUserSelection = document.elementFromPoint(this._currentHotspotCoordinates.x, this._currentHotspotCoordinates.y);
console.log("dnd-poly: new immediate user selection is: " + newUserSelection);
var previousTargetElement = this._currentDropTarget;
if (newUserSelection !== this._immediateUserSelection && newUserSelection !== this._currentDropTarget) {
if (DEBUG) {
if (this._immediateUserSelection) {
this._immediateUserSelection.classList.remove(debug_class_user_selection);
}
if (newUserSelection) {
newUserSelection.classList.add(debug_class);
newUserSelection.classList.add(debug_class_user_selection);
}
}
this._immediateUserSelection = newUserSelection;
if (this._currentDropTarget !== null) {
this._dragDataStore._mode = 3;
this._dataTransfer.dropEffect = DROP_EFFECTS[0];
dispatchDragEvent("dragexit", this._currentDropTarget, this._lastTouchEvent, this._dragDataStore, this._dataTransfer, false);
}
if (this._immediateUserSelection === null) {
this._currentDropTarget = this._immediateUserSelection;
console.log("dnd-poly: current drop target changed to null");
}
else {
this._dragDataStore._mode = 3;
this._dataTransfer.dropEffect = determineDropEffect(this._dragDataStore._effectAllowed, this._sourceNode);
if (dispatchDragEvent("dragenter", this._immediateUserSelection, this._lastTouchEvent, this._dragDataStore, this._dataTransfer)) {
console.log("dnd-poly: dragenter default prevented");
this._currentDropTarget = this._immediateUserSelection;
this._currentDragOperation = determineDragOperation(this._dataTransfer.effectAllowed, this._dataTransfer.dropEffect);
}
else {
if (this._immediateUserSelection !== document.body) {
this._currentDropTarget = document.body;
}
}
}
catch (e) {
console.log("dnd-poly: error in dragImageTranslateOverride hook: " + e);
}
if (previousTargetElement !== this._currentDropTarget && (isDOMElement(previousTargetElement))) {
if (DEBUG) {
previousTargetElement.classList.remove(debug_class_drop_target);
}
console.log("dnd-poly: current drop target changed.");
this._dragDataStore._mode = 3;
this._dataTransfer.dropEffect = DROP_EFFECTS[0];
dispatchDragEvent("dragleave", previousTargetElement, this._lastTouchEvent, this._dragDataStore, this._dataTransfer, false, this._currentDropTarget);
}
translateElementToPoint(this._dragImage, this._dragImagePageCoordinates, this._dragImageTransforms, this._dragImageOffset, this._config.dragImageCenterOnTouch);
};
DragOperationController.prototype._onTouchEndOrCancel = function (event) {
if (isTouchIdentifierContainedInTouchEvent(event, this._initialTouch.identifier) === false) {
return;
}
if (this._config.dragImageTranslateOverride) {
try {
this._config.dragImageTranslateOverride(undefined, undefined, undefined, function () {
});
}
if (isDOMElement(this._currentDropTarget)) {
if (DEBUG) {
this._currentDropTarget.classList.add(debug_class);
this._currentDropTarget.classList.add(debug_class_drop_target);
}
this._dragDataStore._mode = 3;
this._dataTransfer.dropEffect = determineDropEffect(this._dragDataStore._effectAllowed, this._sourceNode);
if (dispatchDragEvent("dragover", this._currentDropTarget, this._lastTouchEvent, this._dragDataStore, this._dataTransfer) === false) {
console.log("dnd-poly: dragover not prevented on possible drop-target.");
this._currentDragOperation = DROP_EFFECTS[0];
}
else {
console.log("dnd-poly: dragover prevented.");
this._currentDragOperation = determineDragOperation(this._dataTransfer.effectAllowed, this._dataTransfer.dropEffect);
}
catch (e) {
console.log("dnd-poly: error in dragImageTranslateOverride hook: " + e);
}
console.log("dnd-poly: d'n'd iteration ended. current drag operation: " + this._currentDragOperation);
if (previousDragOperation !== this._currentDragOperation) {
this._dragImage.classList.remove(CLASS_PREFIX + previousDragOperation);
}
if (this._dragOperationState === 0) {
this._cleanup();
return;
}
event.preventDefault();
this._dragOperationState = (event.type === "touchcancel") ? 3 : 2;
};
DragOperationController.prototype._dragAndDropProcessModelIteration = function () {
var _this = this;
var previousDragOperation = this._currentDragOperation;
this._dragDataStore.mode = 3;
this._dataTransfer.dropEffect = DROP_EFFECTS[0];
var dragCancelled = dispatchDragEvent("drag", this._sourceNode, this._lastTouchEvent, this._dragDataStore, this._dataTransfer);
if (dragCancelled) {
console.log("dnd-poly: drag event cancelled.");
this._currentDragOperation = DROP_EFFECTS[0];
}
if (dragCancelled || this._dragOperationState === 2 || this._dragOperationState === 3) {
var dragFailed = this._dragOperationEnded(this._dragOperationState);
if (dragFailed) {
applyDragImageSnapback(this._sourceNode, this._dragImage, this._dragImageTransforms, function () {
_this._finishDragOperation();
});
return;
}
var currentDragOperationClass = CLASS_PREFIX + this._currentDragOperation;
if (this._dragImage.classList.contains(currentDragOperationClass) === false) {
this._dragImage.classList.add(currentDragOperationClass);
this._finishDragOperation();
return;
}
var newUserSelection = this._config.elementFromPoint(this._currentHotspotCoordinates.x, this._currentHotspotCoordinates.y);
console.log("dnd-poly: new immediate user selection is: " + newUserSelection);
var previousTargetElement = this._currentDropTarget;
if (newUserSelection !== this._immediateUserSelection && newUserSelection !== this._currentDropTarget) {
this._immediateUserSelection = newUserSelection;
if (this._currentDropTarget !== null) {
this._dragDataStore.mode = 3;
this._dataTransfer.dropEffect = DROP_EFFECTS[0];
dispatchDragEvent("dragexit", this._currentDropTarget, this._lastTouchEvent, this._dragDataStore, this._dataTransfer, false);
}
};
DragOperationController.prototype._dragOperationEnded = function (state) {
console.log("dnd-poly: drag operation end detected with " + this._currentDragOperation);
if (DEBUG) {
var debug_class_user_selection = CLASS_PREFIX + "immediate-user-selection", debug_class_drop_target = CLASS_PREFIX + "current-drop-target";
if (this._currentDropTarget) {
this._currentDropTarget.classList.remove(debug_class_drop_target);
}
if (this._immediateUserSelection) {
this._immediateUserSelection.classList.remove(debug_class_user_selection);
}
if (this._immediateUserSelection === null) {
this._currentDropTarget = this._immediateUserSelection;
console.log("dnd-poly: current drop target changed to null");
}
var dragFailed = (this._currentDragOperation === DROP_EFFECTS[0]
|| this._currentDropTarget === null
|| state === 3);
if (dragFailed) {
if (isDOMElement(this._currentDropTarget)) {
this._dragDataStore._mode = 3;
this._dataTransfer.dropEffect = DROP_EFFECTS[0];
dispatchDragEvent("dragleave", this._currentDropTarget, this._lastTouchEvent, this._dragDataStore, this._dataTransfer, false);
else {
this._dragDataStore.mode = 3;
this._dataTransfer.dropEffect = determineDropEffect(this._dragDataStore.effectAllowed, this._sourceNode);
if (dispatchDragEvent("dragenter", this._immediateUserSelection, this._lastTouchEvent, this._dragDataStore, this._dataTransfer)) {
console.log("dnd-poly: dragenter default prevented");
this._currentDropTarget = this._immediateUserSelection;
this._currentDragOperation = determineDragOperation(this._dataTransfer.effectAllowed, this._dataTransfer.dropEffect);
}
}
else {
if (isDOMElement(this._currentDropTarget)) {
this._dragDataStore._mode = 1;
this._dataTransfer.dropEffect = this._currentDragOperation;
if (dispatchDragEvent("drop", this._currentDropTarget, this._lastTouchEvent, this._dragDataStore, this._dataTransfer) ===
true) {
this._currentDragOperation = this._dataTransfer.dropEffect;
else {
if (this._immediateUserSelection !== document.body) {
this._currentDropTarget = document.body;
}
else {
this._currentDragOperation = DROP_EFFECTS[0];
}
}
}
return dragFailed;
};
DragOperationController.prototype._finishDragOperation = function () {
console.log("dnd-poly: dragimage snap back transition ended");
this._dragDataStore._mode = 3;
this._dataTransfer.dropEffect = this._currentDragOperation;
dispatchDragEvent("dragend", this._sourceNode, this._lastTouchEvent, this._dragDataStore, this._dataTransfer, false);
this._dragOperationState = 2;
this._cleanup();
};
return DragOperationController;
}());
var DataTransfer = (function () {
function DataTransfer(_dataStore, _setDragImageHandler) {
this._dataStore = _dataStore;
this._setDragImageHandler = _setDragImageHandler;
this._dropEffect = DROP_EFFECTS[0];
}
Object.defineProperty(DataTransfer.prototype, "types", {
get: function () {
if (this._dataStore._mode !== 0) {
return Object.freeze(this._dataStore._types);
}
},
enumerable: true,
configurable: true
});
DataTransfer.prototype.setData = function (type, data) {
if (this._dataStore._mode === 2) {
if (type.indexOf(" ") > -1) {
throw new Error("illegal arg: type contains space");
}
this._dataStore._data[type] = data;
if (this._dataStore._types.indexOf(type) === -1) {
this._dataStore._types.push(type);
}
if (previousTargetElement !== this._currentDropTarget && (isDOMElement(previousTargetElement))) {
console.log("dnd-poly: current drop target changed.");
this._dragDataStore.mode = 3;
this._dataTransfer.dropEffect = DROP_EFFECTS[0];
dispatchDragEvent("dragleave", previousTargetElement, this._lastTouchEvent, this._dragDataStore, this._dataTransfer, false, this._currentDropTarget);
}
if (isDOMElement(this._currentDropTarget)) {
this._dragDataStore.mode = 3;
this._dataTransfer.dropEffect = determineDropEffect(this._dragDataStore.effectAllowed, this._sourceNode);
if (dispatchDragEvent("dragover", this._currentDropTarget, this._lastTouchEvent, this._dragDataStore, this._dataTransfer) === false) {
console.log("dnd-poly: dragover not prevented on possible drop-target.");
this._currentDragOperation = DROP_EFFECTS[0];
}
};
DataTransfer.prototype.getData = function (type) {
if (this._dataStore._mode === 1
|| this._dataStore._mode === 2) {
return this._dataStore._data[type] || "";
else {
console.log("dnd-poly: dragover prevented.");
this._currentDragOperation = determineDragOperation(this._dataTransfer.effectAllowed, this._dataTransfer.dropEffect);
}
};
DataTransfer.prototype.clearData = function (format) {
if (this._dataStore._mode === 2) {
if (format && this._dataStore._data[format]) {
delete this._dataStore._data[format];
var index = this._dataStore._types.indexOf(format);
if (index > -1) {
this._dataStore._types.splice(index, 1);
}
return;
}
this._dataStore._data = {};
this._dataStore._types = [];
}
console.log("dnd-poly: d'n'd iteration ended. current drag operation: " + this._currentDragOperation);
if (previousDragOperation !== this._currentDragOperation) {
this._dragImage.classList.remove(CLASS_PREFIX + previousDragOperation);
}
var currentDragOperationClass = CLASS_PREFIX + this._currentDragOperation;
this._dragImage.classList.add(currentDragOperationClass);
};
DragOperationController.prototype._dragOperationEnded = function (state) {
console.log("dnd-poly: drag operation end detected with " + this._currentDragOperation);
var dragFailed = (this._currentDragOperation === DROP_EFFECTS[0]
|| this._currentDropTarget === null
|| state === 3);
if (dragFailed) {
if (isDOMElement(this._currentDropTarget)) {
this._dragDataStore.mode = 3;
this._dataTransfer.dropEffect = DROP_EFFECTS[0];
dispatchDragEvent("dragleave", this._currentDropTarget, this._lastTouchEvent, this._dragDataStore, this._dataTransfer, false);
}
};
DataTransfer.prototype.setDragImage = function (image, x, y) {
if (this._dataStore._mode === 2) {
this._setDragImageHandler(image, x, y);
}
};
Object.defineProperty(DataTransfer.prototype, "effectAllowed", {
get: function () {
return this._dataStore._effectAllowed;
},
set: function (value) {
if (this._dataStore._mode === 2
&& ALLOWED_EFFECTS.indexOf(value) > -1) {
this._dataStore._effectAllowed = value;
}
else {
if (isDOMElement(this._currentDropTarget)) {
this._dragDataStore.mode = 1;
this._dataTransfer.dropEffect = this._currentDragOperation;
if (dispatchDragEvent("drop", this._currentDropTarget, this._lastTouchEvent, this._dragDataStore, this._dataTransfer) ===
true) {
this._currentDragOperation = this._dataTransfer.dropEffect;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(DataTransfer.prototype, "dropEffect", {
get: function () {
return this._dropEffect;
},
set: function (value) {
if (this._dataStore._mode !== 0
&& ALLOWED_EFFECTS.indexOf(value) > -1) {
this._dropEffect = value;
else {
this._currentDragOperation = DROP_EFFECTS[0];
}
},
enumerable: true,
configurable: true
});
return DataTransfer;
}());
function addDocumentListener(ev, handler, passive) {
if (passive === void 0) { passive = true; }
document.addEventListener(ev, handler, supportsPassive ? { passive: passive } : false);
}
function removeDocumentListener(ev, handler) {
document.removeEventListener(ev, handler);
}
function average(array) {
if (array.length === 0) {
return 0;
}
}
return array.reduce((function (s, v) {
return v + s;
}), 0) / array.length;
return dragFailed;
};
DragOperationController.prototype._finishDragOperation = function () {
console.log("dnd-poly: dragimage snap back transition ended");
this._dragDataStore.mode = 3;
this._dataTransfer.dropEffect = this._currentDragOperation;
dispatchDragEvent("dragend", this._sourceNode, this._lastTouchEvent, this._dragDataStore, this._dataTransfer, false);
this._dragOperationState = 2;
this._cleanup();
};
return DragOperationController;
}());
var config = {
iterationInterval: 150,
tryFindDraggableTarget: tryFindDraggableTarget,
dragImageSetup: createDragImage,
elementFromPoint: function (x, y) { return document.elementFromPoint(x, y); }
};
var activeDragOperation;
function onTouchstart(e) {
console.log("dnd-poly: global touchstart");
if (activeDragOperation) {
console.log("dnd-poly: drag operation already active");
return;
}
function isDOMElement(object) {
return object && object.tagName;
var dragTarget = config.tryFindDraggableTarget(e);
if (!dragTarget) {
return;
}
function isTouchIdentifierContainedInTouchEvent(newTouch, touchIdentifier) {
for (var i = 0; i < newTouch.changedTouches.length; i++) {
var touch = newTouch.changedTouches[i];
if (touch.identifier === touchIdentifier) {
return true;
}
}
return false;
try {
activeDragOperation = new DragOperationController(e, config, dragTarget, dragOperationEnded);
}
function createDragEventFromTouch(targetElement, e, type, cancelable, window, dataTransfer, relatedTarget) {
if (relatedTarget === void 0) { relatedTarget = null; }
var touch = e.changedTouches[0];
var dndEvent = new Event(type, {
bubbles: true,
cancelable: cancelable
});
dndEvent.dataTransfer = dataTransfer;
dndEvent.relatedTarget = relatedTarget;
dndEvent.screenX = touch.screenX;
dndEvent.screenY = touch.screenY;
dndEvent.clientX = touch.clientX;
dndEvent.clientY = touch.clientY;
dndEvent.pageX = touch.pageX;
dndEvent.pageY = touch.pageY;
var targetRect = targetElement.getBoundingClientRect();
dndEvent.offsetX = dndEvent.clientX - targetRect.left;
dndEvent.offsetY = dndEvent.clientY - targetRect.top;
return dndEvent;
catch (err) {
dragOperationEnded(config, e, 3);
throw err;
}
function updateCentroidCoordinatesOfTouchesIn(coordinateProp, event, outPoint) {
var pageXs = [], pageYs = [];
for (var i = 0; i < event.touches.length; i++) {
var touch = event.touches[i];
pageXs.push(touch[coordinateProp + "X"]);
pageYs.push(touch[coordinateProp + "Y"]);
}
outPoint.x = average(pageXs);
outPoint.y = average(pageYs);
}
function prepareNodeCopyAsDragImage(srcNode, dstNode) {
if (srcNode.nodeType === 1) {
var cs = getComputedStyle(srcNode);
for (var i = 0; i < cs.length; i++) {
var csName = cs[i];
dstNode.style.setProperty(csName, cs.getPropertyValue(csName), cs.getPropertyPriority(csName));
}
function onDelayTouchstart(evt) {
var el = evt.target;
var heldItem = function () {
end.off();
cancel.off();
scroll.off();
onTouchstart(evt);
};
var onReleasedItem = function () {
end.off();
cancel.off();
scroll.off();
clearTimeout(timer);
};
var timer = window.setTimeout(heldItem, config.holdToDrag);
var end = onEvt(el, "touchend", onReleasedItem, this);
var cancel = onEvt(el, "touchcancel", onReleasedItem, this);
var scroll = onEvt(window, "scroll", onReleasedItem, this);
}
function dragOperationEnded(_config, event, state) {
if (state === 0) {
console.log("dnd-poly: Drag never started. Last event was " + event.type);
if (_config.defaultActionOverride) {
try {
_config.defaultActionOverride(event);
if (event.defaultPrevented) {
console.log("dnd-poly: defaultActionOverride has taken care of triggering the default action. preventing default on original event");
}
}
dstNode.style.pointerEvents = "none";
dstNode.removeAttribute("id");
dstNode.removeAttribute("class");
dstNode.removeAttribute("draggable");
}
if (srcNode.hasChildNodes()) {
for (var i = 0; i < srcNode.childNodes.length; i++) {
prepareNodeCopyAsDragImage(srcNode.childNodes[i], dstNode.childNodes[i]);
catch (e) {
console.log("dnd-poly: error in defaultActionOverride: " + e);
}
}
}
function createDragImage(sourceNode) {
var dragImage = sourceNode.cloneNode(true);
prepareNodeCopyAsDragImage(sourceNode, dragImage);
dragImage.style.position = "absolute";
dragImage.style.left = "0px";
dragImage.style.top = "0px";
dragImage.style.zIndex = "999999";
dragImage.classList.add(CLASS_DRAG_IMAGE);
dragImage.classList.add(CLASS_DRAG_OPERATION_ICON);
return dragImage;
}
function extractTransformStyles(sourceNode) {
return TRANSFORM_CSS_VENDOR_PREFIXES.map(function (prefix) {
var transform = sourceNode.style[prefix + "transform"];
if (!transform || transform === "none") {
return "";
}
return transform.replace(/translate\(\D*\d+[^,]*,\D*\d+[^,]*\)\s*/g, "");
activeDragOperation = null;
}
function polyfill(override) {
if (override) {
Object.keys(override).forEach(function (key) {
config[key] = override[key];
});
}
function translateDragImage(dragImage, pnt, originalTransforms, offset, centerOnCoordinates) {
if (centerOnCoordinates === void 0) { centerOnCoordinates = true; }
var x = pnt.x, y = pnt.y;
if (offset) {
x += offset.x;
y += offset.y;
if (!config.forceApply) {
var detectedFeatures = detectFeatures();
if (detectedFeatures.userAgentSupportingNativeDnD
&& detectedFeatures.draggable
&& detectedFeatures.dragEvents) {
return false;
}
if (centerOnCoordinates) {
x -= (parseInt(dragImage.offsetWidth, 10) / 2);
y -= (parseInt(dragImage.offsetHeight, 10) / 2);
}
var translate = "translate3d(" + x + "px," + y + "px, 0)";
for (var i = 0; i < TRANSFORM_CSS_VENDOR_PREFIXES.length; i++) {
var transformProp = TRANSFORM_CSS_VENDOR_PREFIXES[i] + "transform";
dragImage.style[transformProp] = translate + " " + originalTransforms[i];
}
}
function applyDragImageSnapback(sourceEl, dragImage, dragImageTransforms, transitionEndCb) {
var cs = getComputedStyle(sourceEl);
if (cs.visibility === "hidden" || cs.display === "none") {
console.log("dnd-poly: source node is not visible. skipping snapback transition.");
transitionEndCb();
return;
}
dragImage.classList.add(CLASS_DRAG_IMAGE_SNAPBACK);
var csDragImage = getComputedStyle(dragImage);
var durationInS = parseFloat(csDragImage.transitionDuration);
if (isNaN(durationInS) || durationInS === 0) {
console.log("dnd-poly: no transition used - skipping snapback");
transitionEndCb();
return;
}
console.log("dnd-poly: starting dragimage snap back");
var rect = sourceEl.getBoundingClientRect();
var pnt = {
x: rect.left,
y: rect.top
};
pnt.x += (document.body.scrollLeft || document.documentElement.scrollLeft);
pnt.y += (document.body.scrollTop || document.documentElement.scrollTop);
pnt.x -= parseInt(cs.marginLeft, 10);
pnt.y -= parseInt(cs.marginTop, 10);
var delayInS = parseFloat(csDragImage.transitionDelay);
var durationInMs = Math.round((durationInS + delayInS) * 1000);
translateDragImage(dragImage, pnt, dragImageTransforms, undefined, false);
setTimeout(transitionEndCb, durationInMs);
console.log("dnd-poly: Applying mobile drag and drop polyfill.");
if (config.holdToDrag) {
addDocumentListener("touchstart", onDelayTouchstart, false);
}
function determineDropEffect(effectAllowed, sourceNode) {
if (!effectAllowed) {
if (sourceNode.nodeType === 3 && sourceNode.tagName === "A") {
return DROP_EFFECTS[3];
}
return DROP_EFFECTS[1];
}
if (effectAllowed === ALLOWED_EFFECTS[0]) {
return DROP_EFFECTS[0];
}
if (effectAllowed.indexOf(ALLOWED_EFFECTS[1]) === 0 || effectAllowed === ALLOWED_EFFECTS[7]) {
return DROP_EFFECTS[1];
}
if (effectAllowed.indexOf(ALLOWED_EFFECTS[4]) === 0) {
return DROP_EFFECTS[3];
}
if (effectAllowed === ALLOWED_EFFECTS[6]) {
return DROP_EFFECTS[2];
}
return DROP_EFFECTS[1];
else {
addDocumentListener("touchstart", onTouchstart, false);
}
function dispatchDragEvent(dragEvent, targetElement, touchEvent, dataStore, dataTransfer, cancelable, relatedTarget) {
if (cancelable === void 0) { cancelable = true; }
if (relatedTarget === void 0) { relatedTarget = null; }
console.log("dnd-poly: dispatching " + dragEvent);
if (DEBUG) {
var debug_class = CLASS_PREFIX + "debug", debug_class_event_target = CLASS_PREFIX + "event-target", debug_class_event_related_target = CLASS_PREFIX + "event-related-target";
targetElement.classList.add(debug_class);
targetElement.classList.add(debug_class_event_target);
if (relatedTarget) {
relatedTarget.classList.add(debug_class);
relatedTarget.classList.add(debug_class_event_related_target);
}
}
var leaveEvt = createDragEventFromTouch(targetElement, touchEvent, dragEvent, cancelable, document.defaultView, dataTransfer, relatedTarget);
var cancelled = !targetElement.dispatchEvent(leaveEvt);
dataStore._mode = 0;
if (DEBUG) {
targetElement.classList.remove(debug_class_event_target);
if (relatedTarget) {
relatedTarget.classList.remove(debug_class_event_related_target);
}
}
return cancelled;
}
function determineDragOperation(effectAllowed, dropEffect) {
if (!effectAllowed || effectAllowed === ALLOWED_EFFECTS[7]) {
return dropEffect;
}
if (dropEffect === DROP_EFFECTS[1]) {
if (effectAllowed.indexOf(DROP_EFFECTS[1]) === 0) {
return DROP_EFFECTS[1];
}
}
else if (dropEffect === DROP_EFFECTS[3]) {
if (effectAllowed.indexOf(DROP_EFFECTS[3]) === 0 || effectAllowed.indexOf("Link") > -1) {
return DROP_EFFECTS[3];
}
}
else if (dropEffect === DROP_EFFECTS[2]) {
if (effectAllowed.indexOf(DROP_EFFECTS[2]) === 0 || effectAllowed.indexOf("Move") > -1) {
return DROP_EFFECTS[2];
}
}
return DROP_EFFECTS[0];
}
function onDelayTouchstart(evt) {
var el = evt.target;
var heldItem = function () {
end.off();
cancel.off();
scroll.off();
onTouchstart(evt);
};
var onReleasedItem = function () {
end.off();
cancel.off();
scroll.off();
clearTimeout(timer);
};
var timer = setTimeout(heldItem, config.holdToDrag);
var end = onEvt(el, 'touchend', onReleasedItem, this);
var cancel = onEvt(el, 'touchcancel', onReleasedItem, this);
var scroll = onEvt(window, 'scroll', onReleasedItem, this);
}
function onEvt(el, event, handler, context) {
if (context) {
handler = handler.bind(context);
}
el.addEventListener(event, handler);
return {
off: function () {
return el.removeEventListener(event, handler);
}
};
}
return true;
}
exports.polyfill = polyfill;
exports.polyfill = polyfill;
Object.defineProperty(exports, '__esModule', { value: true });
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=index.js.map
//# sourceMappingURL=index.js.map

@@ -1,3 +0,3 @@

/*! mobile-drag-drop 2.1.0 | Copyright (c) 2017 Tim Ruffles | MIT License */
!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?b(exports):"function"==typeof define&&define.amd?define(["exports"],b):b(a.MobileDragDrop=a.MobileDragDrop||{})}(this,function(a){"use strict";function b(){var a={dragEvents:"ondragstart"in document.documentElement,draggable:"draggable"in document.documentElement,touchEvents:"ontouchstart"in document.documentElement,userAgentSupportingNativeDnD:void 0},b=!!window.chrome||/chrome/i.test(navigator.userAgent);return a.userAgentSupportingNativeDnD=!(/iPad|iPhone|iPod|Android/.test(navigator.userAgent)||b&&a.touchEvents),A&&Object.keys(a).forEach(function(a){}),a}function c(){var a=!1;try{var b=Object.defineProperty({},"passive",{get:function(){a=!0}});window.addEventListener("test",null,b)}catch(a){}return a}function d(a){if(a&&Object.keys(a).forEach(function(b){B[b]=a[b]}),!B.forceApply){var d=b();if(d.userAgentSupportingNativeDnD&&d.draggable&&d.dragEvents)return!1}return y=c(),B.holdToDrag?h("touchstart",w,!1):h("touchstart",e,!1),!0}function e(a){if(!z){var b=f(a);if(b)try{z=new J(a,B,b,g)}catch(b){throw g(B,a,3),b}}}function f(a){var b=a.target;do if(b.draggable!==!1&&b.getAttribute&&"true"===b.getAttribute("draggable"))return b;while((b=b.parentNode)&&b!==document.body)}function g(a,b,c){if(0===c&&a.defaultActionOverride)try{a.defaultActionOverride(b),b.defaultPrevented}catch(a){}z=null}function h(a,b,c){void 0===c&&(c=!0),document.addEventListener(a,b,!!y&&{passive:c})}function i(a,b){document.removeEventListener(a,b)}function j(a){return 0===a.length?0:a.reduce(function(a,b){return b+a},0)/a.length}function k(a){return a&&a.tagName}function l(a,b){for(var c=0;c<a.changedTouches.length;c++){var d=a.changedTouches[c];if(d.identifier===b)return!0}return!1}function m(a,b,c,d,e,f,g){void 0===g&&(g=null);var h=b.changedTouches[0],i=new Event(c,{bubbles:!0,cancelable:d});i.dataTransfer=f,i.relatedTarget=g,i.screenX=h.screenX,i.screenY=h.screenY,i.clientX=h.clientX,i.clientY=h.clientY,i.pageX=h.pageX,i.pageY=h.pageY;var j=a.getBoundingClientRect();return i.offsetX=i.clientX-j.left,i.offsetY=i.clientY-j.top,i}function n(a,b,c){for(var d=[],e=[],f=0;f<b.touches.length;f++){var g=b.touches[f];d.push(g[a+"X"]),e.push(g[a+"Y"])}c.x=j(d),c.y=j(e)}function o(a,b){if(1===a.nodeType){for(var c=getComputedStyle(a),d=0;d<c.length;d++){var e=c[d];b.style.setProperty(e,c.getPropertyValue(e),c.getPropertyPriority(e))}b.style.pointerEvents="none",b.removeAttribute("id"),b.removeAttribute("class"),b.removeAttribute("draggable")}if(a.hasChildNodes())for(var d=0;d<a.childNodes.length;d++)o(a.childNodes[d],b.childNodes[d])}function p(a){var b=a.cloneNode(!0);return o(a,b),b.style.position="absolute",b.style.left="0px",b.style.top="0px",b.style.zIndex="999999",b.classList.add(G),b.classList.add(I),b}function q(a){return E.map(function(b){var c=a.style[b+"transform"];return c&&"none"!==c?c.replace(/translate\(\D*\d+[^,]*,\D*\d+[^,]*\)\s*/g,""):""})}function r(a,b,c,d,e){void 0===e&&(e=!0);var f=b.x,g=b.y;d&&(f+=d.x,g+=d.y),e&&(f-=parseInt(a.offsetWidth,10)/2,g-=parseInt(a.offsetHeight,10)/2);for(var h="translate3d("+f+"px,"+g+"px, 0)",i=0;i<E.length;i++){var j=E[i]+"transform";a.style[j]=h+" "+c[i]}}function s(a,b,c,d){var e=getComputedStyle(a);if("hidden"===e.visibility||"none"===e.display)return void d();b.classList.add(H);var f=getComputedStyle(b),g=parseFloat(f.transitionDuration);if(isNaN(g)||0===g)return void d();var h=a.getBoundingClientRect(),i={x:h.left,y:h.top};i.x+=document.body.scrollLeft||document.documentElement.scrollLeft,i.y+=document.body.scrollTop||document.documentElement.scrollTop,i.x-=parseInt(e.marginLeft,10),i.y-=parseInt(e.marginTop,10);var j=parseFloat(f.transitionDelay),k=Math.round(1e3*(g+j));r(b,i,c,void 0,!1),setTimeout(d,k)}function t(a,b){return a?a===C[0]?D[0]:0===a.indexOf(C[1])||a===C[7]?D[1]:0===a.indexOf(C[4])?D[3]:a===C[6]?D[2]:D[1]:3===b.nodeType&&"A"===b.tagName?D[3]:D[1]}function u(a,b,c,d,e,f,g){if(void 0===f&&(f=!0),void 0===g&&(g=null),A){var h=F+"debug",i=F+"event-target",j=F+"event-related-target";b.classList.add(h),b.classList.add(i),g&&(g.classList.add(h),g.classList.add(j))}var k=m(b,c,a,f,document.defaultView,e,g),l=!b.dispatchEvent(k);return d.g=0,A&&(b.classList.remove(i),g&&g.classList.remove(j)),l}function v(a,b){if(!a||a===C[7])return b;if(b===D[1]){if(0===a.indexOf(D[1]))return D[1]}else if(b===D[3]){if(0===a.indexOf(D[3])||a.indexOf("Link")>-1)return D[3]}else if(b===D[2]&&(0===a.indexOf(D[2])||a.indexOf("Move")>-1))return D[2];return D[0]}function w(a){var b=a.target,c=function(){g.off(),h.off(),i.off(),e(a)},d=function(){g.off(),h.off(),i.off(),clearTimeout(f)},f=setTimeout(c,B.holdToDrag),g=x(b,"touchend",d,this),h=x(b,"touchcancel",d,this),i=x(window,"scroll",d,this)}function x(a,b,c,d){return d&&(c=c.bind(d)),a.addEventListener(b,c),{off:function(){return a.removeEventListener(b,c)}}}var y,z,A=!1,B={iterationInterval:150},C=["none","copy","copyLink","copyMove","link","linkMove","move","all"],D=["none","copy","move","link"],E=["","-webkit-"],F="dnd-poly-",G=F+"drag-image",H=F+"snapback",I=F+"icon",J=function(){function a(a,b,c,d){this.h=a,this.i=b,this.j=c,this.k=d,this.l=0,this.m=null,this.o=null,this.p=a,this.q=a.changedTouches[0],this.s=this.t.bind(this),this.u=this.v.bind(this),h("touchmove",this.s,!1),h("touchend",this.u,!1),h("touchcancel",this.u,!1)}return a.prototype.A=function(){var a=this;this.l=1,this.B=D[0],this.C={D:{},F:void 0,g:3,G:[]},this.H={x:null,y:null},this.I={x:null,y:null};var b=this.j;if(this.J=new K(this.C,function(c,d,e){b=c,"number"!=typeof d&&"number"!=typeof e||(a.K={x:d||0,y:e||0})}),this.C.g=2,this.J.dropEffect=D[0],u("dragstart",this.j,this.p,this.C,this.J))return this.l=3,this.L(),!1;if(n("page",this.p,this.I),this.M=p(b),this.N=q(this.M),!this.K)if(this.i.dragImageOffset)this.K={x:this.i.dragImageOffset.x,y:this.i.dragImageOffset.y};else if(this.i.dragImageCenterOnTouch){var c=getComputedStyle(b);this.K={x:0-parseInt(c.marginLeft,10),y:0-parseInt(c.marginTop,10)}}else{var d=b.getBoundingClientRect(),c=getComputedStyle(b);this.K={x:d.left-this.q.clientX-parseInt(c.marginLeft,10)+d.width/2,y:d.top-this.q.clientY-parseInt(c.marginTop,10)+d.height/2}}return r(this.M,this.I,this.N,this.K,this.i.dragImageCenterOnTouch),document.body.appendChild(this.M),this.O=setInterval(function(){a.P||(a.P=!0,a.R(),a.P=!1)},this.i.iterationInterval),!0},a.prototype.L=function(){this.O&&(clearInterval(this.O),this.O=null),i("touchmove",this.s),i("touchend",this.u),i("touchcancel",this.u),this.M&&(this.M.parentNode.removeChild(this.M),this.M=null),this.k(this.i,this.p,this.l)},a.prototype.t=function(a){var b=this;if(l(a,this.q.identifier)!==!1){if(this.p=a,0===this.l){var c=void 0;if(this.i.dragStartConditionOverride)try{c=this.i.dragStartConditionOverride(a)}catch(a){c=!1}else c=1===a.touches.length;return c?void(this.A()===!0&&(this.h.preventDefault(),a.preventDefault())):void this.L()}if(a.preventDefault(),n("client",a,this.H),n("page",a,this.I),this.i.dragImageTranslateOverride)try{var d=!1;if(this.i.dragImageTranslateOverride(a,{x:this.H.x,y:this.H.y},this.m,function(a,c){b.M&&(d=!0,b.H.x+=a,b.H.y+=c,b.I.x+=a,b.I.y+=c,r(b.M,b.I,b.N,b.K,b.i.dragImageCenterOnTouch))}),d)return}catch(a){}r(this.M,this.I,this.N,this.K,this.i.dragImageCenterOnTouch)}},a.prototype.v=function(a){if(l(a,this.q.identifier)!==!1){if(this.i.dragImageTranslateOverride)try{this.i.dragImageTranslateOverride(void 0,void 0,void 0,function(){})}catch(a){}if(0===this.l)return void this.L();a.preventDefault(),this.l="touchcancel"===a.type?3:2}},a.prototype.R=function(){var a=this;if(A)var b=F+"debug",c=F+"immediate-user-selection",d=F+"current-drop-target";var e=this.B;this.C.g=3,this.J.dropEffect=D[0];var f=u("drag",this.j,this.p,this.C,this.J);if(f&&(this.B=D[0]),f||2===this.l||3===this.l){var g=this.S(this.l);return g?void s(this.j,this.M,this.N,function(){a.T()}):void this.T()}var h=document.elementFromPoint(this.H.x,this.H.y),i=this.o;h!==this.m&&h!==this.o&&(A&&(this.m&&this.m.classList.remove(c),h&&(h.classList.add(b),h.classList.add(c))),this.m=h,null!==this.o&&(this.C.g=3,this.J.dropEffect=D[0],u("dragexit",this.o,this.p,this.C,this.J,!1)),null===this.m?this.o=this.m:(this.C.g=3,this.J.dropEffect=t(this.C.F,this.j),u("dragenter",this.m,this.p,this.C,this.J)?(this.o=this.m,this.B=v(this.J.effectAllowed,this.J.dropEffect)):this.m!==document.body&&(this.o=document.body))),i!==this.o&&k(i)&&(A&&i.classList.remove(d),this.C.g=3,this.J.dropEffect=D[0],u("dragleave",i,this.p,this.C,this.J,!1,this.o)),k(this.o)&&(A&&(this.o.classList.add(b),this.o.classList.add(d)),this.C.g=3,this.J.dropEffect=t(this.C.F,this.j),u("dragover",this.o,this.p,this.C,this.J)===!1?this.B=D[0]:this.B=v(this.J.effectAllowed,this.J.dropEffect)),e!==this.B&&this.M.classList.remove(F+e);var j=F+this.B;this.M.classList.contains(j)===!1&&this.M.classList.add(j)},a.prototype.S=function(a){if(A){var b=F+"immediate-user-selection",c=F+"current-drop-target";this.o&&this.o.classList.remove(c),this.m&&this.m.classList.remove(b)}var d=this.B===D[0]||null===this.o||3===a;return d?k(this.o)&&(this.C.g=3,this.J.dropEffect=D[0],u("dragleave",this.o,this.p,this.C,this.J,!1)):k(this.o)&&(this.C.g=1,this.J.dropEffect=this.B,u("drop",this.o,this.p,this.C,this.J)===!0?this.B=this.J.dropEffect:this.B=D[0]),d},a.prototype.T=function(){this.C.g=3,this.J.dropEffect=this.B,u("dragend",this.j,this.p,this.C,this.J,!1),this.l=2,this.L()},a}(),K=function(){function a(a,b){this.U=a,this.V=b,this.W=D[0]}return Object.defineProperty(a.prototype,"types",{get:function(){if(0!==this.U.g)return Object.freeze(this.U.G)},enumerable:!0,configurable:!0}),a.prototype.setData=function(a,b){if(2===this.U.g){if(a.indexOf(" ")>-1)throw new Error("illegal arg: type contains space");this.U.D[a]=b,this.U.G.indexOf(a)===-1&&this.U.G.push(a)}},a.prototype.getData=function(a){if(1===this.U.g||2===this.U.g)return this.U.D[a]||""},a.prototype.clearData=function(a){if(2===this.U.g){if(a&&this.U.D[a]){delete this.U.D[a];var b=this.U.G.indexOf(a);return void(b>-1&&this.U.G.splice(b,1))}this.U.D={},this.U.G=[]}},a.prototype.setDragImage=function(a,b,c){2===this.U.g&&this.V(a,b,c)},Object.defineProperty(a.prototype,"effectAllowed",{get:function(){return this.U.F},set:function(a){2===this.U.g&&C.indexOf(a)>-1&&(this.U.F=a)},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"dropEffect",{get:function(){return this.W},set:function(a){0!==this.U.g&&C.indexOf(a)>-1&&(this.W=a)},enumerable:!0,configurable:!0}),a}();a.polyfill=d,Object.defineProperty(a,"__esModule",{value:!0})});
/*! mobile-drag-drop 2.2.0 | Copyright (c) 2018 Tim Ruffles | MIT License */
!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?i(exports):"function"==typeof define&&define.amd?define(["exports"],i):i(t.MobileDragDrop=t.MobileDragDrop||{})}(this,function(t){"use strict";var i="dnd-poly-",s=i+"snapback",n=["none","copy","copyLink","copyMove","link","linkMove","move","all"],h=["none","copy","move","link"];var e=function(){var t=!1;try{var i=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("test",null,i)}catch(t){}return t}();function r(t){return t&&t.tagName}function o(t,i,s){void 0===s&&(s=!0),document.addEventListener(t,i,!!e&&{passive:s})}function u(t,i){document.removeEventListener(t,i)}function a(t,i,s,n){return n&&(s=s.bind(n)),t.addEventListener(i,s),{off:function(){return t.removeEventListener(i,s)}}}function c(t){return 0===t.length?0:t.reduce(function(t,i){return i+t},0)/t.length}function f(t,i){for(var s=0;s<t.changedTouches.length;s++){if(t.changedTouches[s].identifier===i)return!0}return!1}function d(t,i,s){for(var n=[],h=[],e=0;e<i.touches.length;e++){var r=i.touches[e];n.push(r[t+"X"]),h.push(r[t+"Y"])}s.x=c(n),s.y=c(h)}var l=["","-webkit-"];function v(t,i,s,n,h){void 0===h&&(h=!0);var e=i.x,r=i.y;n&&(e+=n.x,r+=n.y),h&&(e-=parseInt(t.offsetWidth,10)/2,r-=parseInt(t.offsetHeight,10)/2);for(var o="translate3d("+e+"px,"+r+"px, 0)",u=0;u<l.length;u++){var a=l[u]+"transform";t.style[a]=o+" "+s[u]}}var p=function(){function t(t,i){this.t=t,this.i=i,this.s=h[0]}return Object.defineProperty(t.prototype,"dropEffect",{get:function(){return this.s},set:function(t){0!==this.t.mode&&n.indexOf(t)>-1&&(this.s=t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"types",{get:function(){if(0!==this.t.mode)return Object.freeze(this.t.types)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"effectAllowed",{get:function(){return this.t.effectAllowed},set:function(t){2===this.t.mode&&n.indexOf(t)>-1&&(this.t.effectAllowed=t)},enumerable:!0,configurable:!0}),t.prototype.setData=function(t,i){if(2===this.t.mode){if(t.indexOf(" ")>-1)throw new Error("illegal arg: type contains space");this.t.data[t]=i,-1===this.t.types.indexOf(t)&&this.t.types.push(t)}},t.prototype.getData=function(t){if(1===this.t.mode||2===this.t.mode)return this.t.data[t]||""},t.prototype.clearData=function(t){if(2===this.t.mode){if(t&&this.t.data[t]){delete this.t.data[t];var i=this.t.types.indexOf(t);return void(i>-1&&this.t.types.splice(i,1))}this.t.data={},this.t.types=[]}},t.prototype.setDragImage=function(t,i,s){2===this.t.mode&&this.i(t,i,s)},t}();function g(t,i){return t?t===n[0]?h[0]:0===t.indexOf(n[1])||t===n[7]?h[1]:0===t.indexOf(n[4])?h[3]:t===n[6]?h[2]:h[1]:3===i.nodeType&&"A"===i.tagName?h[3]:h[1]}function m(t,i,s,n,h,e,r){void 0===e&&(e=!0),void 0===r&&(r=null);var o=function(t,i,s,n,h,e,r){void 0===r&&(r=null);var o=i.changedTouches[0],u=new Event(s,{bubbles:!0,cancelable:n});u.dataTransfer=e,u.relatedTarget=r,u.screenX=o.screenX,u.screenY=o.screenY,u.clientX=o.clientX,u.clientY=o.clientY,u.pageX=o.pageX,u.pageY=o.pageY;var a=t.getBoundingClientRect();return u.offsetX=u.clientX-a.left,u.offsetY=u.clientY-a.top,u}(i,s,t,e,document.defaultView,h,r),u=!i.dispatchEvent(o);return n.mode=0,u}function y(t,i){if(!t||t===n[7])return i;if(i===h[1]){if(0===t.indexOf(h[1]))return h[1]}else if(i===h[3]){if(0===t.indexOf(h[3])||t.indexOf("Link")>-1)return h[3]}else if(i===h[2]&&(0===t.indexOf(h[2])||t.indexOf("Move")>-1))return h[2];return h[0]}var b,w=function(){function t(t,i,s,n){this.h=t,this.o=i,this.u=s,this.l=n,this.v=0,this.p=null,this.g=null,this.m=t,this.I=t.changedTouches[0],this.j=this.S.bind(this),this.k=this.A.bind(this),o("touchmove",this.j,!1),o("touchend",this.k,!1),o("touchcancel",this.k,!1)}return t.prototype.O=function(){var t=this;this.v=1,this.C=h[0],this.D={data:{},effectAllowed:void 0,mode:3,types:[]},this.M={x:null,y:null},this.F={x:null,y:null};var i=this.u;if(this.N=new p(this.D,function(s,n,h){i=s,"number"!=typeof n&&"number"!=typeof h||(t.P={x:n||0,y:h||0})}),this.D.mode=2,this.N.dropEffect=h[0],m("dragstart",this.u,this.m,this.D,this.N))return this.v=3,this.T(),!1;d("page",this.m,this.F);var s,n=this.o.dragImageSetup(i);if(this.L=(s=n,l.map(function(t){var i=s.style[t+"transform"];return i&&"none"!==i?i.replace(/translate\(\D*\d+[^,]*,\D*\d+[^,]*\)\s*/g,""):""})),n.style.position="absolute",n.style.left="0px",n.style.top="0px",n.style.zIndex="999999",n.classList.add("dnd-poly-drag-image"),n.classList.add("dnd-poly-icon"),this._=n,!this.P)if(this.o.dragImageOffset)this.P={x:this.o.dragImageOffset.x,y:this.o.dragImageOffset.y};else if(this.o.dragImageCenterOnTouch){var e=getComputedStyle(i);this.P={x:0-parseInt(e.marginLeft,10),y:0-parseInt(e.marginTop,10)}}else{var r=i.getBoundingClientRect();e=getComputedStyle(i);this.P={x:r.left-this.I.clientX-parseInt(e.marginLeft,10)+r.width/2,y:r.top-this.I.clientY-parseInt(e.marginTop,10)+r.height/2}}return v(this._,this.F,this.L,this.P,this.o.dragImageCenterOnTouch),document.body.appendChild(this._),this.V=window.setInterval(function(){t.X||(t.X=!0,t.Y(),t.X=!1)},this.o.iterationInterval),!0},t.prototype.T=function(){this.V&&(clearInterval(this.V),this.V=null),u("touchmove",this.j),u("touchend",this.k),u("touchcancel",this.k),this._&&(this._.parentNode.removeChild(this._),this._=null),this.l(this.o,this.m,this.v)},t.prototype.S=function(t){var i=this;if(!1!==f(t,this.I.identifier)){if(this.m=t,0===this.v){var s=void 0;if(this.o.dragStartConditionOverride)try{s=this.o.dragStartConditionOverride(t)}catch(t){s=!1}else s=1===t.touches.length;return s?void(!0===this.O()&&(this.h.preventDefault(),t.preventDefault())):void this.T()}if(t.preventDefault(),d("client",t,this.M),d("page",t,this.F),this.o.dragImageTranslateOverride)try{var n=!1;if(this.o.dragImageTranslateOverride(t,{x:this.M.x,y:this.M.y},this.p,function(t,s){i._&&(n=!0,i.M.x+=t,i.M.y+=s,i.F.x+=t,i.F.y+=s,v(i._,i.F,i.L,i.P,i.o.dragImageCenterOnTouch))}),n)return}catch(t){}v(this._,this.F,this.L,this.P,this.o.dragImageCenterOnTouch)}},t.prototype.A=function(t){if(!1!==f(t,this.I.identifier)){if(this.o.dragImageTranslateOverride)try{this.o.dragImageTranslateOverride(void 0,void 0,void 0,function(){})}catch(t){}0!==this.v?(t.preventDefault(),this.v="touchcancel"===t.type?3:2):this.T()}},t.prototype.Y=function(){var t=this,n=this.C;this.D.mode=3,this.N.dropEffect=h[0];var e=m("drag",this.u,this.m,this.D,this.N);if(e&&(this.C=h[0]),e||2===this.v||3===this.v)return this.q(this.v)?void function(t,i,n,h){var e=getComputedStyle(t);if("hidden"!==e.visibility&&"none"!==e.display){i.classList.add(s);var r=getComputedStyle(i),o=parseFloat(r.transitionDuration);if(isNaN(o)||0===o)h();else{var u=t.getBoundingClientRect(),a={x:u.left,y:u.top};a.x+=document.body.scrollLeft||document.documentElement.scrollLeft,a.y+=document.body.scrollTop||document.documentElement.scrollTop,a.x-=parseInt(e.marginLeft,10),a.y-=parseInt(e.marginTop,10);var c=parseFloat(r.transitionDelay),f=Math.round(1e3*(o+c));v(i,a,n,void 0,!1),setTimeout(h,f)}}else h()}(this.u,this._,this.L,function(){t.B()}):void this.B();var o=this.o.elementFromPoint(this.M.x,this.M.y),u=this.g;o!==this.p&&o!==this.g&&(this.p=o,null!==this.g&&(this.D.mode=3,this.N.dropEffect=h[0],m("dragexit",this.g,this.m,this.D,this.N,!1)),null===this.p?this.g=this.p:(this.D.mode=3,this.N.dropEffect=g(this.D.effectAllowed,this.u),m("dragenter",this.p,this.m,this.D,this.N)?(this.g=this.p,this.C=y(this.N.effectAllowed,this.N.dropEffect)):this.p!==document.body&&(this.g=document.body))),u!==this.g&&r(u)&&(this.D.mode=3,this.N.dropEffect=h[0],m("dragleave",u,this.m,this.D,this.N,!1,this.g)),r(this.g)&&(this.D.mode=3,this.N.dropEffect=g(this.D.effectAllowed,this.u),!1===m("dragover",this.g,this.m,this.D,this.N)?this.C=h[0]:this.C=y(this.N.effectAllowed,this.N.dropEffect)),n!==this.C&&this._.classList.remove(i+n);var a=i+this.C;this._.classList.add(a)},t.prototype.q=function(t){var i=this.C===h[0]||null===this.g||3===t;return i?r(this.g)&&(this.D.mode=3,this.N.dropEffect=h[0],m("dragleave",this.g,this.m,this.D,this.N,!1)):r(this.g)&&(this.D.mode=1,this.N.dropEffect=this.C,!0===m("drop",this.g,this.m,this.D,this.N)?this.C=this.N.dropEffect:this.C=h[0]),i},t.prototype.B=function(){this.D.mode=3,this.N.dropEffect=this.C,m("dragend",this.u,this.m,this.D,this.N,!1),this.v=2,this.T()},t}(),x={iterationInterval:150,tryFindDraggableTarget:function(t){var i=t.target;do{if(!1!==i.draggable&&i.getAttribute&&"true"===i.getAttribute("draggable"))return i}while((i=i.parentNode)&&i!==document.body)},dragImageSetup:function(t){var i=t.cloneNode(!0);return function t(i,s){if(1===i.nodeType){for(var n=getComputedStyle(i),h=0;h<n.length;h++){var e=n[h];s.style.setProperty(e,n.getPropertyValue(e),n.getPropertyPriority(e))}if(s.style.pointerEvents="none",s.removeAttribute("id"),s.removeAttribute("class"),s.removeAttribute("draggable"),"CANVAS"===s.nodeName){var r=i,o=s,u=r.getContext("2d").getImageData(0,0,r.width,r.height);o.getContext("2d").putImageData(u,0,0)}}if(i.hasChildNodes())for(h=0;h<i.childNodes.length;h++)t(i.childNodes[h],s.childNodes[h])}(t,i),i},elementFromPoint:function(t,i){return document.elementFromPoint(t,i)}};function I(t){if(!b){var i=x.tryFindDraggableTarget(t);if(i)try{b=new w(t,x,i,S)}catch(i){throw S(x,t,3),i}}}function j(t){var i=t.target,s=function(){h.off(),e.off(),r.off(),clearTimeout(n)},n=window.setTimeout(function(){h.off(),e.off(),r.off(),I(t)},x.holdToDrag),h=a(i,"touchend",s,this),e=a(i,"touchcancel",s,this),r=a(window,"scroll",s,this)}function S(t,i,s){if(0===s&&t.defaultActionOverride)try{t.defaultActionOverride(i),i.defaultPrevented}catch(t){}b=null}t.polyfill=function(t){if(t&&Object.keys(t).forEach(function(i){x[i]=t[i]}),!x.forceApply){var i=(s={dragEvents:"ondragstart"in document.documentElement,draggable:"draggable"in document.documentElement,userAgentSupportingNativeDnD:void 0},n=!!window.chrome||/chrome/i.test(navigator.userAgent),s.userAgentSupportingNativeDnD=!(/iPad|iPhone|iPod|Android/.test(navigator.userAgent)||n&&"ontouchstart"in document.documentElement),s);if(i.userAgentSupportingNativeDnD&&i.draggable&&i.dragEvents)return!1}var s,n;return x.holdToDrag?o("touchstart",j,!1):o("touchstart",I,!1),!0},Object.defineProperty(t,"__esModule",{value:!0})});
//# sourceMappingURL=index.min.js.map
{
"name": "mobile-drag-drop",
"version": "2.2.0",
"version": "2.2.1-rc.0",
"description": "Polyfill for making HTML5 drag and drop possible in all browsers.",

@@ -42,3 +42,4 @@ "main": "index.min.js",

"James Shore <shore.james@gmail.com>",
"Paul Shirren <shirro@shirro.com>"
"Paul Shirren <shirro@shirro.com>",
"Simon Altschuler <simon@altschuler.dk>"
],

@@ -55,12 +56,11 @@ "license": "MIT",

"grunt-contrib-copy": "^1.0.0",
"grunt-contrib-uglify": "^2.0.0",
"grunt-contrib-uglify": "^3.3.0",
"grunt-contrib-watch": "^1.0.0",
"grunt-exec": "^3.0.0",
"grunt-npm": "0.0.2",
"grunt-rollup": "^1.0.1",
"grunt-ts": "^5.5.1",
"grunt-tslint": "^5.0.1",
"rollup": "^0.54.1",
"rollup-plugin-sourcemaps": "^0.4.2",
"tslint": "^5.3.0",
"typescript": "^2.3.0"
"tslint": "^5.9.1",
"typescript": "^2.6.2"
}
}
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global.MobileDragDrop = global.MobileDragDrop || {})));
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global.MobileDragDrop = global.MobileDragDrop || {})));
}(this, (function (exports) { 'use strict';
function isTopLevelEl(el) {
return (el === document.body || el === document.documentElement);
function isTopLevelEl(el) {
return (el === document.body || el === document.documentElement);
}
function getElementViewportOffset(el, axis) {
var offset;
if (isTopLevelEl(el)) {
offset = (axis === 0) ? el.clientLeft : el.clientTop;
}
function getElementViewportOffset(el, axis) {
var offset;
if (isTopLevelEl(el)) {
offset = (axis === 0) ? el.clientLeft : el.clientTop;
}
else {
var bounds = el.getBoundingClientRect();
offset = (axis === 0) ? bounds.left : bounds.top;
}
return offset;
else {
var bounds = el.getBoundingClientRect();
offset = (axis === 0) ? bounds.left : bounds.top;
}
function getElementViewportSize(el, axis) {
var size;
if (isTopLevelEl(el)) {
size = (axis === 0) ? window.innerWidth : window.innerHeight;
}
else {
size = (axis === 0) ? el.clientWidth : el.clientHeight;
}
return size;
return offset;
}
function getElementViewportSize(el, axis) {
var size;
if (isTopLevelEl(el)) {
size = (axis === 0) ? window.innerWidth : window.innerHeight;
}
function getSetElementScroll(el, axis, scroll) {
var prop = (axis === 0) ? "scrollLeft" : "scrollTop";
var isTopLevel = isTopLevelEl(el);
if (arguments.length === 2) {
if (isTopLevel) {
return document.body[prop] || document.documentElement[prop];
}
return el[prop];
}
else {
size = (axis === 0) ? el.clientWidth : el.clientHeight;
}
return size;
}
function getSetElementScroll(el, axis, scroll) {
var prop = (axis === 0) ? "scrollLeft" : "scrollTop";
var isTopLevel = isTopLevelEl(el);
if (arguments.length === 2) {
if (isTopLevel) {
document.documentElement[prop] += scroll;
document.body[prop] += scroll;
return document.body[prop] || document.documentElement[prop];
}
else {
el[prop] += scroll;
}
return el[prop];
}
function isScrollable(el) {
var cs = getComputedStyle(el);
if (el.scrollHeight > el.clientHeight && (cs.overflowY === "scroll" || cs.overflowY === "auto")) {
return true;
}
if (el.scrollWidth > el.clientWidth && (cs.overflowX === "scroll" || cs.overflowX === "auto")) {
return true;
}
return false;
if (isTopLevel) {
document.documentElement[prop] += scroll;
document.body[prop] += scroll;
}
function findScrollableParent(el) {
do {
if (!el) {
return undefined;
}
if (isScrollable(el)) {
return el;
}
if (el === document.documentElement) {
return null;
}
} while (el = el.parentNode);
return null;
else {
el[prop] += scroll;
}
function determineScrollIntention(currentCoordinate, size, threshold) {
if (currentCoordinate < threshold) {
return -1;
}
else if (size - currentCoordinate < threshold) {
return 1;
}
return 0;
}
function isScrollable(el) {
var cs = getComputedStyle(el);
if (el.scrollHeight > el.clientHeight && (cs.overflowY === "scroll" || cs.overflowY === "auto")) {
return true;
}
function determineDynamicVelocity(scrollIntention, currentCoordinate, size, threshold) {
if (scrollIntention === -1) {
return Math.abs(currentCoordinate - threshold);
}
else if (scrollIntention === 1) {
return Math.abs(size - currentCoordinate - threshold);
}
return 0;
}
function isScrollEndReached(axis, scrollIntention, scrollBounds) {
var currentScrollOffset = (axis === 0) ? (scrollBounds.scrollX) : (scrollBounds.scrollY);
if (scrollIntention === 1) {
var maxScrollOffset = (axis === 0) ? (scrollBounds.scrollWidth - scrollBounds.width) : (scrollBounds.scrollHeight -
scrollBounds.height);
return currentScrollOffset >= maxScrollOffset;
}
else if (scrollIntention === -1) {
return (currentScrollOffset <= 0);
}
if (el.scrollWidth > el.clientWidth && (cs.overflowX === "scroll" || cs.overflowX === "auto")) {
return true;
}
var _options = {
threshold: 75,
velocityFn: function (velocity, threshold) {
var multiplier = velocity / threshold;
var easeInCubic = multiplier * multiplier * multiplier;
return easeInCubic * threshold;
return false;
}
function findScrollableParent(el) {
do {
if (!el) {
return undefined;
}
};
var _scrollIntentions = {
horizontal: 0,
vertical: 0
};
var _dynamicVelocity = {
x: 0,
y: 0
};
var _scrollAnimationFrameId;
var _currentCoordinates;
var _hoveredElement;
var _scrollableParent;
var _translateDragImageFn;
function handleDragImageTranslateOverride(event, currentCoordinates, hoveredElement, translateDragImageFn) {
_currentCoordinates = currentCoordinates;
_translateDragImageFn = translateDragImageFn;
if (_hoveredElement !== hoveredElement) {
_hoveredElement = hoveredElement;
_scrollableParent = findScrollableParent(_hoveredElement);
if (isScrollable(el)) {
return el;
}
var performScrollAnimation = updateScrollIntentions(_currentCoordinates, _scrollableParent, _options.threshold, _scrollIntentions, _dynamicVelocity);
if (performScrollAnimation) {
scheduleScrollAnimation();
if (el === document.documentElement) {
return null;
}
else if (!!_scrollAnimationFrameId) {
window.cancelAnimationFrame(_scrollAnimationFrameId);
_scrollAnimationFrameId = null;
}
} while (el = el.parentNode);
return null;
}
function determineScrollIntention(currentCoordinate, size, threshold) {
if (currentCoordinate < threshold) {
return -1;
}
function scheduleScrollAnimation() {
if (!!_scrollAnimationFrameId) {
return;
}
_scrollAnimationFrameId = window.requestAnimationFrame(scrollAnimation);
else if (size - currentCoordinate < threshold) {
return 1;
}
function scrollAnimation() {
var scrollDiffX = 0, scrollDiffY = 0, isTopLevel = isTopLevelEl(_scrollableParent);
if (_scrollIntentions.horizontal !== 0) {
scrollDiffX = Math.round(_options.velocityFn(_dynamicVelocity.x, _options.threshold) * _scrollIntentions.horizontal);
getSetElementScroll(_scrollableParent, 0, scrollDiffX);
}
if (_scrollIntentions.vertical !== 0) {
scrollDiffY = Math.round(_options.velocityFn(_dynamicVelocity.y, _options.threshold) * _scrollIntentions.vertical);
getSetElementScroll(_scrollableParent, 1, scrollDiffY);
}
if (isTopLevel) {
_translateDragImageFn(scrollDiffX, scrollDiffY);
}
else {
_translateDragImageFn(0, 0);
}
return 0;
}
function determineDynamicVelocity(scrollIntention, currentCoordinate, size, threshold) {
if (scrollIntention === -1) {
return Math.abs(currentCoordinate - threshold);
}
else if (scrollIntention === 1) {
return Math.abs(size - currentCoordinate - threshold);
}
return 0;
}
function isScrollEndReached(axis, scrollIntention, scrollBounds) {
var currentScrollOffset = (axis === 0) ? (scrollBounds.scrollX) : (scrollBounds.scrollY);
if (scrollIntention === 1) {
var maxScrollOffset = (axis === 0) ? (scrollBounds.scrollWidth - scrollBounds.width) : (scrollBounds.scrollHeight -
scrollBounds.height);
return currentScrollOffset >= maxScrollOffset;
}
else if (scrollIntention === -1) {
return (currentScrollOffset <= 0);
}
return true;
}
var _options = {
threshold: 75,
velocityFn: function (velocity, threshold) {
var multiplier = velocity / threshold;
var easeInCubic = multiplier * multiplier * multiplier;
return easeInCubic * threshold;
}
};
var _scrollIntentions = {
horizontal: 0,
vertical: 0
};
var _dynamicVelocity = {
x: 0,
y: 0
};
var _scrollAnimationFrameId;
var _currentCoordinates;
var _hoveredElement;
var _scrollableParent;
var _translateDragImageFn;
function handleDragImageTranslateOverride(event, currentCoordinates, hoveredElement, translateDragImageFn) {
_currentCoordinates = currentCoordinates;
_translateDragImageFn = translateDragImageFn;
if (_hoveredElement !== hoveredElement) {
_hoveredElement = hoveredElement;
_scrollableParent = findScrollableParent(_hoveredElement);
}
var performScrollAnimation = updateScrollIntentions(_currentCoordinates, _scrollableParent, _options.threshold, _scrollIntentions, _dynamicVelocity);
if (performScrollAnimation) {
scheduleScrollAnimation();
}
else if (!!_scrollAnimationFrameId) {
window.cancelAnimationFrame(_scrollAnimationFrameId);
_scrollAnimationFrameId = null;
if (updateScrollIntentions(_currentCoordinates, _scrollableParent, _options.threshold, _scrollIntentions, _dynamicVelocity)) {
scheduleScrollAnimation();
}
}
function updateScrollIntentions(currentCoordinates, scrollableParent, threshold, scrollIntentions, dynamicVelocity) {
if (!currentCoordinates || !scrollableParent) {
return false;
}
var scrollableParentBounds = {
x: getElementViewportOffset(scrollableParent, 0),
y: getElementViewportOffset(scrollableParent, 1),
width: getElementViewportSize(scrollableParent, 0),
height: getElementViewportSize(scrollableParent, 1),
scrollX: getSetElementScroll(scrollableParent, 0),
scrollY: getSetElementScroll(scrollableParent, 1),
scrollWidth: scrollableParent.scrollWidth,
scrollHeight: scrollableParent.scrollHeight
};
var currentCoordinatesOffset = {
x: currentCoordinates.x - scrollableParentBounds.x,
y: currentCoordinates.y - scrollableParentBounds.y
};
scrollIntentions.horizontal = determineScrollIntention(currentCoordinatesOffset.x, scrollableParentBounds.width, threshold);
scrollIntentions.vertical = determineScrollIntention(currentCoordinatesOffset.y, scrollableParentBounds.height, threshold);
if (scrollIntentions.horizontal && isScrollEndReached(0, scrollIntentions.horizontal, scrollableParentBounds)) {
scrollIntentions.horizontal = 0;
}
else if (scrollIntentions.horizontal) {
dynamicVelocity.x = determineDynamicVelocity(scrollIntentions.horizontal, currentCoordinatesOffset.x, scrollableParentBounds.width, threshold);
}
if (scrollIntentions.vertical && isScrollEndReached(1, scrollIntentions.vertical, scrollableParentBounds)) {
scrollIntentions.vertical = 0;
}
else if (scrollIntentions.vertical) {
dynamicVelocity.y = determineDynamicVelocity(scrollIntentions.vertical, currentCoordinatesOffset.y, scrollableParentBounds.height, threshold);
}
return !!(scrollIntentions.horizontal || scrollIntentions.vertical);
}
function scheduleScrollAnimation() {
if (!!_scrollAnimationFrameId) {
return;
}
var scrollBehaviourDragImageTranslateOverride = handleDragImageTranslateOverride;
_scrollAnimationFrameId = window.requestAnimationFrame(scrollAnimation);
}
function scrollAnimation() {
var scrollDiffX = 0, scrollDiffY = 0, isTopLevel = isTopLevelEl(_scrollableParent);
if (_scrollIntentions.horizontal !== 0) {
scrollDiffX = Math.round(_options.velocityFn(_dynamicVelocity.x, _options.threshold) * _scrollIntentions.horizontal);
getSetElementScroll(_scrollableParent, 0, scrollDiffX);
}
if (_scrollIntentions.vertical !== 0) {
scrollDiffY = Math.round(_options.velocityFn(_dynamicVelocity.y, _options.threshold) * _scrollIntentions.vertical);
getSetElementScroll(_scrollableParent, 1, scrollDiffY);
}
if (isTopLevel) {
_translateDragImageFn(scrollDiffX, scrollDiffY);
}
else {
_translateDragImageFn(0, 0);
}
_scrollAnimationFrameId = null;
if (updateScrollIntentions(_currentCoordinates, _scrollableParent, _options.threshold, _scrollIntentions, _dynamicVelocity)) {
scheduleScrollAnimation();
}
}
function updateScrollIntentions(currentCoordinates, scrollableParent, threshold, scrollIntentions, dynamicVelocity) {
if (!currentCoordinates || !scrollableParent) {
return false;
}
var scrollableParentBounds = {
x: getElementViewportOffset(scrollableParent, 0),
y: getElementViewportOffset(scrollableParent, 1),
width: getElementViewportSize(scrollableParent, 0),
height: getElementViewportSize(scrollableParent, 1),
scrollX: getSetElementScroll(scrollableParent, 0),
scrollY: getSetElementScroll(scrollableParent, 1),
scrollWidth: scrollableParent.scrollWidth,
scrollHeight: scrollableParent.scrollHeight
};
var currentCoordinatesOffset = {
x: currentCoordinates.x - scrollableParentBounds.x,
y: currentCoordinates.y - scrollableParentBounds.y
};
scrollIntentions.horizontal = determineScrollIntention(currentCoordinatesOffset.x, scrollableParentBounds.width, threshold);
scrollIntentions.vertical = determineScrollIntention(currentCoordinatesOffset.y, scrollableParentBounds.height, threshold);
if (scrollIntentions.horizontal && isScrollEndReached(0, scrollIntentions.horizontal, scrollableParentBounds)) {
scrollIntentions.horizontal = 0;
}
else if (scrollIntentions.horizontal) {
dynamicVelocity.x = determineDynamicVelocity(scrollIntentions.horizontal, currentCoordinatesOffset.x, scrollableParentBounds.width, threshold);
}
if (scrollIntentions.vertical && isScrollEndReached(1, scrollIntentions.vertical, scrollableParentBounds)) {
scrollIntentions.vertical = 0;
}
else if (scrollIntentions.vertical) {
dynamicVelocity.y = determineDynamicVelocity(scrollIntentions.vertical, currentCoordinatesOffset.y, scrollableParentBounds.height, threshold);
}
return !!(scrollIntentions.horizontal || scrollIntentions.vertical);
}
var scrollBehaviourDragImageTranslateOverride = handleDragImageTranslateOverride;
exports.scrollBehaviourDragImageTranslateOverride = scrollBehaviourDragImageTranslateOverride;
exports.scrollBehaviourDragImageTranslateOverride = scrollBehaviourDragImageTranslateOverride;
Object.defineProperty(exports, '__esModule', { value: true });
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=scroll-behaviour.js.map
//# sourceMappingURL=scroll-behaviour.js.map

@@ -1,2 +0,2 @@

!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?b(exports):"function"==typeof define&&define.amd?define(["exports"],b):b(a.MobileDragDrop=a.MobileDragDrop||{})}(this,function(a){"use strict";function b(a){return a===document.body||a===document.documentElement}function c(a,c){var d;if(b(a))d=0===c?a.clientLeft:a.clientTop;else{var e=a.getBoundingClientRect();d=0===c?e.left:e.top}return d}function d(a,c){var d;return d=b(a)?0===c?window.innerWidth:window.innerHeight:0===c?a.clientWidth:a.clientHeight}function e(a,c,d){var e=0===c?"scrollLeft":"scrollTop",f=b(a);return 2===arguments.length?f?document.body[e]||document.documentElement[e]:a[e]:void(f?(document.documentElement[e]+=d,document.body[e]+=d):a[e]+=d)}function f(a){var b=getComputedStyle(a);return a.scrollHeight>a.clientHeight&&("scroll"===b.overflowY||"auto"===b.overflowY)||a.scrollWidth>a.clientWidth&&("scroll"===b.overflowX||"auto"===b.overflowX)}function g(a){do{if(!a)return;if(f(a))return a;if(a===document.documentElement)return null}while(a=a.parentNode);return null}function h(a,b,c){return a<c?-1:b-a<c?1:0}function i(a,b,c,d){return a===-1?Math.abs(b-d):1===a?Math.abs(c-b-d):0}function j(a,b,c){var d=0===a?c.scrollX:c.scrollY;if(1===b){var e=0===a?c.scrollWidth-c.width:c.scrollHeight-c.height;return d>=e}return b!==-1||d<=0}function k(a,b,c,d){p=b,s=d,q!==c&&(q=c,r=g(q));var e=n(p,r,t.threshold,u,v);e?l():o&&(window.cancelAnimationFrame(o),o=null)}function l(){o||(o=window.requestAnimationFrame(m))}function m(){var a=0,c=0,d=b(r);0!==u.horizontal&&(a=Math.round(t.velocityFn(v.x,t.threshold)*u.horizontal),e(r,0,a)),0!==u.vertical&&(c=Math.round(t.velocityFn(v.y,t.threshold)*u.vertical),e(r,1,c)),d?s(a,c):s(0,0),o=null,n(p,r,t.threshold,u,v)&&l()}function n(a,b,f,g,k){if(!a||!b)return!1;var l={x:c(b,0),y:c(b,1),width:d(b,0),height:d(b,1),scrollX:e(b,0),scrollY:e(b,1),scrollWidth:b.scrollWidth,scrollHeight:b.scrollHeight},m={x:a.x-l.x,y:a.y-l.y};return g.horizontal=h(m.x,l.width,f),g.vertical=h(m.y,l.height,f),g.horizontal&&j(0,g.horizontal,l)?g.horizontal=0:g.horizontal&&(k.x=i(g.horizontal,m.x,l.width,f)),g.vertical&&j(1,g.vertical,l)?g.vertical=0:g.vertical&&(k.y=i(g.vertical,m.y,l.height,f)),!(!g.horizontal&&!g.vertical)}var o,p,q,r,s,t={threshold:75,velocityFn:function(a,b){var c=a/b,d=c*c*c;return d*b}},u={horizontal:0,vertical:0},v={x:0,y:0},w=k;a.scrollBehaviourDragImageTranslateOverride=w,Object.defineProperty(a,"__esModule",{value:!0})});
!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(n.MobileDragDrop=n.MobileDragDrop||{})}(this,function(n){"use strict";function t(n){return n===document.body||n===document.documentElement}function e(n,e){var o;if(t(n))o=0===e?n.clientLeft:n.clientTop;else{var r=n.getBoundingClientRect();o=0===e?r.left:r.top}return o}function o(n,e){return t(n)?0===e?window.innerWidth:window.innerHeight:0===e?n.clientWidth:n.clientHeight}function r(n,e,o){var r=0===e?"scrollLeft":"scrollTop",u=t(n);if(2===arguments.length)return u?document.body[r]||document.documentElement[r]:n[r];u?(document.documentElement[r]+=o,document.body[r]+=o):n[r]+=o}function u(n,t,e){return n<e?-1:t-n<e?1:0}function i(n,t,e,o){return-1===n?Math.abs(t-o):1===n?Math.abs(e-t-o):0}function c(n,t,e){var o=0===n?e.scrollX:e.scrollY;return 1===t?o>=(0===n?e.scrollWidth-e.width:e.scrollHeight-e.height):-1!==t||o<=0}var l,f,d,a,s,h={threshold:75,velocityFn:function(n,t){var e=n/t;return e*e*e*t}},v={horizontal:0,vertical:0},w={x:0,y:0};function m(){l||(l=window.requestAnimationFrame(p))}function p(){var n=0,e=0,o=t(a);0!==v.horizontal&&(n=Math.round(h.velocityFn(w.x,h.threshold)*v.horizontal),r(a,0,n)),0!==v.vertical&&(e=Math.round(h.velocityFn(w.y,h.threshold)*v.vertical),r(a,1,e)),o?s(n,e):s(0,0),l=null,y(f,a,h.threshold,v,w)&&m()}function y(n,t,l,f,d){if(!n||!t)return!1;var a={x:e(t,0),y:e(t,1),width:o(t,0),height:o(t,1),scrollX:r(t,0),scrollY:r(t,1),scrollWidth:t.scrollWidth,scrollHeight:t.scrollHeight},s={x:n.x-a.x,y:n.y-a.y};return f.horizontal=u(s.x,a.width,l),f.vertical=u(s.y,a.height,l),f.horizontal&&c(0,f.horizontal,a)?f.horizontal=0:f.horizontal&&(d.x=i(f.horizontal,s.x,a.width,l)),f.vertical&&c(1,f.vertical,a)?f.vertical=0:f.vertical&&(d.y=i(f.vertical,s.y,a.height,l)),!(!f.horizontal&&!f.vertical)}var x=function(n,t,e,o){f=t,s=o,d!==e&&(a=function(n){do{if(!n)return;if(t=n,e=getComputedStyle(t),t.scrollHeight>t.clientHeight&&("scroll"===e.overflowY||"auto"===e.overflowY)||t.scrollWidth>t.clientWidth&&("scroll"===e.overflowX||"auto"===e.overflowX))return n;if(n===document.documentElement)return null}while(n=n.parentNode);var t,e;return null}(d=e)),y(f,a,h.threshold,v,w)?m():l&&(window.cancelAnimationFrame(l),l=null)};n.scrollBehaviourDragImageTranslateOverride=x,Object.defineProperty(n,"__esModule",{value:!0})});
//# sourceMappingURL=scroll-behaviour.min.js.map

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc