UNPKG

ngx-gridster

Version:
199 lines 17.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** @type {?} */ var scrollSensitivity; /** @type {?} */ var scrollSpeed; /** @type {?} */ var intervalDuration = 50; /** @type {?} */ var gridsterElement; /** @type {?} */ var resizeEvent; /** @type {?} */ var resizeEventType; /** @type {?} */ var intervalE; /** @type {?} */ var intervalW; /** @type {?} */ var intervalN; /** @type {?} */ var intervalS; /** * @param {?} gridster * @param {?} left * @param {?} top * @param {?} width * @param {?} height * @param {?} e * @param {?} lastMouse * @param {?} calculateItemPosition * @param {?=} resize * @param {?=} resizeEventScrollType * @return {?} */ export function scroll(gridster, left, top, width, height, e, lastMouse, calculateItemPosition, resize, resizeEventScrollType) { scrollSensitivity = gridster.$options.scrollSensitivity; scrollSpeed = gridster.$options.scrollSpeed; gridsterElement = gridster.el; resizeEvent = resize; resizeEventType = resizeEventScrollType; /** @type {?} */ var offsetWidth = gridsterElement.offsetWidth; /** @type {?} */ var offsetHeight = gridsterElement.offsetHeight; /** @type {?} */ var offsetLeft = gridsterElement.scrollLeft; /** @type {?} */ var offsetTop = gridsterElement.scrollTop; /** @type {?} */ var elemTopOffset = top - offsetTop; /** @type {?} */ var elemBottomOffset = offsetHeight + offsetTop - top - height; if (!gridster.$options.disableScrollVertical) { if (lastMouse.clientY < e.clientY && elemBottomOffset < scrollSensitivity) { cancelN(); if ((resizeEvent && resizeEventType && !resizeEventType.s) || intervalS) { return; } intervalS = startVertical(1, calculateItemPosition, lastMouse); } else if (lastMouse.clientY > e.clientY && offsetTop > 0 && elemTopOffset < scrollSensitivity) { cancelS(); if ((resizeEvent && resizeEventType && !resizeEventType.n) || intervalN) { return; } intervalN = startVertical(-1, calculateItemPosition, lastMouse); } else if (lastMouse.clientY !== e.clientY) { cancelVertical(); } } /** @type {?} */ var elemRightOffset = offsetLeft + offsetWidth - left - width; /** @type {?} */ var elemLeftOffset = left - offsetLeft; if (!gridster.$options.disableScrollHorizontal) { if (lastMouse.clientX < e.clientX && elemRightOffset <= scrollSensitivity) { cancelW(); if ((resizeEvent && resizeEventType && !resizeEventType.e) || intervalE) { return; } intervalE = startHorizontal(1, calculateItemPosition, lastMouse); } else if (lastMouse.clientX > e.clientX && offsetLeft > 0 && elemLeftOffset < scrollSensitivity) { cancelE(); if ((resizeEvent && resizeEventType && !resizeEventType.w) || intervalW) { return; } intervalW = startHorizontal(-1, calculateItemPosition, lastMouse); } else if (lastMouse.clientX !== e.clientX) { cancelHorizontal(); } } } /** * @param {?} sign * @param {?} calculateItemPosition * @param {?} lastMouse * @return {?} */ function startVertical(sign, calculateItemPosition, lastMouse) { /** @type {?} */ var clientY = lastMouse.clientY; return setInterval((/** * @return {?} */ function () { if (!gridsterElement || sign === -1 && gridsterElement.scrollTop - scrollSpeed < 0) { cancelVertical(); } gridsterElement.scrollTop += sign * scrollSpeed; clientY += sign * scrollSpeed; calculateItemPosition({ clientX: lastMouse.clientX, clientY: clientY }); }), intervalDuration); } /** * @param {?} sign * @param {?} calculateItemPosition * @param {?} lastMouse * @return {?} */ function startHorizontal(sign, calculateItemPosition, lastMouse) { /** @type {?} */ var clientX = lastMouse.clientX; return setInterval((/** * @return {?} */ function () { if (!gridsterElement || sign === -1 && gridsterElement.scrollLeft - scrollSpeed < 0) { cancelHorizontal(); } gridsterElement.scrollLeft += sign * scrollSpeed; clientX += sign * scrollSpeed; calculateItemPosition({ clientX: clientX, clientY: lastMouse.clientY }); }), intervalDuration); } /** * @return {?} */ export function cancelScroll() { cancelHorizontal(); cancelVertical(); gridsterElement = undefined; } /** * @return {?} */ function cancelHorizontal() { cancelE(); cancelW(); } /** * @return {?} */ function cancelVertical() { cancelN(); cancelS(); } /** * @return {?} */ function cancelE() { if (intervalE) { clearInterval(intervalE); intervalE = 0; } } /** * @return {?} */ function cancelW() { if (intervalW) { clearInterval(intervalW); intervalW = 0; } } /** * @return {?} */ function cancelS() { if (intervalS) { clearInterval(intervalS); intervalS = 0; } } /** * @return {?} */ function cancelN() { if (intervalN) { clearInterval(intervalN); intervalN = 0; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZHN0ZXJTY3JvbGwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1ncmlkc3Rlci8iLCJzb3VyY2VzIjpbImxpYi9ncmlkc3RlclNjcm9sbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0lBR0ksaUJBQXlCOztJQUN6QixXQUFtQjs7SUFDakIsZ0JBQWdCLEdBQUcsRUFBRTs7SUFDdkIsZUFBb0I7O0lBQ3BCLFdBQWdDOztJQUNoQyxlQUFvRDs7SUFDcEQsU0FBaUI7O0lBQ2pCLFNBQWlCOztJQUNqQixTQUFpQjs7SUFDakIsU0FBaUI7Ozs7Ozs7Ozs7Ozs7O0FBRXJCLE1BQU0sVUFBVSxNQUFNLENBQUMsUUFBb0MsRUFBRSxJQUFZLEVBQUUsR0FBVyxFQUFFLEtBQWEsRUFBRSxNQUFjLEVBQzlGLENBQWEsRUFBRSxTQUFjLEVBQzdCLHFCQUErQixFQUFFLE1BQWdCLEVBQUUscUJBQStDO0lBQ3ZILGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUM7SUFDeEQsV0FBVyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO0lBQzVDLGVBQWUsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDO0lBQzlCLFdBQVcsR0FBRyxNQUFNLENBQUM7SUFDckIsZUFBZSxHQUFHLHFCQUFxQixDQUFDOztRQUVsQyxXQUFXLEdBQUcsZUFBZSxDQUFDLFdBQVc7O1FBQ3pDLFlBQVksR0FBRyxlQUFlLENBQUMsWUFBWTs7UUFDM0MsVUFBVSxHQUFHLGVBQWUsQ0FBQyxVQUFVOztRQUN2QyxTQUFTLEdBQUcsZUFBZSxDQUFDLFNBQVM7O1FBQ3JDLGFBQWEsR0FBRyxHQUFHLEdBQUcsU0FBUzs7UUFDL0IsZ0JBQWdCLEdBQUcsWUFBWSxHQUFHLFNBQVMsR0FBRyxHQUFHLEdBQUcsTUFBTTtJQUVoRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRTtRQUM1QyxJQUFJLFNBQVMs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UyxPQUFPO0lBQ2QsSUFBSSxTQUFTLEVBQUU7UUFDYixhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekIsU0FBUyxHQUFHLENBQUMsQ0FBQztLQUNmO0FBQ0gsQ0FBQzs7OztBQUVELFNBQVMsT0FBTztJQUNkLElBQUksU0FBUyxFQUFFO1FBQ2IsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pCLFNBQVMsR0FBRyxDQUFDLENBQUM7S0FDZjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0dyaWRzdGVyUmVzaXplRXZlbnRUeXBlfSBmcm9tICcuL2dyaWRzdGVyUmVzaXplRXZlbnRUeXBlLmludGVyZmFjZSc7XHJcbmltcG9ydCB7R3JpZHN0ZXJDb21wb25lbnRJbnRlcmZhY2V9IGZyb20gJy4vZ3JpZHN0ZXIuaW50ZXJmYWNlJztcclxuXHJcbmxldCBzY3JvbGxTZW5zaXRpdml0eTogbnVtYmVyO1xyXG5sZXQgc2Nyb2xsU3BlZWQ6IG51bWJlcjtcclxuY29uc3QgaW50ZXJ2YWxEdXJhdGlvbiA9IDUwO1xyXG5sZXQgZ3JpZHN0ZXJFbGVtZW50OiBhbnk7XHJcbmxldCByZXNpemVFdmVudDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcclxubGV0IHJlc2l6ZUV2ZW50VHlwZTogR3JpZHN0ZXJSZXNpemVFdmVudFR5cGUgfCB1bmRlZmluZWQ7XHJcbmxldCBpbnRlcnZhbEU6IG51bWJlcjtcclxubGV0IGludGVydmFsVzogbnVtYmVyO1xyXG5sZXQgaW50ZXJ2YWxOOiBudW1iZXI7XHJcbmxldCBpbnRlcnZhbFM6IG51bWJlcjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGwoZ3JpZHN0ZXI6IEdyaWRzdGVyQ29tcG9uZW50SW50ZXJmYWNlLCBsZWZ0OiBudW1iZXIsIHRvcDogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcixcclxuICAgICAgICAgICAgICAgICAgICAgICBlOiBNb3VzZUV2ZW50LCBsYXN0TW91c2U6IGFueSxcclxuICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhdGVJdGVtUG9zaXRpb246IEZ1bmN0aW9uLCByZXNpemU/OiBib29sZWFuLCByZXNpemVFdmVudFNjcm9sbFR5cGU/OiBHcmlkc3RlclJlc2l6ZUV2ZW50VHlwZSkge1xyXG4gIHNjcm9sbFNlbnNpdGl2aXR5ID0gZ3JpZHN0ZXIuJG9wdGlvbnMuc2Nyb2xsU2Vuc2l0aXZpdHk7XHJcbiAgc2Nyb2xsU3BlZWQgPSBncmlkc3Rlci4kb3B0aW9ucy5zY3JvbGxTcGVlZDtcclxuICBncmlkc3RlckVsZW1lbnQgPSBncmlkc3Rlci5lbDtcclxuICByZXNpemVFdmVudCA9IHJlc2l6ZTtcclxuICByZXNpemVFdmVudFR5cGUgPSByZXNpemVFdmVudFNjcm9sbFR5cGU7XHJcblxyXG4gIGNvbnN0IG9mZnNldFdpZHRoID0gZ3JpZHN0ZXJFbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gIGNvbnN0IG9mZnNldEhlaWdodCA9IGdyaWRzdGVyRWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgY29uc3Qgb2Zmc2V0TGVmdCA9IGdyaWRzdGVyRWxlbWVudC5zY3JvbGxMZWZ0O1xyXG4gIGNvbnN0IG9mZnNldFRvcCA9IGdyaWRzdGVyRWxlbWVudC5zY3JvbGxUb3A7XHJcbiAgY29uc3QgZWxlbVRvcE9mZnNldCA9IHRvcCAtIG9mZnNldFRvcDtcclxuICBjb25zdCBlbGVtQm90dG9tT2Zmc2V0ID0gb2Zmc2V0SGVpZ2h0ICsgb2Zmc2V0VG9wIC0gdG9wIC0gaGVpZ2h0O1xyXG5cclxuICBpZiAoIWdyaWRzdGVyLiRvcHRpb25zLmRpc2FibGVTY3JvbGxWZXJ0aWNhbCkge1xyXG4gICAgaWYgKGxhc3RNb3VzZS5jbGllbnRZIDwgZS5jbGllbnRZICYmIGVsZW1Cb3R0b21PZmZzZXQgPCBzY3JvbGxTZW5zaXRpdml0eSkge1xyXG4gICAgICBjYW5jZWxOKCk7XHJcbiAgICAgIGlmICgocmVzaXplRXZlbnQgJiYgcmVzaXplRXZlbnRUeXBlICYmICFyZXNpemVFdmVudFR5cGUucykgfHwgaW50ZXJ2YWxTKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGludGVydmFsUyA9IHN0YXJ0VmVydGljYWwoMSwgY2FsY3VsYXRlSXRlbVBvc2l0aW9uLCBsYXN0TW91c2UpO1xyXG4gICAgfSBlbHNlIGlmIChsYXN0TW91c2UuY2xpZW50WSA+IGUuY2xpZW50WSAmJiBvZmZzZXRUb3AgPiAwICYmIGVsZW1Ub3BPZmZzZXQgPCBzY3JvbGxTZW5zaXRpdml0eSkge1xyXG4gICAgICBjYW5jZWxTKCk7XHJcbiAgICAgIGlmICgocmVzaXplRXZlbnQgJiYgcmVzaXplRXZlbnRUeXBlICYmICFyZXNpemVFdmVudFR5cGUubikgfHwgaW50ZXJ2YWxOKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGludGVydmFsTiA9IHN0YXJ0VmVydGljYWwoLTEsIGNhbGN1bGF0ZUl0ZW1Qb3NpdGlvbiwgbGFzdE1vdXNlKTtcclxuICAgIH0gZWxzZSBpZiAobGFzdE1vdXNlLmNsaWVudFkgIT09IGUuY2xpZW50WSkge1xyXG4gICAgICBjYW5jZWxWZXJ0aWNhbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3QgZWxlbVJpZ2h0T2Zmc2V0ID0gb2Zmc2V0TGVmdCArIG9mZnNldFdpZHRoIC0gbGVmdCAtIHdpZHRoO1xyXG4gIGNvbnN0IGVsZW1MZWZ0T2Zmc2V0ID0gbGVmdCAtIG9mZnNldExlZnQ7XHJcblxyXG4gIGlmICghZ3JpZHN0ZXIuJG9wdGlvbnMuZGlzYWJsZVNjcm9sbEhvcml6b250YWwpIHtcclxuICAgIGlmIChsYXN0TW91c2UuY2xpZW50WCA8IGUuY2xpZW50WCAmJiBlbGVtUmlnaHRPZmZzZXQgPD0gc2Nyb2xsU2Vuc2l0aXZpdHkpIHtcclxuICAgICAgY2FuY2VsVygpO1xyXG4gICAgICBpZiAoKHJlc2l6ZUV2ZW50ICYmIHJlc2l6ZUV2ZW50VHlwZSAmJiAhcmVzaXplRXZlbnRUeXBlLmUpIHx8IGludGVydmFsRSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpbnRlcnZhbEUgPSBzdGFydEhvcml6b250YWwoMSwgY2FsY3VsYXRlSXRlbVBvc2l0aW9uLCBsYXN0TW91c2UpO1xyXG4gICAgfSBlbHNlIGlmIChsYXN0TW91c2UuY2xpZW50WCA+IGUuY2xpZW50WCAmJiBvZmZzZXRMZWZ0ID4gMCAmJiBlbGVtTGVmdE9mZnNldCA8IHNjcm9sbFNlbnNpdGl2aXR5KSB7XHJcbiAgICAgIGNhbmNlbEUoKTtcclxuICAgICAgaWYgKChyZXNpemVFdmVudCAmJiByZXNpemVFdmVudFR5cGUgJiYgIXJlc2l6ZUV2ZW50VHlwZS53KSB8fCBpbnRlcnZhbFcpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaW50ZXJ2YWxXID0gc3RhcnRIb3Jpem9udGFsKC0xLCBjYWxjdWxhdGVJdGVtUG9zaXRpb24sIGxhc3RNb3VzZSk7XHJcbiAgICB9IGVsc2UgaWYgKGxhc3RNb3VzZS5jbGllbnRYICE9PSBlLmNsaWVudFgpIHtcclxuICAgICAgY2FuY2VsSG9yaXpvbnRhbCgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gc3RhcnRWZXJ0aWNhbChzaWduOiBudW1iZXIsIGNhbGN1bGF0ZUl0ZW1Qb3NpdGlvbjogRnVuY3Rpb24sIGxhc3RNb3VzZTogYW55KTogYW55IHtcclxuICBsZXQgY2xpZW50WSA9IGxhc3RNb3VzZS5jbGllbnRZO1xyXG4gIHJldHVybiBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICBpZiAoIWdyaWRzdGVyRWxlbWVudCB8fCBzaWduID09PSAtMSAmJiBncmlkc3RlckVsZW1lbnQuc2Nyb2xsVG9wIC0gc2Nyb2xsU3BlZWQgPCAwKSB7XHJcbiAgICAgIGNhbmNlbFZlcnRpY2FsKCk7XHJcbiAgICB9XHJcbiAgICBncmlkc3RlckVsZW1lbnQuc2Nyb2xsVG9wICs9IHNpZ24gKiBzY3JvbGxTcGVlZDtcclxuICAgIGNsaWVudFkgKz0gc2lnbiAqIHNjcm9sbFNwZWVkO1xyXG4gICAgY2FsY3VsYXRlSXRlbVBvc2l0aW9uKHtjbGllbnRYOiBsYXN0TW91c2UuY2xpZW50WCwgY2xpZW50WTogY2xpZW50WX0pO1xyXG4gIH0sIGludGVydmFsRHVyYXRpb24pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzdGFydEhvcml6b250YWwoc2lnbjogbnVtYmVyLCBjYWxjdWxhdGVJdGVtUG9zaXRpb246IEZ1bmN0aW9uLCBsYXN0TW91c2U6IGFueSk6IGFueSB7XHJcbiAgbGV0IGNsaWVudFggPSBsYXN0TW91c2UuY2xpZW50WDtcclxuICByZXR1cm4gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgaWYgKCFncmlkc3RlckVsZW1lbnQgfHwgc2lnbiA9PT0gLTEgJiYgZ3JpZHN0ZXJFbGVtZW50LnNjcm9sbExlZnQgLSBzY3JvbGxTcGVlZCA8IDApIHtcclxuICAgICAgY2FuY2VsSG9yaXpvbnRhbCgpO1xyXG4gICAgfVxyXG4gICAgZ3JpZHN0ZXJFbGVtZW50LnNjcm9sbExlZnQgKz0gc2lnbiAqIHNjcm9sbFNwZWVkO1xyXG4gICAgY2xpZW50WCArPSBzaWduICogc2Nyb2xsU3BlZWQ7XHJcbiAgICBjYWxjdWxhdGVJdGVtUG9zaXRpb24oe2NsaWVudFg6IGNsaWVudFgsIGNsaWVudFk6IGxhc3RNb3VzZS5jbGllbnRZfSk7XHJcbiAgfSwgaW50ZXJ2YWxEdXJhdGlvbik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYW5jZWxTY3JvbGwoKSB7XHJcbiAgY2FuY2VsSG9yaXpvbnRhbCgpO1xyXG4gIGNhbmNlbFZlcnRpY2FsKCk7XHJcbiAgZ3JpZHN0ZXJFbGVtZW50ID0gdW5kZWZpbmVkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjYW5jZWxIb3Jpem9udGFsKCkge1xyXG4gIGNhbmNlbEUoKTtcclxuICBjYW5jZWxXKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbmNlbFZlcnRpY2FsKCkge1xyXG4gIGNhbmNlbE4oKTtcclxuICBjYW5jZWxTKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbmNlbEUoKSB7XHJcbiAgaWYgKGludGVydmFsRSkge1xyXG4gICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbEUpO1xyXG4gICAgaW50ZXJ2YWxFID0gMDtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbmNlbFcoKSB7XHJcbiAgaWYgKGludGVydmFsVykge1xyXG4gICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbFcpO1xyXG4gICAgaW50ZXJ2YWxXID0gMDtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbmNlbFMoKSB7XHJcbiAgaWYgKGludGVydmFsUykge1xyXG4gICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbFMpO1xyXG4gICAgaW50ZXJ2YWxTID0gMDtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbmNlbE4oKSB7XHJcbiAgaWYgKGludGVydmFsTikge1xyXG4gICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbE4pO1xyXG4gICAgaW50ZXJ2YWxOID0gMDtcclxuICB9XHJcbn1cclxuIl19