UNPKG

ngx-scroll-lock

Version:
165 lines 13.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, Input, ViewEncapsulation, isDevMode, } from '@angular/core'; var NgxScrollLockComponent = /** @class */ (function () { function NgxScrollLockComponent() { this.target = ''; this.lock = false; this.listenerOptions = { capture: false, passive: false, }; } /** * @return {?} */ NgxScrollLockComponent.prototype.ngOnInit = /** * @return {?} */ function () { this.targetElement = this.target ? document.querySelector(this.target) : document.body; // Shows error message only in Development if (!this.targetElement && isDevMode()) { console.error( // tslint:disable-next-line: max-line-length "`NgxScrollLockComponent` need to receive \"target\" as an element, but it received \"" + (this.target || 'body') + "\". Please check if the element is unique and it's available in your DOM."); } if (this.lock && this.targetElement) { this.disableLock(this.targetElement); } }; /** * @return {?} */ NgxScrollLockComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { if (this.targetElement) { this.enableLock(this.targetElement); } }; /** * @param {?} changes * @return {?} */ NgxScrollLockComponent.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { if (changes.target && !changes.target.firstChange && changes.target.previousValue !== changes.target.currentValue) { this.enableLock(this.targetElement); this.targetElement = this.target ? document.querySelector(this.target) : document.body; if (this.lock && this.targetElement) { this.disableLock(this.targetElement); } } if (changes.lock && !changes.lock.firstChange && changes.lock.previousValue !== changes.lock.currentValue && this.targetElement) { changes.lock.currentValue ? this.disableLock(this.targetElement) : this.enableLock(this.targetElement); } }; /** * @param {?} target * @return {?} */ NgxScrollLockComponent.prototype.disableLock = /** * @param {?} target * @return {?} */ function (target) { this.targetElement.classList.add('ngx-scroll-lock'); // Mobile Safari ignores { overflow: hidden } declaration on the body. if (this.isTouchDevice()) { this.targetElement.addEventListener('touchmove', this.preventTouchMove, this.listenerOptions); } }; /** * @param {?} target * @return {?} */ NgxScrollLockComponent.prototype.enableLock = /** * @param {?} target * @return {?} */ function (target) { this.targetElement.classList.remove('ngx-scroll-lock'); if (this.isTouchDevice()) { this.targetElement.removeEventListener('touchmove', this.preventTouchMove, this.listenerOptions); } }; /** * @return {?} */ NgxScrollLockComponent.prototype.isTouchDevice = /** * @return {?} */ function () { return !!window && ('ontouchstart' in window || navigator.maxTouchPoints); }; /** * @param {?} rawEvent * @return {?} */ NgxScrollLockComponent.prototype.preventTouchMove = /** * @param {?} rawEvent * @return {?} */ function (rawEvent) { /** @type {?} */ var e = rawEvent || tslib_1.__assign({}, ((/** @type {?} */ (window))).event, { touches: [] }); // // Do not prevent if the event has more than one touch // (usually meaning this is a single or multi touch gesture like pinch to zoom) if (e.touches && e.touches.length >= 1) { return true; } if (e.preventDefault) { e.preventDefault(); } return false; }; NgxScrollLockComponent.decorators = [ { type: Component, args: [{ selector: 'ngx-scroll-lock', template: "\n <style>\n .ngx-scroll-lock {\n box-sizing: border-box !important;\n overflow: hidden !important;\n position: inherit !important;\n }\n </style>\n <ng-content></ng-content>\n ", encapsulation: ViewEncapsulation.None }] } ]; NgxScrollLockComponent.propDecorators = { target: [{ type: Input }], lock: [{ type: Input }] }; return NgxScrollLockComponent; }()); export { NgxScrollLockComponent }; if (false) { /** @type {?} */ NgxScrollLockComponent.prototype.target; /** @type {?} */ NgxScrollLockComponent.prototype.lock; /** * @type {?} * @private */ NgxScrollLockComponent.prototype.targetElement; /** * @type {?} * @private */ NgxScrollLockComponent.prototype.listenerOptions; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXNjcm9sbC1sb2NrLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1zY3JvbGwtbG9jay8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtc2Nyb2xsLWxvY2suY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFHVCxLQUFLLEVBR0wsaUJBQWlCLEVBQ2pCLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QjtJQUFBO1FBZ0JFLFdBQU0sR0FBRyxFQUFFLENBQUM7UUFHWixTQUFJLEdBQUcsS0FBSyxDQUFDO1FBSUwsb0JBQWUsR0FBRztZQUN4QixPQUFPLEVBQUUsS0FBSztZQUNkLE9BQU8sRUFBRSxLQUFLO1NBQ2YsQ0FBQztJQWlHSixDQUFDOzs7O0lBL0ZDLHlDQUFROzs7SUFBUjtRQUNFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU07WUFDOUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNyQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUVsQiwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksU0FBUyxFQUFFLEVBQUU7WUFDdEMsT0FBTyxDQUFDLEtBQUs7WUFDWCw0Q0FBNEM7WUFDNUMsMkZBQ0UsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLCtFQUNtRCxDQUMzRSxDQUFDO1NBQ0g7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUN0QztJQUNILENBQUM7Ozs7SUFFRCw0Q0FBVzs7O0lBQVg7UUFDRSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFD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b0JBQzNCLFFBQVEsRUFBRSw0TkFTVDtvQkFDRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtpQkFDdEM7Ozt5QkFFRSxLQUFLO3VCQUdMLEtBQUs7O0lBeUdSLDZCQUFDO0NBQUEsQUEzSEQsSUEySEM7U0E3R1ksc0JBQXNCOzs7SUFDakMsd0NBQ1k7O0lBRVosc0NBQ2E7Ozs7O0lBRWIsK0NBQW1DOzs7OztJQUVuQyxpREFHRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBpc0Rldk1vZGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtc2Nyb2xsLWxvY2snLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxzdHlsZT5cbiAgICAgIC5uZ3gtc2Nyb2xsLWxvY2sge1xuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94ICFpbXBvcnRhbnQ7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcbiAgICAgICAgcG9zaXRpb246IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICA8L3N0eWxlPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgYCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgTmd4U2Nyb2xsTG9ja0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKVxuICB0YXJnZXQgPSAnJztcblxuICBASW5wdXQoKVxuICBsb2NrID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSB0YXJnZXRFbGVtZW50OiBIVE1MRWxlbWVudDtcblxuICBwcml2YXRlIGxpc3RlbmVyT3B0aW9ucyA9IHtcbiAgICBjYXB0dXJlOiBmYWxzZSxcbiAgICBwYXNzaXZlOiBmYWxzZSxcbiAgfTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnRhcmdldEVsZW1lbnQgPSB0aGlzLnRhcmdldFxuICAgICAgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMudGFyZ2V0KVxuICAgICAgOiBkb2N1bWVudC5ib2R5O1xuXG4gICAgLy8gU2hvd3MgZXJyb3IgbWVzc2FnZSBvbmx5IGluIERldmVsb3BtZW50XG4gICAgaWYgKCF0aGlzLnRhcmdldEVsZW1lbnQgJiYgaXNEZXZNb2RlKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgIGBcXGBOZ3hTY3JvbGxMb2NrQ29tcG9uZW50XFxgIG5lZWQgdG8gcmVjZWl2ZSBcInRhcmdldFwiIGFzIGFuIGVsZW1lbnQsIGJ1dCBpdCByZWNlaXZlZCBcIiR7XG4gICAgICAgICAgdGhpcy50YXJnZXQgfHwgJ2JvZHknXG4gICAgICAgIH1cIi4gUGxlYXNlIGNoZWNrIGlmIHRoZSBlbGVtZW50IGlzIHVuaXF1ZSBhbmQgaXQncyBhdmFpbGFibGUgaW4geW91ciBET00uYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2NrICYmIHRoaXMudGFyZ2V0RWxlbWVudCkge1xuICAgICAgdGhpcy5kaXNhYmxlTG9jayh0aGlzLnRhcmdldEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnRhcmdldEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuZW5hYmxlTG9jayh0aGlzLnRhcmdldEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzLnRhcmdldCAmJlxuICAgICAgIWNoYW5nZXMudGFyZ2V0LmZpcnN0Q2hhbmdlICYmXG4gICAgICBjaGFuZ2VzLnRhcmdldC5wcmV2aW91c1ZhbHVlICE9PSBjaGFuZ2VzLnRhcmdldC5jdXJyZW50VmFsdWVcbiAgICApIHtcbiAgICAgIHRoaXMuZW5hYmxlTG9jayh0aGlzLnRhcmdldEVsZW1lbnQpO1xuICAgICAgdGhpcy50YXJnZXRFbGVtZW50ID0gdGhpcy50YXJnZXRcbiAgICAgICAgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMudGFyZ2V0KVxuICAgICAgICA6IGRvY3VtZW50LmJvZHk7XG4gICAgICBpZiAodGhpcy5sb2NrICYmIHRoaXMudGFyZ2V0RWxlbWVudCkge1xuICAgICAgICB0aGlzLmRpc2FibGVMb2NrKHRoaXMudGFyZ2V0RWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGNoYW5nZXMubG9jayAmJlxuICAgICAgIWNoYW5nZXMubG9jay5maXJzdENoYW5nZSAmJlxuICAgICAgY2hhbmdlcy5sb2NrLnByZXZpb3VzVmFsdWUgIT09IGNoYW5nZXMubG9jay5jdXJyZW50VmFsdWUgJiZcbiAgICAgIHRoaXMudGFyZ2V0RWxlbWVudFxuICAgICkge1xuICAgICAgY2hhbmdlcy5sb2NrLmN1cnJlbnRWYWx1ZVxuICAgICAgICA/IHRoaXMuZGlzYWJsZUxvY2sodGhpcy50YXJnZXRFbGVtZW50KVxuICAgICAgICA6IHRoaXMuZW5hYmxlTG9jayh0aGlzLnRhcmdldEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIGRpc2FibGVMb2NrKHRhcmdldDogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLnRhcmdldEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnbmd4LXNjcm9sbC1sb2NrJyk7XG5cbiAgICAvLyBNb2JpbGUgU2FmYXJpIGlnbm9yZXMgeyBvdmVyZmxvdzogaGlkZGVuIH0gZGVjbGFyYXRpb24gb24gdGhlIGJvZHkuXG4gICAgaWYgKHRoaXMuaXNUb3VjaERldmljZSgpKSB7XG4gICAgICB0aGlzLnRhcmdldEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ3RvdWNobW92ZScsXG4gICAgICAgIHRoaXMucHJldmVudFRvdWNoTW92ZSxcbiAgICAgICAgdGhpcy5saXN0ZW5lck9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZW5hYmxlTG9jayh0YXJnZXQ6IEhUTUxFbGVtZW50KSB7XG4gICAgdGhpcy50YXJnZXRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ25neC1zY3JvbGwtbG9jaycpO1xuXG4gICAgaWYgKHRoaXMuaXNUb3VjaERldmljZSgpKSB7XG4gICAgICB0aGlzLnRhcmdldEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ3RvdWNobW92ZScsXG4gICAgICAgIHRoaXMucHJldmVudFRvdWNoTW92ZSxcbiAgICAgICAgdGhpcy5saXN0ZW5lck9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaXNUb3VjaERldmljZSgpIHtcbiAgICByZXR1cm4gISF3aW5kb3cgJiYgKCdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdyB8fCBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMpO1xuICB9XG5cbiAgcHJldmVudFRvdWNoTW92ZShyYXdFdmVudDogVG91Y2hFdmVudCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGUgPSByYXdFdmVudCB8fCB7IC4uLih3aW5kb3cgYXMgYW55KS5ldmVudCwgdG91Y2hlczogW10gfTtcbiAgICAvLyAvLyBEbyBub3QgcHJldmVudCBpZiB0aGUgZXZlbnQgaGFzIG1vcmUgdGhhbiBvbmUgdG91Y2hcbiAgICAvLyAodXN1YWxseSBtZWFuaW5nIHRoaXMgaXMgYSBzaW5nbGUgb3IgbXVsdGkgdG91Y2ggZ2VzdHVyZSBsaWtlIHBpbmNoIHRvIHpvb20pXG4gICAgaWYgKGUudG91Y2hlcyAmJiBlLnRvdWNoZXMubGVuZ3RoID49IDEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=