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.
174 lines • 16.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/pinch-on-mobile-support.ts
* @suppress {checkTypes,constantProperty,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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluY2gtb24tbW9iaWxlLXN1cHBvcnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtZXh0ZW5kZWQtcGRmLXZpZXdlci8iLCJzb3VyY2VzIjpbImxpYi9waW5jaC1vbi1tb2JpbGUtc3VwcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLE1BQU0sT0FBTyxvQkFBb0I7Ozs7SUFRL0IsWUFBb0IsS0FBYTtRQUFiLFVBQUssR0FBTCxLQUFLLENBQVE7UUFMekIsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUNYLFdBQU0sR0FBRyxDQUFDLENBQUM7UUFDWCx5QkFBb0IsR0FBRyxDQUFDLENBQUM7UUFDekIsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUdyQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNuQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztTQUM1QjtJQUNILENBQUM7Ozs7O0lBRU8sUUFBUTtRQUNkLE9BQU8sY0FBYyxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUM7SUFDcEQsQ0FBQzs7Ozs7O0lBRU8sa0JBQWtCLENBQUMsS0FBaUI7UUFDMUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLENBQUMsQ0FBQztRQUM5QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTs7a0JBQ3hCLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLHFCQUFxQixFQUFFO1lBQ25ELDZCQUE2QjtZQUM3QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDL0UsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFFLDhDQUE4QyxFQUFFO29C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QUM7UUFDOUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUI7OztRQUFDLEdBQUcsRUFBRTtZQUNoQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM1RSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUM5RixRQUFRLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMxRSxDQUFDLEVBQUMsQ0FBQztJQUNMLENBQUM7Ozs7SUFFTSxnQkFBZ0I7UUFDckIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDbkIsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNwRSxRQUFRLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ2xFLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDakU7SUFDSCxDQUFDO0NBQ0Y7Ozs7OztJQS9GQyxzQ0FBb0I7Ozs7O0lBQ3BCLHlDQUFrQzs7Ozs7SUFDbEMsc0NBQW1COzs7OztJQUNuQixzQ0FBbUI7Ozs7O0lBQ25CLG9EQUFpQzs7Ozs7SUFDakMsMENBQXVCOzs7OztJQUVYLHFDQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY2xhc3MgUGluY2hPbk1vYmlsZVN1cHBvcnQge1xuICBwcml2YXRlIHZpZXdlcjogYW55O1xuICBwcml2YXRlIGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQ7XG4gIHByaXZhdGUgc3RhcnRYID0gMDtcbiAgcHJpdmF0ZSBzdGFydFkgPSAwO1xuICBwcml2YXRlIGluaXRpYWxQaW5jaERpc3RhbmNlID0gMDtcbiAgcHJpdmF0ZSBwaW5jaFNjYWxlID0gMTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF96b25lOiBOZ1pvbmUpIHtcbiAgICBpZiAodGhpcy5pc01vYmlsZSgpKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVQaW5jaFpvb20oKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzTW9iaWxlKCkge1xuICAgIHJldHVybiAnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIG9uVmlld2VyVG91Y2hTdGFydChldmVudDogVG91Y2hFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbFBpbmNoRGlzdGFuY2UgPSAwO1xuICAgIGlmIChldmVudC50b3VjaGVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgcmVjdCA9IHRoaXMuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgLy8gKyB0aGlzLmNvbnRhaW5lci5zY3JvbGxUb3BcbiAgICAgIGlmIChldmVudC50b3VjaGVzWzBdLnBhZ2VYID49IHJlY3QubGVmdCAmJiBldmVudC50b3VjaGVzWzBdLnBhZ2VYIDw9IHJlY3QucmlnaHQpIHtcbiAgICAgICAgaWYgKGV2ZW50LnRvdWNoZXNbMF0ucGFnZVkgPj0gcmVjdC50b3AgIC8qICYmIGV2ZW50LnRvdWNoZXNbMF0ucGFnZVkgPD0gcmVjdC5ib3R0b20gKi8pIHtcbiAgICAgICAgICBpZiAoZXZlbnQudG91Y2hlc1sxXS5wYWdlWCA+PSByZWN0LmxlZnQgJiYgZXZlbnQudG91Y2hlc1sxXS5wYWdlWCA8PSByZWN0LnJpZ2h0KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQudG91Y2hlc1sxXS5wYWdlWSA+PSByZWN0LnRvcCAvKiAmJiBldmVudC50b3VjaGVzWzFdLnBhZ2VZIDw9IHJlY3QuYm90dG9tICAqLykge1xuICAgICAgICAgICAgICB0aGlzLnN0YXJ0WCA9IChldmVudC50b3VjaGVzWzBdLnBhZ2VYICsgZXZlbnQudG91Y2hlc1sxXS5wYWdlWCkgLyAyO1xuICAgICAgICAgICAgICB0aGlzLnN0YXJ0WSA9IChldmVudC50b3VjaGVzWzBdLnBhZ2VZICsgZXZlbnQudG91Y2hlc1sxXS5wYWdlWSkgLyAyO1xuICAgICAgICAgICAgICB0aGlzLmluaXRpYWxQaW5jaERpc3RhbmNlID0gTWF0aC5oeXBvdChldmVudC50b3VjaGVzWzFdLnBhZ2VYIC0gZXZlbnQudG91Y2hlc1swXS5wYWdlWCwgZXZlbnQudG91Y2hlc1sxXS5wYWdlWSAtIGV2ZW50LnRvdWNoZXNbMF0ucGFnZVkpO1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uVmlld2VyVG91Y2hNb3ZlKGV2ZW50OiBUb3VjaEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbFBpbmNoRGlzdGFuY2UgPD0gMCB8fCBldmVudC50b3VjaGVzLmxlbmd0aCAhPT0gMikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5waW5jaFNjYWxlICE9PSAxKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBjb25zdCBwaW5jaERpc3RhbmNlID0gTWF0aC5oeXBvdChldmVudC50b3VjaGVzWzFdLnBhZ2VYIC0gZXZlbnQudG91Y2hlc1swXS5wYWdlWCwgZXZlbnQudG91Y2hlc1sxXS5wYWdlWSAtIGV2ZW50LnRvdWNoZXNbMF0ucGFnZVkpO1xuICAgIGNvbnN0IG9yaWdpblggPSB0aGlzLnN0YXJ0WCArIHRoaXMuY29udGFpbmVyLnNjcm9sbExlZnQ7XG4gICAgY29uc3Qgb3JpZ2luWSA9IHRoaXMuc3RhcnRZICsgdGhpcy5jb250YWluZXIuc2Nyb2xsVG9wO1xuICAgIHRoaXMucGluY2hTY2FsZSA9IHBpbmNoRGlzdGFuY2UgLyB0aGlzLmluaXRpYWxQaW5jaERpc3RhbmNlO1xuICAgIHRoaXMudmlld2VyLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgke3RoaXMucGluY2hTY2FsZX0pYDtcbiAgICB0aGlzLnZpZXdlci5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSBgJHtvcmlnaW5YfXB4ICR7b3JpZ2luWX1weGA7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgb25WaWV3ZXJUb3VjaEVuZChldmVudDogVG91Y2hFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IFBERlZpZXdlckFwcGxpY2F0aW9uOiBhbnkgPSAod2luZG93IGFzIGFueSkuUERGVmlld2VyQXBwbGljYXRpb247XG4gICAgaWYgKHRoaXMuaW5pdGlhbFBpbmNoRGlzdGFuY2UgPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZpZXdlci5zdHlsZS50cmFuc2Zvcm0gPSBgbm9uZWA7XG4gICAgdGhpcy52aWV3ZXIuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gYHVuc2V0YDtcbiAgICBQREZWaWV3ZXJBcHBsaWNhdGlvbi5wZGZWaWV3ZXIuY3VycmVudFNjYWxlICo9IHRoaXMucGluY2hTY2FsZTtcbiAgICBjb25zdCByZWN0ID0gdGhpcy5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgZHggPSB0aGlzLnN0YXJ0WCAtIHJlY3QubGVmdDtcbiAgICBjb25zdCBkeSA9IHRoaXMuc3RhcnRZIC0gcmVjdC50b3A7XG4gICAgdGhpcy5jb250YWluZXIuc2Nyb2xsTGVmdCArPSBkeCAqICh0aGlzLnBpbmNoU2NhbGUgLSAxKTtcbiAgICB0aGlzLmNvbnRhaW5lci5zY3JvbGxUb3AgKz0gZHkgKiAodGhpcy5waW5jaFNjYWxlIC0gMSk7XG4gICAgdGhpcy5yZXNldFBpbmNoWm9vbVBhcmFtcygpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0UGluY2hab29tUGFyYW1zKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhcnRYID0gdGhpcy5zdGFydFkgPSB0aGlzLmluaXRpYWxQaW5jaERpc3RhbmNlID0gMDtcbiAgICB0aGlzLnBpbmNoU2NhbGUgPSAxO1xuICB9XG5cbiAgcHVibGljIGluaXRpYWxpemVQaW5jaFpvb20oKTogdm9pZCB7XG4gICAgdGhpcy52aWV3ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndmlld2VyJyk7XG4gICAgdGhpcy5jb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndmlld2VyQ29udGFpbmVyJykgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblZpZXdlclRvdWNoU3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVmlld2VyVG91Y2hNb3ZlLmJpbmQodGhpcyksIHsgcGFzc2l2ZTogZmFsc2UgfSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMub25WaWV3ZXJUb3VjaEVuZC5iaW5kKHRoaXMpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95UGluY2hab29tKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzTW9iaWxlKCkpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVmlld2VyVG91Y2hTdGFydCk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVmlld2VyVG91Y2hNb3ZlKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5vblZpZXdlclRvdWNoRW5kKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==