UNPKG

ngx-extended-pdf-viewer

Version:

Embedding PDF files in your Angular application. Highly configurable viewer including the toolbar, sidebar, and all the features you're used to.

173 lines 16.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ export class PinchOnMobileSupport { /** * @param {?} _zone */ constructor(_zone) { this._zone = _zone; this.startX = 0; this.startY = 0; this.initialPinchDistance = 0; this.pinchScale = 1; if (this.isMobile()) { this.initializePinchZoom(); } } /** * @private * @return {?} */ isMobile() { return 'ontouchstart' in document.documentElement; } /** * @private * @param {?} event * @return {?} */ onViewerTouchStart(event) { this.initialPinchDistance = 0; if (event.touches.length === 2) { /** @type {?} */ const rect = this.container.getBoundingClientRect(); // + this.container.scrollTop if (event.touches[0].pageX >= rect.left && event.touches[0].pageX <= rect.right) { if (event.touches[0].pageY >= rect.top /* && event.touches[0].pageY <= rect.bottom */) { if (event.touches[1].pageX >= rect.left && event.touches[1].pageX <= rect.right) { if (event.touches[1].pageY >= rect.top /* && event.touches[1].pageY <= rect.bottom */) { this.startX = (event.touches[0].pageX + event.touches[1].pageX) / 2; this.startY = (event.touches[0].pageY + event.touches[1].pageY) / 2; this.initialPinchDistance = Math.hypot(event.touches[1].pageX - event.touches[0].pageX, event.touches[1].pageY - event.touches[0].pageY); event.preventDefault(); event.stopPropagation(); } } } } } } /** * @private * @param {?} event * @return {?} */ onViewerTouchMove(event) { if (this.initialPinchDistance <= 0 || event.touches.length !== 2) { return; } if (this.pinchScale !== 1) { event.preventDefault(); } /** @type {?} */ const pinchDistance = Math.hypot(event.touches[1].pageX - event.touches[0].pageX, event.touches[1].pageY - event.touches[0].pageY); /** @type {?} */ const originX = this.startX + this.container.scrollLeft; /** @type {?} */ const originY = this.startY + this.container.scrollTop; this.pinchScale = pinchDistance / this.initialPinchDistance; this.viewer.style.transform = `scale(${this.pinchScale})`; this.viewer.style.transformOrigin = `${originX}px ${originY}px`; event.preventDefault(); event.stopPropagation(); } /** * @private * @param {?} event * @return {?} */ onViewerTouchEnd(event) { /** @type {?} */ const PDFViewerApplication = ((/** @type {?} */ (window))).PDFViewerApplication; if (this.initialPinchDistance <= 0) { return; } this.viewer.style.transform = `none`; this.viewer.style.transformOrigin = `unset`; PDFViewerApplication.pdfViewer.currentScale *= this.pinchScale; /** @type {?} */ const rect = this.container.getBoundingClientRect(); /** @type {?} */ const dx = this.startX - rect.left; /** @type {?} */ const dy = this.startY - rect.top; this.container.scrollLeft += dx * (this.pinchScale - 1); this.container.scrollTop += dy * (this.pinchScale - 1); this.resetPinchZoomParams(); event.preventDefault(); event.stopPropagation(); } /** * @private * @return {?} */ resetPinchZoomParams() { this.startX = this.startY = this.initialPinchDistance = 0; this.pinchScale = 1; } /** * @return {?} */ initializePinchZoom() { this.viewer = document.getElementById('viewer'); this.container = (/** @type {?} */ (document.getElementById('viewerContainer'))); this._zone.runOutsideAngular((/** * @return {?} */ () => { document.addEventListener('touchstart', this.onViewerTouchStart.bind(this)); document.addEventListener('touchmove', this.onViewerTouchMove.bind(this), { passive: false }); document.addEventListener('touchend', this.onViewerTouchEnd.bind(this)); })); } /** * @return {?} */ destroyPinchZoom() { if (this.isMobile()) { document.removeEventListener('touchstart', this.onViewerTouchStart); document.removeEventListener('touchmove', this.onViewerTouchMove); document.removeEventListener('touchend', this.onViewerTouchEnd); } } } if (false) { /** * @type {?} * @private */ PinchOnMobileSupport.prototype.viewer; /** * @type {?} * @private */ PinchOnMobileSupport.prototype.container; /** * @type {?} * @private */ PinchOnMobileSupport.prototype.startX; /** * @type {?} * @private */ PinchOnMobileSupport.prototype.startY; /** * @type {?} * @private */ PinchOnMobileSupport.prototype.initialPinchDistance; /** * @type {?} * @private */ PinchOnMobileSupport.prototype.pinchScale; /** * @type {?} * @private */ PinchOnMobileSupport.prototype._zone; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluY2gtb24tbW9iaWxlLXN1cHBvcnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtZXh0ZW5kZWQtcGRmLXZpZXdlci8iLCJzb3VyY2VzIjpbImxpYi9waW5jaC1vbi1tb2JpbGUtc3VwcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsTUFBTSxPQUFPLG9CQUFvQjs7OztJQVEvQixZQUFvQixLQUFhO1FBQWIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUx6QixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUNYLHlCQUFvQixHQUFHLENBQUMsQ0FBQztRQUN6QixlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBR3JCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1NBQzVCO0lBQ0gsQ0FBQzs7Ozs7SUFFTyxRQUFRO1FBQ2QsT0FBTyxjQUFjLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQztJQUNwRCxDQUFDOzs7Ozs7SUFFTyxrQkFBa0IsQ0FBQyxLQUFpQjtRQUMxQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFOztrQkFDeEIsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLEVBQUU7WUFDbkQsNkJBQTZCO1lBQzdCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUMvRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUUsOENBQThDLEVBQUU7b0JB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QztRQUM5RSxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQjs7O1FBQUMsR0FBRyxFQUFFO1lBQ2hDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzVFLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzlGLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzFFLENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQzs7OztJQUVNLGdCQUFnQjtRQUNyQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNuQixRQUFRLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3BFLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDbEUsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUNqRTtJQUNILENBQUM7Q0FDRjs7Ozs7O0lBL0ZDLHNDQUFvQjs7Ozs7SUFDcEIseUNBQWtDOzs7OztJQUNsQyxzQ0FBbUI7Ozs7O0lBQ25CLHNDQUFtQjs7Ozs7SUFDbkIsb0RBQWlDOzs7OztJQUNqQywwQ0FBdUI7Ozs7O0lBRVgscUNBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjbGFzcyBQaW5jaE9uTW9iaWxlU3VwcG9ydCB7XG4gIHByaXZhdGUgdmlld2VyOiBhbnk7XG4gIHByaXZhdGUgY29udGFpbmVyOiBIVE1MRGl2RWxlbWVudDtcbiAgcHJpdmF0ZSBzdGFydFggPSAwO1xuICBwcml2YXRlIHN0YXJ0WSA9IDA7XG4gIHByaXZhdGUgaW5pdGlhbFBpbmNoRGlzdGFuY2UgPSAwO1xuICBwcml2YXRlIHBpbmNoU2NhbGUgPSAxO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3pvbmU6IE5nWm9uZSkge1xuICAgIGlmICh0aGlzLmlzTW9iaWxlKCkpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVBpbmNoWm9vbSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNNb2JpbGUoKSB7XG4gICAgcmV0dXJuICdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgb25WaWV3ZXJUb3VjaFN0YXJ0KGV2ZW50OiBUb3VjaEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsUGluY2hEaXN0YW5jZSA9IDA7XG4gICAgaWYgKGV2ZW50LnRvdWNoZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCByZWN0ID0gdGhpcy5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAvLyArIHRoaXMuY29udGFpbmVyLnNjcm9sbFRvcFxuICAgICAgaWYgKGV2ZW50LnRvdWNoZXNbMF0ucGFnZVggPj0gcmVjdC5sZWZ0ICYmIGV2ZW50LnRvdWNoZXNbMF0ucGFnZVggPD0gcmVjdC5yaWdodCkge1xuICAgICAgICBpZiAoZXZlbnQudG91Y2hlc1swXS5wYWdlWSA+PSByZWN0LnRvcCAgLyogJiYgZXZlbnQudG91Y2hlc1swXS5wYWdlWSA8PSByZWN0LmJvdHRvbSAqLykge1xuICAgICAgICAgIGlmIChldmVudC50b3VjaGVzWzFdLnBhZ2VYID49IHJlY3QubGVmdCAmJiBldmVudC50b3VjaGVzWzFdLnBhZ2VYIDw9IHJlY3QucmlnaHQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC50b3VjaGVzWzFdLnBhZ2VZID49IHJlY3QudG9wIC8qICYmIGV2ZW50LnRvdWNoZXNbMV0ucGFnZVkgPD0gcmVjdC5ib3R0b20gICovKSB7XG4gICAgICAgICAgICAgIHRoaXMuc3RhcnRYID0gKGV2ZW50LnRvdWNoZXNbMF0ucGFnZVggKyBldmVudC50b3VjaGVzWzFdLnBhZ2VYKSAvIDI7XG4gICAgICAgICAgICAgIHRoaXMuc3RhcnRZID0gKGV2ZW50LnRvdWNoZXNbMF0ucGFnZVkgKyBldmVudC50b3VjaGVzWzFdLnBhZ2VZKSAvIDI7XG4gICAgICAgICAgICAgIHRoaXMuaW5pdGlhbFBpbmNoRGlzdGFuY2UgPSBNYXRoLmh5cG90KGV2ZW50LnRvdWNoZXNbMV0ucGFnZVggLSBldmVudC50b3VjaGVzWzBdLnBhZ2VYLCBldmVudC50b3VjaGVzWzFdLnBhZ2VZIC0gZXZlbnQudG91Y2hlc1swXS5wYWdlWSk7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25WaWV3ZXJUb3VjaE1vdmUoZXZlbnQ6IFRvdWNoRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbml0aWFsUGluY2hEaXN0YW5jZSA8PSAwIHx8IGV2ZW50LnRvdWNoZXMubGVuZ3RoICE9PSAyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnBpbmNoU2NhbGUgIT09IDEpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGNvbnN0IHBpbmNoRGlzdGFuY2UgPSBNYXRoLmh5cG90KGV2ZW50LnRvdWNoZXNbMV0ucGFnZVggLSBldmVudC50b3VjaGVzWzBdLnBhZ2VYLCBldmVudC50b3VjaGVzWzFdLnBhZ2VZIC0gZXZlbnQudG91Y2hlc1swXS5wYWdlWSk7XG4gICAgY29uc3Qgb3JpZ2luWCA9IHRoaXMuc3RhcnRYICsgdGhpcy5jb250YWluZXIuc2Nyb2xsTGVmdDtcbiAgICBjb25zdCBvcmlnaW5ZID0gdGhpcy5zdGFydFkgKyB0aGlzLmNvbnRhaW5lci5zY3JvbGxUb3A7XG4gICAgdGhpcy5waW5jaFNjYWxlID0gcGluY2hEaXN0YW5jZSAvIHRoaXMuaW5pdGlhbFBpbmNoRGlzdGFuY2U7XG4gICAgdGhpcy52aWV3ZXIuc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7dGhpcy5waW5jaFNjYWxlfSlgO1xuICAgIHRoaXMudmlld2VyLnN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9IGAke29yaWdpblh9cHggJHtvcmlnaW5ZfXB4YDtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBvblZpZXdlclRvdWNoRW5kKGV2ZW50OiBUb3VjaEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgUERGVmlld2VyQXBwbGljYXRpb246IGFueSA9ICh3aW5kb3cgYXMgYW55KS5QREZWaWV3ZXJBcHBsaWNhdGlvbjtcbiAgICBpZiAodGhpcy5pbml0aWFsUGluY2hEaXN0YW5jZSA8PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmlld2VyLnN0eWxlLnRyYW5zZm9ybSA9IGBub25lYDtcbiAgICB0aGlzLnZpZXdlci5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSBgdW5zZXRgO1xuICAgIFBERlZpZXdlckFwcGxpY2F0aW9uLnBkZlZpZXdlci5jdXJyZW50U2NhbGUgKj0gdGhpcy5waW5jaFNjYWxlO1xuICAgIGNvbnN0IHJlY3QgPSB0aGlzLmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBkeCA9IHRoaXMuc3RhcnRYIC0gcmVjdC5sZWZ0O1xuICAgIGNvbnN0IGR5ID0gdGhpcy5zdGFydFkgLSByZWN0LnRvcDtcbiAgICB0aGlzLmNvbnRhaW5lci5zY3JvbGxMZWZ0ICs9IGR4ICogKHRoaXMucGluY2hTY2FsZSAtIDEpO1xuICAgIHRoaXMuY29udGFpbmVyLnNjcm9sbFRvcCArPSBkeSAqICh0aGlzLnBpbmNoU2NhbGUgLSAxKTtcbiAgICB0aGlzLnJlc2V0UGluY2hab29tUGFyYW1zKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRQaW5jaFpvb21QYXJhbXMoKTogdm9pZCB7XG4gICAgdGhpcy5zdGFydFggPSB0aGlzLnN0YXJ0WSA9IHRoaXMuaW5pdGlhbFBpbmNoRGlzdGFuY2UgPSAwO1xuICAgIHRoaXMucGluY2hTY2FsZSA9IDE7XG4gIH1cblxuICBwdWJsaWMgaW5pdGlhbGl6ZVBpbmNoWm9vbSgpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aWV3ZXInKTtcbiAgICB0aGlzLmNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aWV3ZXJDb250YWluZXInKSBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICB0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVmlld2VyVG91Y2hTdGFydC5iaW5kKHRoaXMpKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25WaWV3ZXJUb3VjaE1vdmUuYmluZCh0aGlzKSwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5vblZpZXdlclRvdWNoRW5kLmJpbmQodGhpcykpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3lQaW5jaFpvb20oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNNb2JpbGUoKSkge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25WaWV3ZXJUb3VjaFN0YXJ0KTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25WaWV3ZXJUb3VjaE1vdmUpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLm9uVmlld2VyVG91Y2hFbmQpO1xuICAgIH1cbiAgfVxufVxuIl19