slickgrid
Version:
A lightning fast JavaScript grid/spreadsheet
114 lines (113 loc) • 7.4 kB
JavaScript
;
(() => {
// src/slick.interactions.ts
var Utils = Slick.Utils;
function Draggable(options) {
let { containerElement } = options, { onDragInit, onDragStart, onDrag, onDragEnd, preventDragFromKeys } = options, element, startX, startY, deltaX, deltaY, dragStarted, matchClassTag;
containerElement || (containerElement = document.body);
let originaldd = {
dragSource: containerElement,
dragHandle: null
};
function init() {
containerElement && (containerElement.addEventListener("mousedown", userPressed), containerElement.addEventListener("touchstart", userPressed));
}
function executeDragCallbackWhenDefined(callback, evt, dd) {
if (typeof callback == "function")
return callback(evt, dd);
}
function destroy() {
containerElement && (containerElement.removeEventListener("mousedown", userPressed), containerElement.removeEventListener("touchstart", userPressed));
}
function preventDrag(event) {
let eventPrevented = !1;
return preventDragFromKeys && preventDragFromKeys.forEach((key) => {
event[key] && (eventPrevented = !0);
}), eventPrevented;
}
function userPressed(event) {
var _a, _b;
if (!preventDrag(event)) {
element = event.target;
let targetEvent = (_b = (_a = event == null ? void 0 : event.touches) == null ? void 0 : _a[0]) != null ? _b : event, { target } = targetEvent;
if (!options.allowDragFrom || options.allowDragFrom && element.matches(options.allowDragFrom) || options.allowDragFromClosest && element.closest(options.allowDragFromClosest)) {
if (originaldd.dragHandle = element, matchClassTag = "", options.dragFromClassDetectArr) {
for (let o, i = 0; i < options.dragFromClassDetectArr.length; i++)
if (o = options.dragFromClassDetectArr[i], o.id && element.id === o.id || o.cssSelector && element.matches(o.cssSelector)) {
matchClassTag = o.tag;
break;
}
}
let winScrollPos = Utils.windowScrollPosition();
startX = winScrollPos.left + targetEvent.clientX, startY = winScrollPos.top + targetEvent.clientY, deltaX = targetEvent.clientX - targetEvent.clientX, deltaY = targetEvent.clientY - targetEvent.clientY, originaldd = Object.assign(originaldd, { deltaX, deltaY, startX, startY, target, matchClassTag }), executeDragCallbackWhenDefined(onDragInit, event, originaldd) !== !1 && (document.body.addEventListener("mousemove", userMoved), document.body.addEventListener("touchmove", userMoved), window.addEventListener("mouseup", userReleased), window.addEventListener("touchend", userReleased), window.addEventListener("touchcancel", userReleased));
}
}
}
function userMoved(event) {
var _a, _b;
if (!preventDrag(event)) {
let targetEvent = (_b = (_a = event == null ? void 0 : event.touches) == null ? void 0 : _a[0]) != null ? _b : event;
deltaX = targetEvent.clientX - startX, deltaY = targetEvent.clientY - startY;
let { target } = targetEvent;
dragStarted || (originaldd = Object.assign(originaldd, { deltaX, deltaY, startX, startY, target, matchClassTag }), executeDragCallbackWhenDefined(onDragStart, event, originaldd), dragStarted = !0), originaldd = Object.assign(originaldd, { deltaX, deltaY, startX, startY, target, matchClassTag }), executeDragCallbackWhenDefined(onDrag, event, originaldd);
}
}
function userReleased(event) {
if (document.body.removeEventListener("mousemove", userMoved), document.body.removeEventListener("touchmove", userMoved), window.removeEventListener("mouseup", userReleased), window.removeEventListener("touchend", userReleased), window.removeEventListener("touchcancel", userReleased), dragStarted) {
let { target } = event;
originaldd = Object.assign(originaldd, { target }), executeDragCallbackWhenDefined(onDragEnd, event, originaldd), dragStarted = !1;
}
}
return init(), { destroy };
}
function MouseWheel(options) {
let { element, onMouseWheel } = options;
function destroy() {
element.removeEventListener("wheel", wheelHandler), element.removeEventListener("mousewheel", wheelHandler);
}
function init() {
element.addEventListener("wheel", wheelHandler), element.addEventListener("mousewheel", wheelHandler);
}
function wheelHandler(event) {
let orgEvent = event || window.event, delta = 0, deltaX = 0, deltaY = 0;
orgEvent.wheelDelta && (delta = orgEvent.wheelDelta / 120), orgEvent.detail && (delta = -orgEvent.detail / 3), deltaY = delta, orgEvent.axis !== void 0 && orgEvent.axis === orgEvent.HORIZONTAL_AXIS && (deltaY = 0, deltaX = -1 * delta), orgEvent.wheelDeltaY !== void 0 && (deltaY = orgEvent.wheelDeltaY / 120), orgEvent.wheelDeltaX !== void 0 && (deltaX = -1 * orgEvent.wheelDeltaX / 120), typeof onMouseWheel == "function" && onMouseWheel(event, delta, deltaX, deltaY);
}
return init(), { destroy };
}
function Resizable(options) {
let { resizeableElement, resizeableHandleElement, onResizeStart, onResize, onResizeEnd } = options;
if (!resizeableHandleElement || typeof resizeableHandleElement.addEventListener != "function")
throw new Error("[Slick.Resizable] You did not provide a valid html element that will be used for the handle to resize.");
function init() {
resizeableHandleElement.addEventListener("mousedown", resizeStartHandler), resizeableHandleElement.addEventListener("touchstart", resizeStartHandler);
}
function destroy() {
typeof (resizeableHandleElement == null ? void 0 : resizeableHandleElement.removeEventListener) == "function" && (resizeableHandleElement.removeEventListener("mousedown", resizeStartHandler), resizeableHandleElement.removeEventListener("touchstart", resizeStartHandler));
}
function executeResizeCallbackWhenDefined(callback, e) {
if (typeof callback == "function")
return callback(e, { resizeableElement, resizeableHandleElement });
}
function resizeStartHandler(e) {
e.preventDefault();
let event = e.touches ? e.changedTouches[0] : e;
executeResizeCallbackWhenDefined(onResizeStart, event) !== !1 && (document.body.addEventListener("mousemove", resizingHandler), document.body.addEventListener("mouseup", resizeEndHandler), document.body.addEventListener("touchmove", resizingHandler), document.body.addEventListener("touchend", resizeEndHandler));
}
function resizingHandler(e) {
e.preventDefault && e.type !== "touchmove" && e.preventDefault();
let event = e.touches ? e.changedTouches[0] : e;
typeof onResize == "function" && onResize(event, { resizeableElement, resizeableHandleElement });
}
function resizeEndHandler(e) {
let event = e.touches ? e.changedTouches[0] : e;
executeResizeCallbackWhenDefined(onResizeEnd, event), document.body.removeEventListener("mousemove", resizingHandler), document.body.removeEventListener("mouseup", resizeEndHandler), document.body.removeEventListener("touchmove", resizingHandler), document.body.removeEventListener("touchend", resizeEndHandler);
}
return init(), { destroy };
}
window.Slick && Utils.extend(Slick, {
Draggable,
MouseWheel,
Resizable
});
})();
//# sourceMappingURL=slick.interactions.js.map