UNPKG

angular-gridster2

Version:
123 lines 16.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var scrollSensitivity; var scrollSpeed; var intervalDuration = 50; var gridsterElement; var resizeEvent; var resizeEventType; var intervalE; var intervalW; var intervalN; var intervalS; function scroll(gridsterItem, e, lastMouse, calculateItemPosition, resize, resizeEventScrollType) { scrollSensitivity = gridsterItem.gridster.$options.scrollSensitivity; scrollSpeed = gridsterItem.gridster.$options.scrollSpeed; gridsterElement = gridsterItem.gridster.el; resizeEvent = resize; resizeEventType = resizeEventScrollType; var offsetWidth = gridsterElement.offsetWidth; var offsetHeight = gridsterElement.offsetHeight; var offsetLeft = gridsterElement.scrollLeft; var offsetTop = gridsterElement.scrollTop; var elemTopOffset = gridsterItem.el.offsetTop - offsetTop; var elemBottomOffset = offsetHeight + offsetTop - gridsterItem.el.offsetTop - gridsterItem.el.offsetHeight; 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(); } var elemRightOffset = offsetLeft + offsetWidth - gridsterItem.el.offsetLeft - gridsterItem.el.offsetWidth; var elemLeftOffset = gridsterItem.el.offsetLeft - offsetLeft; 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(); } } exports.scroll = scroll; function startVertical(sign, calculateItemPosition, lastMouse) { var clientY = lastMouse.clientY; return setInterval(function () { if (!gridsterElement || sign === -1 && gridsterElement.scrollTop - scrollSpeed < 0) { cancelVertical(); } gridsterElement.scrollTop += sign * scrollSpeed; clientY += sign * scrollSpeed; calculateItemPosition({ clientX: lastMouse.clientX, clientY: clientY }); }, intervalDuration); } function startHorizontal(sign, calculateItemPosition, lastMouse) { var clientX = lastMouse.clientX; return setInterval(function () { if (!gridsterElement || sign === -1 && gridsterElement.scrollLeft - scrollSpeed < 0) { cancelHorizontal(); } gridsterElement.scrollLeft += sign * scrollSpeed; clientX += sign * scrollSpeed; calculateItemPosition({ clientX: clientX, clientY: lastMouse.clientY }); }, intervalDuration); } function cancelScroll() { cancelHorizontal(); cancelVertical(); gridsterElement = undefined; } exports.cancelScroll = cancelScroll; function cancelHorizontal() { cancelE(); cancelW(); } function cancelVertical() { cancelN(); cancelS(); } function cancelE() { if (intervalE) { clearInterval(intervalE); intervalE = 0; } } function cancelW() { if (intervalW) { clearInterval(intervalW); intervalW = 0; } } function cancelS() { if (intervalS) { clearInterval(intervalS); intervalS = 0; } } function cancelN() { if (intervalN) { clearInterval(intervalN); intervalN = 0; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy50bXAvZ3JpZHN0ZXJTY3JvbGwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLElBQUksaUJBQXlCLENBQUM7QUFDOUIsSUFBSSxXQUFtQixDQUFDO0FBQ3hCLElBQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBQzVCLElBQUksZUFBb0IsQ0FBQztBQUN6QixJQUFJLFdBQWdDLENBQUM7QUFDckMsSUFBSSxlQUFvRCxDQUFDO0FBQ3pELElBQUksU0FBaUIsQ0FBQztBQUN0QixJQUFJLFNBQWlCLENBQUM7QUFDdEIsSUFBSSxTQUFpQixDQUFDO0FBQ3RCLElBQUksU0FBaUIsQ0FBQztBQUV0QixnQkFBdUIsWUFBNEMsRUFBRSxDQUFhLEVBQUUsU0FBYyxFQUFFLHFCQUErQixFQUM1RyxNQUFnQixFQUFFLHFCQUErQztJQUN0RixpQkFBaUIsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztJQUNyRSxXQUFXLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO0lBQ3pELGVBQWUsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztJQUMzQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0lBQ3JCLGVBQWUsR0FBRyxxQkFBcUIsQ0FBQztJQUV4QyxJQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDO0lBQ2hELElBQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxZQUFZLENBQUM7SUFDbEQsSUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLFVBQVUsQ0FBQztJQUM5QyxJQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDO0lBQzVDLElBQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM1RCxJQUFNLGdCQUFnQixHQUFHLFlBQVksR0FBRyxTQUFTLEdBQUcsWUFBWSxDQUFDLEVBQUUsQ0FBQyxTQUFT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YyxFQUFFLENBQUM7SUFDakIsZUFBZSxHQUFHLFNBQVMsQ0FBQztBQUM5QixDQUFDO0FBSkQsb0NBSUM7QUFFRDtJQUNFLE9BQU8sRUFBRSxDQUFDO0lBQ1YsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBRUQ7SUFDRSxPQUFPLEVBQUUsQ0FBQztJQUNWLE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQztBQUVEO0lBQ0UsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNkLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QixTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7QUFDSCxDQUFDO0FBRUQ7SUFDRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2QsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pCLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDaEIsQ0FBQztBQUNILENBQUM7QUFFRDtJQUNFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDZCxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekIsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNoQixDQUFDO0FBQ0gsQ0FBQztBQUVEO0lBQ0UsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNkLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QixTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7QUFDSCxDQUFDIiwiZmlsZSI6ImdyaWRzdGVyU2Nyb2xsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtHcmlkc3RlclJlc2l6ZUV2ZW50VHlwZX0gZnJvbSAnLi9ncmlkc3RlclJlc2l6ZUV2ZW50VHlwZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHtHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2V9IGZyb20gJy4vZ3JpZHN0ZXJJdGVtQ29tcG9uZW50LmludGVyZmFjZSc7XG5cbmxldCBzY3JvbGxTZW5zaXRpdml0eTogbnVtYmVyO1xubGV0IHNjcm9sbFNwZWVkOiBudW1iZXI7XG5jb25zdCBpbnRlcnZhbER1cmF0aW9uID0gNTA7XG5sZXQgZ3JpZHN0ZXJFbGVtZW50OiBhbnk7XG5sZXQgcmVzaXplRXZlbnQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5sZXQgcmVzaXplRXZlbnRUeXBlOiBHcmlkc3RlclJlc2l6ZUV2ZW50VHlwZSB8IHVuZGVmaW5lZDtcbmxldCBpbnRlcnZhbEU6IG51bWJlcjtcbmxldCBpbnRlcnZhbFc6IG51bWJlcjtcbmxldCBpbnRlcnZhbE46IG51bWJlcjtcbmxldCBpbnRlcnZhbFM6IG51bWJlcjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbChncmlkc3Rlckl0ZW06IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZSwgZTogTW91c2VFdmVudCwgbGFzdE1vdXNlOiBhbnksIGNhbGN1bGF0ZUl0ZW1Qb3NpdGlvbjogRnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHJlc2l6ZT86IGJvb2xlYW4sIHJlc2l6ZUV2ZW50U2Nyb2xsVHlwZT86IEdyaWRzdGVyUmVzaXplRXZlbnRUeXBlKSB7XG4gIHNjcm9sbFNlbnNpdGl2aXR5ID0gZ3JpZHN0ZXJJdGVtLmdyaWRzdGVyLiRvcHRpb25zLnNjcm9sbFNlbnNpdGl2aXR5O1xuICBzY3JvbGxTcGVlZCA9IGdyaWRzdGVySXRlbS5ncmlkc3Rlci4kb3B0aW9ucy5zY3JvbGxTcGVlZDtcbiAgZ3JpZHN0ZXJFbGVtZW50ID0gZ3JpZHN0ZXJJdGVtLmdyaWRzdGVyLmVsO1xuICByZXNpemVFdmVudCA9IHJlc2l6ZTtcbiAgcmVzaXplRXZlbnRUeXBlID0gcmVzaXplRXZlbnRTY3JvbGxUeXBlO1xuXG4gIGNvbnN0IG9mZnNldFdpZHRoID0gZ3JpZHN0ZXJFbGVtZW50Lm9mZnNldFdpZHRoO1xuICBjb25zdCBvZmZzZXRIZWlnaHQgPSBncmlkc3RlckVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICBjb25zdCBvZmZzZXRMZWZ0ID0gZ3JpZHN0ZXJFbGVtZW50LnNjcm9sbExlZnQ7XG4gIGNvbnN0IG9mZnNldFRvcCA9IGdyaWRzdGVyRWxlbWVudC5zY3JvbGxUb3A7XG4gIGNvbnN0IGVsZW1Ub3BPZmZzZXQgPSBncmlkc3Rlckl0ZW0uZWwub2Zmc2V0VG9wIC0gb2Zmc2V0VG9wO1xuICBjb25zdCBlbGVtQm90dG9tT2Zmc2V0ID0gb2Zmc2V0SGVpZ2h0ICsgb2Zmc2V0VG9wIC0gZ3JpZHN0ZXJJdGVtLmVsLm9mZnNldFRvcCAtIGdyaWRzdGVySXRlbS5lbC5vZmZzZXRIZWlnaHQ7XG4gIGlmIChsYXN0TW91c2UuY2xpZW50WSA8IGUuY2xpZW50WSAmJiBlbGVtQm90dG9tT2Zmc2V0IDwgc2Nyb2xsU2Vuc2l0aXZpdHkpIHtcbiAgICBjYW5jZWxOKCk7XG4gICAgaWYgKChyZXNpemVFdmVudCAmJiByZXNpemVFdmVudFR5cGUgJiYgIXJlc2l6ZUV2ZW50VHlwZS5zKSB8fCBpbnRlcnZhbFMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW50ZXJ2YWxTID0gc3RhcnRWZXJ0aWNhbCgxLCBjYWxjdWxhdGVJdGVtUG9zaXRpb24sIGxhc3RNb3VzZSk7XG4gIH0gZWxzZSBpZiAobGFzdE1vdXNlLmNsaWVudFkgPiBlLmNsaWVudFkgJiYgb2Zmc2V0VG9wID4gMCAmJiBlbGVtVG9wT2Zmc2V0IDwgc2Nyb2xsU2Vuc2l0aXZpdHkpIHtcbiAgICBjYW5jZWxTKCk7XG4gICAgaWYgKChyZXNpemVFdmVudCAmJiByZXNpemVFdmVudFR5cGUgJiYgIXJlc2l6ZUV2ZW50VHlwZS5uKSB8fCBpbnRlcnZhbE4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW50ZXJ2YWxOID0gc3RhcnRWZXJ0aWNhbCgtMSwgY2FsY3VsYXRlSXRlbVBvc2l0aW9uLCBsYXN0TW91c2UpO1xuICB9IGVsc2UgaWYgKGxhc3RNb3VzZS5jbGllbnRZICE9PSBlLmNsaWVudFkpIHtcbiAgICBjYW5jZWxWZXJ0aWNhbCgpO1xuICB9XG5cbiAgY29uc3QgZWxlbVJpZ2h0T2Zmc2V0ID0gb2Zmc2V0TGVmdCArIG9mZnNldFdpZHRoIC0gZ3JpZHN0ZXJJdGVtLmVsLm9mZnNldExlZnQgLSBncmlkc3Rlckl0ZW0uZWwub2Zmc2V0V2lkdGg7XG4gIGNvbnN0IGVsZW1MZWZ0T2Zmc2V0ID0gZ3JpZHN0ZXJJdGVtLmVsLm9mZnNldExlZnQgLSBvZmZzZXRMZWZ0O1xuICBpZiAobGFzdE1vdXNlLmNsaWVudFggPCBlLmNsaWVudFggJiYgZWxlbVJpZ2h0T2Zmc2V0IDw9IHNjcm9sbFNlbnNpdGl2aXR5KSB7XG4gICAgY2FuY2VsVygpO1xuICAgIGlmICgocmVzaXplRXZlbnQgJiYgcmVzaXplRXZlbnRUeXBlICYmICFyZXNpemVFdmVudFR5cGUuZSkgfHwgaW50ZXJ2YWxFKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGludGVydmFsRSA9IHN0YXJ0SG9yaXpvbnRhbCgxLCBjYWxjdWxhdGVJdGVtUG9zaXRpb24sIGxhc3RNb3VzZSk7XG4gIH0gZWxzZSBpZiAobGFzdE1vdXNlLmNsaWVudFggPiBlLmNsaWVudFggJiYgb2Zmc2V0TGVmdCA+IDAgJiYgZWxlbUxlZnRPZmZzZXQgPCBzY3JvbGxTZW5zaXRpdml0eSkge1xuICAgIGNhbmNlbEUoKTtcbiAgICBpZiAoKHJlc2l6ZUV2ZW50ICYmIHJlc2l6ZUV2ZW50VHlwZSAmJiAhcmVzaXplRXZlbnRUeXBlLncpIHx8IGludGVydmFsVykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpbnRlcnZhbFcgPSBzdGFydEhvcml6b250YWwoLTEsIGNhbGN1bGF0ZUl0ZW1Qb3NpdGlvbiwgbGFzdE1vdXNlKTtcbiAgfSBlbHNlIGlmIChsYXN0TW91c2UuY2xpZW50WCAhPT0gZS5jbGllbnRYKSB7XG4gICAgY2FuY2VsSG9yaXpvbnRhbCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0YXJ0VmVydGljYWwoc2lnbjogbnVtYmVyLCBjYWxjdWxhdGVJdGVtUG9zaXRpb246IEZ1bmN0aW9uLCBsYXN0TW91c2U6IGFueSk6IGFueSB7XG4gIGxldCBjbGllbnRZID0gbGFzdE1vdXNlLmNsaWVudFk7XG4gIHJldHVybiBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgaWYgKCFncmlkc3RlckVsZW1lbnQgfHwgc2lnbiA9PT0gLTEgJiYgZ3JpZHN0ZXJFbGVtZW50LnNjcm9sbFRvcCAtIHNjcm9sbFNwZWVkIDwgMCkge1xuICAgICAgY2FuY2VsVmVydGljYWwoKTtcbiAgICB9XG4gICAgZ3JpZHN0ZXJFbGVtZW50LnNjcm9sbFRvcCArPSBzaWduICogc2Nyb2xsU3BlZWQ7XG4gICAgY2xpZW50WSArPSBzaWduICogc2Nyb2xsU3BlZWQ7XG4gICAgY2FsY3VsYXRlSXRlbVBvc2l0aW9uKHtjbGllbnRYOiBsYXN0TW91c2UuY2xpZW50WCwgY2xpZW50WTogY2xpZW50WX0pO1xuICB9LCBpbnRlcnZhbER1cmF0aW9uKTtcbn1cblxuZnVuY3Rpb24gc3RhcnRIb3Jpem9udGFsKHNpZ246IG51bWJlciwgY2FsY3VsYXRlSXRlbVBvc2l0aW9uOiBGdW5jdGlvbiwgbGFzdE1vdXNlOiBhbnkpOiBhbnkge1xuICBsZXQgY2xpZW50WCA9IGxhc3RNb3VzZS5jbGllbnRYO1xuICByZXR1cm4gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIGlmICghZ3JpZHN0ZXJFbGVtZW50IHx8IHNpZ24gPT09IC0xICYmIGdyaWRzdGVyRWxlbWVudC5zY3JvbGxMZWZ0IC0gc2Nyb2xsU3BlZWQgPCAwKSB7XG4gICAgICBjYW5jZWxIb3Jpem9udGFsKCk7XG4gICAgfVxuICAgIGdyaWRzdGVyRWxlbWVudC5zY3JvbGxMZWZ0ICs9IHNpZ24gKiBzY3JvbGxTcGVlZDtcbiAgICBjbGllbnRYICs9IHNpZ24gKiBzY3JvbGxTcGVlZDtcbiAgICBjYWxjdWxhdGVJdGVtUG9zaXRpb24oe2NsaWVudFg6IGNsaWVudFgsIGNsaWVudFk6IGxhc3RNb3VzZS5jbGllbnRZfSk7XG4gIH0sIGludGVydmFsRHVyYXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FuY2VsU2Nyb2xsKCkge1xuICBjYW5jZWxIb3Jpem9udGFsKCk7XG4gIGNhbmNlbFZlcnRpY2FsKCk7XG4gIGdyaWRzdGVyRWxlbWVudCA9IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY2FuY2VsSG9yaXpvbnRhbCgpIHtcbiAgY2FuY2VsRSgpO1xuICBjYW5jZWxXKCk7XG59XG5cbmZ1bmN0aW9uIGNhbmNlbFZlcnRpY2FsKCkge1xuICBjYW5jZWxOKCk7XG4gIGNhbmNlbFMoKTtcbn1cblxuZnVuY3Rpb24gY2FuY2VsRSgpIHtcbiAgaWYgKGludGVydmFsRSkge1xuICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxFKTtcbiAgICBpbnRlcnZhbEUgPSAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbmNlbFcoKSB7XG4gIGlmIChpbnRlcnZhbFcpIHtcbiAgICBjbGVhckludGVydmFsKGludGVydmFsVyk7XG4gICAgaW50ZXJ2YWxXID0gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYW5jZWxTKCkge1xuICBpZiAoaW50ZXJ2YWxTKSB7XG4gICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbFMpO1xuICAgIGludGVydmFsUyA9IDA7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FuY2VsTigpIHtcbiAgaWYgKGludGVydmFsTikge1xuICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxOKTtcbiAgICBpbnRlcnZhbE4gPSAwO1xuICB9XG59XG4iXX0=