UNPKG

@syncfusion/ej2-pdfviewer

Version:
1,096 lines 74.8 kB
import { Browser, isBlazor, isNullOrUndefined } from '@syncfusion/ej2-base'; import { getDiagramElement } from '@syncfusion/ej2-drawings'; /** * Magnification module */ var Magnification = /** @class */ (function () { /** * @param {PdfViewer} pdfViewer - It describes about the pdf viewer * @param {PdfViewerBase} viewerBase - It describes about the viewer base * @private */ function Magnification(pdfViewer, viewerBase) { /** * @private */ this.zoomFactor = 1; /** * @private */ this.previousZoomFactor = 1; this.scrollWidth = 25; this.zoomPercentages = [10, 25, 50, 75, 100, 125, 150, 200, 400]; this.isNotPredefinedZoom = false; this.pinchStep = 0; this.reRenderPageNumber = 0; this.magnifyPageRerenderTimer = null; this.rerenderOnScrollTimer = null; this.rerenderInterval = null; this.touchCenterX = 0; this.touchCenterY = 0; this.mouseCenterX = 0; this.mouseCenterY = 0; this.pageRerenderCount = 0; this.imageObjects = []; this.topValue = 0; this.isTapToFitZoom = false; /** * @private */ this.isWaitingPopupUpdated = false; /** * @private */ this.isInitialCustomZoomValues = true; /** * @private */ this.fitType = null; /** * @private */ this.isPinchZoomed = false; /** * @private */ this.isPagePinchZoomed = false; /** * @private */ this.isRerenderCanvasCreated = false; /** * @private */ this.isMagnified = false; /** * @private */ this.isPagesZoomed = false; /** * @private */ this.isPinchScrolled = false; /** * @private */ this.isAutoZoom = false; /** * @private */ this.isDoubleTapZoom = false; /** * @private */ this.isFormFieldPageZoomed = false; this.isWebkitMobile = false; this.isFitToPageMode = true; this.pdfViewer = pdfViewer; this.pdfViewerBase = viewerBase; this.zoomLevel = 2; } /** * Zoom the PDF document to the given zoom value * * @param {number} zoomValue - Specifies the Zoom Value for magnify the PDF document * @returns {void} */ Magnification.prototype.zoomTo = function (zoomValue) { var MaximumZoomPercentage = 400; var MinmumZoomPercentage = 10; var minZoom = this.pdfViewer.minZoom; var maxZoom = this.pdfViewer.maxZoom; if (minZoom != null && maxZoom != null && minZoom > maxZoom) { var tempZoomValue = maxZoom; maxZoom = minZoom; minZoom = tempZoomValue; } if (minZoom != null || maxZoom != null) { if (minZoom != null && minZoom !== undefined) { MinmumZoomPercentage = minZoom; } if (maxZoom != null && maxZoom !== undefined) { MaximumZoomPercentage = maxZoom; } } else { MaximumZoomPercentage = 400; MinmumZoomPercentage = 10; } if (zoomValue < MinmumZoomPercentage) { zoomValue = MinmumZoomPercentage; } else if (zoomValue > MaximumZoomPercentage) { zoomValue = MaximumZoomPercentage; } this.fitType = null; this.isNotPredefinedZoom = false; if (this.isAutoZoom && this.isInitialLoading) { this.pdfViewerBase.onWindowResize(); } else { this.isAutoZoom = false; this.onZoomChanged(zoomValue); } this.isInitialLoading = false; }; /** * Magnifies the page to the next value in the zoom drop down list. * * @returns {void} */ Magnification.prototype.zoomIn = function () { if (this.fitType || this.isNotPredefinedZoom) { if (!isNullOrUndefined(this.lowerZoomLevel)) { this.zoomLevel = this.lowerZoomLevel; } this.fitType = null; } this.isNotPredefinedZoom = false; if (this.pdfViewer.minZoom != null || this.pdfViewer.maxZoom != null) { var zoomLength = this.pdfViewerBase.customZoomValues.length; var zoomLevel = this.zoomLevel; if (zoomLevel >= zoomLength) { zoomLevel = zoomLength; } else { zoomLevel++; } this.zoomLevel = zoomLevel; } else { if (this.zoomLevel >= 8) { this.zoomLevel = 8; } else { this.zoomLevel++; } } this.isAutoZoom = false; if (this.pdfViewer.minZoom != null || this.pdfViewer.maxZoom != null) { this.onZoomChanged(this.pdfViewerBase.customZoomValues[this.zoomLevel]); } else { this.onZoomChanged(this.zoomPercentages[this.zoomLevel]); } }; /** * Magnifies the page to the previous value in the zoom drop down list. * * @returns {void} */ Magnification.prototype.zoomOut = function () { if (this.fitType || this.isNotPredefinedZoom) { if (!isNullOrUndefined(this.higherZoomLevel)) { this.zoomLevel = this.higherZoomLevel; } this.fitType = null; } this.isNotPredefinedZoom = false; if (this.zoomLevel <= 0) { this.zoomLevel = 0; } else { this.zoomLevel--; } this.isAutoZoom = false; if (this.pdfViewer.minZoom != null || this.pdfViewer.maxZoom != null) { this.onZoomChanged(this.pdfViewerBase.customZoomValues[this.zoomLevel]); } else { this.onZoomChanged(this.zoomPercentages[this.zoomLevel]); } }; /** * Scales the page to fit the page width to the width of the container in the control. * * @returns {void} */ Magnification.prototype.fitToWidth = function () { this.isAutoZoom = false; var zoomValue = this.calculateFitZoomFactor('fitToWidth'); this.onZoomChanged(zoomValue); }; /** * @private * @returns {void} */ Magnification.prototype.fitToAuto = function () { this.isAutoZoom = true; var zoomValue = this.calculateFitZoomFactor('fitToWidth'); this.onZoomChanged(zoomValue); }; /** * Scales the page to fit the page in the container in the control. * * @returns {void} */ Magnification.prototype.fitToPage = function () { var zoomValue = this.calculateFitZoomFactor('fitToPage'); if (zoomValue !== null) { this.isAutoZoom = false; this.onZoomChanged(zoomValue); if (Browser.isDevice && !this.pdfViewer.enableDesktopMode) { if (this.pdfViewerBase.isWebkitMobile) { this.pdfViewerBase.viewerContainer.style.overflowY = 'auto'; } else { this.pdfViewerBase.viewerContainer.style.overflowY = 'hidden'; } } else { this.pdfViewerBase.viewerContainer.style.overflowY = 'auto'; } if (this.pdfViewerBase.pageSize[this.pdfViewerBase.currentPageNumber - 1]) { this.pdfViewerBase.viewerContainer.scrollTop = this.pdfViewerBase.pageSize[this.pdfViewerBase.currentPageNumber - 1].top * this.zoomFactor; } } }; /** * Returns zoom factor for the fit zooms. * * @param {string} type -It describes about the type * @returns {number} - number */ Magnification.prototype.calculateFitZoomFactor = function (type) { var viewerWidth = this.pdfViewerBase.viewerContainer.getBoundingClientRect().width; var viewerHeight = this.pdfViewerBase.viewerContainer.getBoundingClientRect().height; if (viewerWidth === 0 && viewerHeight === 0) { viewerWidth = parseFloat(this.pdfViewer.width.toString()); viewerHeight = parseFloat(this.pdfViewer.height.toString()); } if (isNaN(viewerHeight) || isNaN(viewerWidth)) { return null; } this.fitType = type; if (this.fitType === 'fitToWidth') { var scaleX = ((viewerWidth - this.scrollWidth) / this.pdfViewerBase.highestWidth); if (this.isAutoZoom) { this.fitType = null; scaleX = Math.min(1, scaleX); if (scaleX === 1) { this.zoomLevel = 2; } } return parseInt((scaleX * 100).toString(), 10); } else { this.isFitToPageMode = true; var pageLeft = 10; var scaleX = ((viewerWidth - this.scrollWidth - pageLeft) / this.pdfViewerBase.highestWidth); var scaleY = 0; if (this.pdfViewerBase.pageSize && this.pdfViewerBase.pageSize.length === 1 && !isNullOrUndefined(this.pdfViewerBase.pageSize[0].top) && !this.isPinchZoomed) { scaleY = (viewerHeight - this.pdfViewerBase.pageSize[0].top) / this.pdfViewerBase.highestHeight; } else { scaleY = (viewerHeight / this.pdfViewerBase.highestHeight); } if (scaleY > scaleX) { scaleY = scaleX; this.isFitToPageMode = false; } return parseInt((scaleY * 100).toString(), 10); } }; /** * Initiating cursor based zoom. * * @param {number} pointX - It describes about the pointX * @param {number} pointY - It describes about the pointY * @param {number} zoomValue - It describes about the zoom value * @private * @returns {void} */ Magnification.prototype.initiateMouseZoom = function (pointX, pointY, zoomValue) { var pointInViewer = this.positionInViewer(pointX, pointY); this.mouseCenterX = pointInViewer.x; this.mouseCenterY = pointInViewer.y; this.zoomTo(zoomValue); }; /** * Performs pinch in operation * * @returns {void} */ Magnification.prototype.pinchIn = function () { this.fitType = null; var temporaryZoomFactor = this.zoomFactor - this.pinchStep; if (temporaryZoomFactor < 4 && temporaryZoomFactor > 2) { temporaryZoomFactor = this.zoomFactor - this.pinchStep; } if (temporaryZoomFactor <= 1.5) { temporaryZoomFactor = this.zoomFactor - (this.pinchStep / 1.5); } if (this.pdfViewer.minZoom != null && temporaryZoomFactor < this.pdfViewer.minZoom / 100) { temporaryZoomFactor = this.pdfViewer.minZoom / 100; } else if (temporaryZoomFactor < 0.25) { temporaryZoomFactor = 0.25; } this.isPinchZoomed = true; this.onZoomChanged(temporaryZoomFactor * 100); this.isTapToFitZoom = true; if ((Browser.isDevice && !this.pdfViewer.enableDesktopMode) && (this.zoomFactor * 100) === 50) { var zoomValue = this.calculateFitZoomFactor('fitToWidth'); this.fitType = null; if (zoomValue <= 50) { this.fitToWidth(); } } }; /** * Performs pinch out operation * * @returns {void} */ Magnification.prototype.pinchOut = function () { this.fitType = null; var temporaryZoomFactor = this.zoomFactor + this.pinchStep; if (Browser.isDevice && !this.pdfViewer.enableDesktopMode) { if (this.pdfViewer.maxZoom != null && temporaryZoomFactor > this.pdfViewer.maxZoom / 100) { temporaryZoomFactor = this.pdfViewer.maxZoom / 100; } else if (temporaryZoomFactor > 4) { temporaryZoomFactor = 4; } } else { if (temporaryZoomFactor > 2) { temporaryZoomFactor = temporaryZoomFactor - this.pinchStep; } if (this.pdfViewer.maxZoom != null && temporaryZoomFactor > this.pdfViewer.maxZoom / 100) { temporaryZoomFactor = this.pdfViewer.maxZoom / 100; } else if (temporaryZoomFactor > 4) { temporaryZoomFactor = 4; } } this.isTapToFitZoom = true; this.isPinchZoomed = true; this.onZoomChanged(temporaryZoomFactor * 100); }; /** * returns zoom level for the zoom factor. * * @param {number} zoomFactor - It describes about the zoom factor * @returns {number} - number */ Magnification.prototype.getZoomLevel = function (zoomFactor) { if (this.pdfViewer.minZoom != null || this.pdfViewer.maxZoom != null) { var min = 0; var customZoomValues = this.pdfViewerBase.customZoomValues; var max = customZoomValues.length - 1; while (min <= max) { var mid = Math.floor((min + max) / 2); if (customZoomValues[parseInt(mid.toString(), 10)] === zoomFactor) { return mid; } else if (customZoomValues[parseInt(mid.toString(), 10)] < zoomFactor) { min = mid + 1; } else { max = mid - 1; } } this.higherZoomLevel = min; this.lowerZoomLevel = max; return max; } else { var min = 0; var max = this.zoomPercentages.length - 1; while ((min <= max) && !(min === 0 && max === 0)) { var mid = Math.round((min + max) / 2); if (this.zoomPercentages[parseInt(mid.toString(), 10)] <= zoomFactor) { min = mid + 1; } else if (this.zoomPercentages[parseInt(mid.toString(), 10)] >= zoomFactor) { max = mid - 1; } } this.higherZoomLevel = min; this.lowerZoomLevel = max; return max; } }; /** * @private * @returns {boolean} - boolean */ Magnification.prototype.checkZoomFactor = function () { return this.zoomPercentages.indexOf(this.zoomFactor * 100) > -1; }; /** * Executes when the zoom or pinch operation is performed * * @param {number} zoomValue - It describes about the zoom value * @returns {void} */ Magnification.prototype.onZoomChanged = function (zoomValue) { if (this.isInitialCustomZoomValues) { this.pdfViewerBase.getCustomZoomValues(); } if (zoomValue) { if (this.pdfViewer.annotationModule) { this.pdfViewer.annotationModule.closePopupMenu(); } this.previousZoomFactor = this.zoomFactor; this.zoomLevel = this.getZoomLevel(zoomValue); this.zoomFactor = this.getZoomFactor(zoomValue); if (this.zoomFactor <= 0.25) { this.pdfViewerBase.isMinimumZoom = true; } else { this.pdfViewerBase.isMinimumZoom = false; } if (!isNullOrUndefined(this.pdfViewerBase.viewerContainer)) { if (Browser.isDevice && !this.pdfViewer.enableDesktopMode) { if (this.pdfViewerBase.isWebkitMobile) { this.pdfViewerBase.viewerContainer.style.overflowY = 'auto'; } else { this.pdfViewerBase.viewerContainer.style.overflowY = 'hidden'; } } else { this.pdfViewerBase.viewerContainer.style.overflowY = 'auto'; } } if (this.pdfViewerBase.pageCount > 0) { if ((this.previousZoomFactor !== this.zoomFactor) || this.pdfViewerBase.isInitialPageMode) { if (!this.isPinchZoomed) { this.magnifyPages(); } else { if (Browser.isDevice && !this.pdfViewer.enableDesktopMode) { this.pdfViewerBase.mobilePageNoContainer.style.left = (this.pdfViewer.element.clientWidth / 2) - (parseFloat(this.pdfViewerBase.mobilePageNoContainer.style.width) / 2) + 'px'; } this.responsivePages(); } } if (!isBlazor()) { if (this.pdfViewer.toolbarModule) { this.pdfViewer.toolbarModule.updateZoomButtons(); } } if (!this.isInitialLoading) { if (this.previousZoomFactor !== this.zoomFactor) { this.pdfViewer.zoomValue = parseInt((this.zoomFactor * 100).toString(), 10); this.pdfViewer.fireZoomChange(); } } } if (this.pdfViewer.toolbarModule) { this.pdfViewer.toolbarModule.updateZoomPercentage(this.zoomFactor); } if (!this.isInitialLoading) { if (this.previousZoomFactor !== this.zoomFactor) { this.pdfViewer.zoomValue = parseInt((this.zoomFactor * 100).toString(), 10); this.pdfViewer.fireZoomChange(); } } if ((Browser.isDevice && !this.pdfViewer.enableDesktopMode) && this.isPinchZoomed) { var zoomPercentage = parseInt((this.zoomFactor * 100).toString(), 10) + '%'; this.pdfViewerBase.navigationPane.createTooltipMobile(zoomPercentage); } } }; /** * @param {number} clientX - It describes about the clientX * @param {number} clientY - It describes about the clientY * @private * @returns {void} */ Magnification.prototype.setTouchPoints = function (clientX, clientY) { var pointInViewer = this.positionInViewer(clientX, clientY); this.touchCenterX = pointInViewer.x; this.touchCenterY = pointInViewer.y; }; /** * @param {number} pointX1 - It describes about the pointX1 * @param {number} pointY1 - It describes about the pointY1 * @param {number} pointX2 - It describes about the pointX2 * @param {number} pointY2 - It describes about the pointY2 * @private * @returns {void} */ Magnification.prototype.initiatePinchMove = function (pointX1, pointY1, pointX2, pointY2) { this.isPinchScrolled = false; this.isMagnified = false; this.reRenderPageNumber = this.pdfViewerBase.currentPageNumber; var pointInViewer = this.positionInViewer((pointX1 + pointX2) / 2, (pointY1 + pointY2) / 2); this.touchCenterX = pointInViewer.x; this.touchCenterY = pointInViewer.y; this.zoomOverPages(pointX1, pointY1, pointX2, pointY2); }; Magnification.prototype.magnifyPages = function () { var _this = this; this.clearRerenderTimer(); var pageDivElements = document.querySelectorAll('.e-pv-page-div'); var startPageElement = pageDivElements[0].id.split('_pageDiv_')[1]; var endPageElement = pageDivElements[pageDivElements.length - 1].id.split('_pageDiv_')[1]; if ((this.previousZoomFactor !== this.zoomFactor) || this.pdfViewerBase.isInitialPageMode) { for (var i = startPageElement; i <= endPageElement; i++) { this.pdfViewerBase.showPageLoadingIndicator(i, false); } } for (var i = startPageElement; i <= endPageElement; i++) { this.pdfViewerBase.showPageLoadingIndicator(i, true); } this.isWaitingPopupUpdated = true; if (!this.isPagesZoomed) { this.reRenderPageNumber = this.pdfViewerBase.currentPageNumber; } if (!this.pdfViewerBase.documentLoaded && !this.pdfViewerBase.isInitialPageMode) { this.isPagesZoomed = true; } var scrollValue = this.pdfViewerBase.viewerContainer.scrollTop; if (this.pdfViewer.textSelectionModule) { this.pdfViewer.textSelectionModule.maintainSelectionOnZoom(false, true); } if (this.pdfViewer.formDesignerModule && !this.pdfViewerBase.documentLoaded && !this.pdfViewerBase.isDocumentLoaded) { this.isFormFieldPageZoomed = true; } if (!this.isInitialLoading) { this.isMagnified = true; } this.updatePageLocation(); this.resizeCanvas(this.reRenderPageNumber); this.calculateScrollValuesOnMouse(scrollValue); if (this.pdfViewer.textSelectionModule) { this.pdfViewer.textSelectionModule.resizeTouchElements(); } var annotModule = this.pdfViewer.annotationModule; if (annotModule && annotModule.textMarkupAnnotationModule) { this.pdfViewer.annotationModule.textMarkupAnnotationModule.updateCurrentResizerPosition(); } if (this.pdfViewerBase.pageSize.length > 0) { this.pdfViewerBase.pageContainer.style.height = this.topValue + this.pdfViewerBase.getPageHeight(this.pdfViewerBase.pageSize.length - 1) + 'px'; // eslint-disable-next-line var proxy_1 = this; this.pdfViewerBase.renderedPagesList = []; this.pdfViewerBase.pinchZoomStorage = []; if (!this.pdfViewerBase.documentLoaded) { this.magnifyPageRerenderTimer = setTimeout(function () { proxy_1.rerenderMagnifiedPages(); _this.pdfViewerBase.showPageLoadingIndicator(_this.pdfViewerBase.currentPageNumber - 1, false); }, 800); } } }; Magnification.prototype.updatePageLocation = function () { this.topValue = 0; for (var i = 1; i < this.pdfViewerBase.pageSize.length; i++) { this.topValue += (this.pdfViewerBase.pageSize[parseInt(i.toString(), 10)].height + this.pdfViewerBase.pageGap) * this.zoomFactor; } var limit; if (this.pdfViewer.initialRenderPages > 10) { limit = this.pdfViewer.initialRenderPages <= this.pdfViewerBase.pageCount ? this.pdfViewer.initialRenderPages : this.pdfViewerBase.pageCount; } else { limit = this.pdfViewerBase.pageCount < 10 ? this.pdfViewerBase.pageCount : 10; } for (var i = 0; i < limit; i++) { this.updatePageContainer(i, this.pdfViewerBase.getPageWidth(i), this.pdfViewerBase.getPageHeight(i), this.pdfViewerBase.getPageTop(i), true); } }; Magnification.prototype.updatePageContainer = function (pageNumber, pageWidth, pageHeight, topValue, isReRender) { var pageDiv = this.pdfViewerBase.getElement('_pageDiv_' + pageNumber); if (pageDiv) { pageDiv.style.width = pageWidth + 'px'; pageDiv.style.height = pageHeight + 'px'; var textLayerDiv = this.pdfViewerBase.getElement('_textLayer_' + pageNumber); if (textLayerDiv) { textLayerDiv.style.width = pageWidth + 'px'; textLayerDiv.style.height = pageHeight + 'px'; } pageDiv.style.width = pageWidth + 'px'; pageDiv.style.height = pageHeight + 'px'; if (this.pdfViewer.enableRtl) { pageDiv.style.right = this.pdfViewerBase.updateLeftPosition(pageNumber) + 'px'; } else { pageDiv.style.left = this.pdfViewerBase.updateLeftPosition(pageNumber) + 'px'; } pageDiv.style.top = topValue + 'px'; this.pdfViewerBase.pageContainer.style.width = this.pdfViewerBase.viewerContainer.clientWidth + 'px'; this.pdfViewerBase.renderPageCanvas(pageDiv, pageWidth, pageHeight, pageNumber, 'block'); } }; Magnification.prototype.clearRerenderTimer = function () { clearTimeout(this.rerenderOnScrollTimer); clearTimeout(this.magnifyPageRerenderTimer); this.clearIntervalTimer(); this.isPinchScrolled = false; }; /** * @private * @returns {void} */ Magnification.prototype.clearIntervalTimer = function () { clearInterval(this.rerenderInterval); this.rerenderInterval = null; this.clearRendering(); var oldCanvases = document.querySelectorAll('canvas[id*="' + this.pdfViewer.element.id + '_oldCanvas_"]'); for (var i = 0; i < oldCanvases.length; i++) { var pageNumber = parseInt(oldCanvases[parseInt(i.toString(), 10)].id.split('_oldCanvas_')[1], 10); var pageCanvas = this.pdfViewerBase.getElement('_pageCanvas_' + pageNumber); if (pageCanvas) { oldCanvases[parseInt(i.toString(), 10)].id = pageCanvas.id; pageCanvas.parentElement.removeChild(pageCanvas); } else { oldCanvases[parseInt(i.toString(), 10)].id = this.pdfViewer.element.id + '_pageCanvas_' + pageNumber; } if (this.pdfViewerBase.isTextMarkupAnnotationModule()) { this.pdfViewer.annotationModule.textMarkupAnnotationModule.rerenderAnnotationsPinch(i); } } this.isRerenderCanvasCreated = false; }; /** * @param {HTMLImageElement} image - It describes about the image * @private * @returns {void} */ Magnification.prototype.pushImageObjects = function (image) { if (!isNullOrUndefined(this.imageObjects)) { if (this.imageObjects) { this.imageObjects.push(image); } } }; Magnification.prototype.clearRendering = function () { if (this.imageObjects) { for (var j = 0; j < this.imageObjects.length; j++) { if (this.imageObjects[parseInt(j.toString(), 10)]) { this.imageObjects[parseInt(j.toString(), 10)].onload = null; this.imageObjects[parseInt(j.toString(), 10)].onerror = null; } } this.imageObjects = []; } }; Magnification.prototype.rerenderMagnifiedPages = function () { if ((this.pdfViewerBase.isInitialLoaded || this.pdfViewerBase.isDocumentLoaded) && !this.pdfViewerBase.isInitialPageMode) { this.renderInSeparateThread(this.reRenderPageNumber); this.isPagesZoomed = false; } else if (this.pdfViewerBase.isInitialPageMode) { this.pageRerenderCount = 0; this.pdfViewerBase.renderedPagesList = []; this.pdfViewerBase.pinchZoomStorage = []; this.isMagnified = false; this.pdfViewerBase.pageViewScrollChanged(this.reRenderPageNumber); this.pdfViewerBase.isInitialPageMode = false; } }; Magnification.prototype.renderInSeparateThread = function (pageNumber) { var _this = this; this.designNewCanvas(pageNumber); this.pageRerenderCount = 0; this.pdfViewerBase.renderedPagesList = []; this.pdfViewerBase.pinchZoomStorage = []; this.isMagnified = false; this.pdfViewerBase.pageViewScrollChanged(this.pdfViewerBase.currentPageNumber); // eslint-disable-next-line var proxy = this; this.rerenderInterval = setInterval(function () { _this.initiateRerender(proxy); }, 1); }; Magnification.prototype.responsivePages = function () { this.isPagesZoomed = true; this.clearRerenderTimer(); if (this.pdfViewer.textSelectionModule) { this.pdfViewer.textSelectionModule.clearTextSelection(); } if (this.pdfViewer.textSearchModule) { this.pdfViewer.textSearchModule.clearAllOccurrences(); } var scrollValue = this.pdfViewerBase.viewerContainer.scrollTop; this.isAutoZoom = false; this.updatePageLocation(); this.pdfViewerBase.pageContainer.style.height = this.topValue + this.pdfViewerBase.pageSize[this.pdfViewerBase.pageSize.length - 1].height * this.zoomFactor + 'px'; this.resizeCanvas(this.pdfViewerBase.currentPageNumber); if (this.pdfViewerBase.textLayer && this.pdfViewer.formDesignerModule) { this.pdfViewerBase.textLayer.clearTextLayers(true); } if (this.isPinchZoomed) { this.calculateScrollValues(scrollValue); } this.pdfViewerBase.renderedPagesList = []; this.pdfViewerBase.pinchZoomStorage = []; if (this.pdfViewer.formFieldsModule && !this.pdfViewer.formDesignerModule) { // eslint-disable-next-line var proxy_2 = this; if (!this.pdfViewerBase.documentLoaded) { this.magnifyPageRerenderTimer = setTimeout(function () { proxy_2.rerenderMagnifiedPages(); }, 800); } } }; Magnification.prototype.calculateScrollValues = function (scrollValue) { var pageIndex = this.pdfViewerBase.currentPageNumber - 1; var currentPageCanvas = this.pdfViewerBase.getElement('_pageDiv_' + pageIndex); if (currentPageCanvas) { var pointInViewer = void 0; var currentPageBounds = currentPageCanvas.getBoundingClientRect(); if (this.pdfViewer.enableRtl && !this.isDoubleTapZoom) { pointInViewer = this.positionInViewer(currentPageBounds.right, currentPageBounds.top); } else { pointInViewer = this.positionInViewer(currentPageBounds.left, currentPageBounds.top); } var currentPageBoundsLeft = pointInViewer.x; var currentPageBoundsTop = pointInViewer.y; // update scroll top for the viewer container based on pinch zoom factor var previousPageTop = (currentPageBoundsTop) * this.previousZoomFactor; var canvasPreviousY = scrollValue + this.touchCenterY; var canvasCurrentY = (currentPageBoundsTop) * this.zoomFactor + ((canvasPreviousY - previousPageTop) < 0 ? canvasPreviousY - previousPageTop : (canvasPreviousY - previousPageTop) * (this.zoomFactor / this.previousZoomFactor)); var pageGapValue = this.zoomFactor - this.previousZoomFactor > 0 ? -this.pdfViewerBase.pageGap * (this.zoomFactor / this.previousZoomFactor) : this.pdfViewerBase.pageGap * (this.previousZoomFactor / this.zoomFactor); this.pdfViewerBase.viewerContainer.scrollTop = canvasCurrentY - this.touchCenterY + pageGapValue / this.pdfViewerBase.zoomInterval; // update scroll left for the viewer container based on pinch zoom factor var previousWidthFactor = (currentPageBounds.width * this.previousZoomFactor) / currentPageBounds.width; var scaleCorrectionFactor = this.zoomFactor / previousWidthFactor - 1; var scrollX_1 = this.touchCenterX - currentPageBoundsLeft; if (this.pdfViewerBase.isMixedSizeDocument && (this.pdfViewerBase.highestWidth * this.pdfViewerBase.getZoomFactor()) > this.pdfViewerBase.viewerContainer.clientWidth) { this.pdfViewerBase.viewerContainer.scrollLeft = (this.pdfViewerBase.pageContainer.offsetWidth - this.pdfViewerBase.viewerContainer.clientWidth) / 2; } else { this.pdfViewerBase.viewerContainer.scrollLeft += scrollX_1 * scaleCorrectionFactor; } } }; Magnification.prototype.calculateScrollValuesOnMouse = function (scrollValue) { var pageIndex = this.pdfViewerBase.currentPageNumber - 1; var currentPageCanvas = this.pdfViewerBase.getElement('_pageDiv_' + pageIndex); if (currentPageCanvas) { var pointInViewer = void 0; var currentPageBounds = currentPageCanvas.getBoundingClientRect(); if (this.pdfViewer.enableRtl) { pointInViewer = this.positionInViewer(currentPageBounds.right, currentPageBounds.top); } else { pointInViewer = this.positionInViewer(currentPageBounds.left, currentPageBounds.top); } var currentPageBoundsLeft = pointInViewer.x; var currentPageBoundsTop = pointInViewer.y; // update scroll top for the viewer container based on mouse zoom factor var previousPageTop = (currentPageBoundsTop) * this.previousZoomFactor; var canvasPreviousY = scrollValue + this.mouseCenterY; var canvasCurrentY = (currentPageBoundsTop) * this.zoomFactor + ((canvasPreviousY - previousPageTop) * (this.zoomFactor / this.previousZoomFactor)); var pageGapValue = this.pdfViewerBase.pageGap * (this.zoomFactor / this.previousZoomFactor); if (this.pdfViewerBase.isTouchPad && !this.pdfViewerBase.isMacSafari) { pageGapValue = pageGapValue / this.pdfViewerBase.zoomInterval; } if (canvasCurrentY === 0) { pageGapValue = 0; } this.pdfViewerBase.viewerContainer.scrollTop = canvasCurrentY - this.mouseCenterY + pageGapValue; // update scroll left for the viewer container based on mouse zoom factor var previousWidthFactor = (currentPageBounds.width * this.previousZoomFactor) / currentPageBounds.width; var scaleCorrectionFactor = this.zoomFactor / previousWidthFactor - 1; var scrollX_2 = this.mouseCenterX - currentPageBoundsLeft; if (this.pdfViewerBase.isMixedSizeDocument && (this.pdfViewerBase.highestWidth * this.pdfViewerBase.getZoomFactor()) > this.pdfViewerBase.viewerContainer.clientWidth) { this.pdfViewerBase.viewerContainer.scrollLeft = (this.pdfViewerBase.pageContainer.offsetWidth - this.pdfViewerBase.viewerContainer.clientWidth) / 2; } else { var pageContainer = document.getElementById(this.pdfViewerBase.pageContainer.id); if (pageContainer && pageContainer.children && pageContainer.children[0].clientWidth > this.pdfViewer.viewerBase.viewerContainer.clientWidth) { this.pdfViewerBase.viewerContainer.scrollLeft += scrollX_2 * scaleCorrectionFactor; } else { this.pdfViewerBase.viewerContainer.scrollLeft = (this.pdfViewerBase.pageContainer.offsetWidth - this.pdfViewerBase.viewerContainer.clientWidth) / 2; } } } }; Magnification.prototype.rerenderOnScroll = function () { var _this = this; this.isPinchZoomed = false; if (this.isPinchScrolled) { this.rerenderOnScrollTimer = null; this.isPinchScrolled = false; this.reRenderPageNumber = this.pdfViewerBase.currentPageNumber; this.pdfViewerBase.renderedPagesList = []; this.pdfViewerBase.pinchZoomStorage = []; var pageDivs = document.querySelectorAll('img[id*="' + this.pdfViewer.element.id + '_pageCanvas_"]'); var viewPortWidth = 816; for (var i = 0; i < pageDivs.length; i++) { var pageNumber = parseInt(pageDivs[parseInt(i.toString(), 10)].id.split('_pageCanvas_')[1], 10); var pageWidth = this.pdfViewerBase.pageSize[parseInt(pageNumber.toString(), 10)].width; if ((viewPortWidth < pageWidth) && this.pdfViewer.tileRenderingSettings.enableTileRendering) { if (this.pdfViewer.restrictZoomRequest) { pageDivs[parseInt(i.toString(), 10)].style.width = pageWidth * this.pdfViewerBase.getZoomFactor() + 'px'; pageDivs[parseInt(i.toString(), 10)].style.height = this.pdfViewerBase.pageSize[parseInt(pageNumber.toString(), 10)].height * this.pdfViewerBase.getZoomFactor() + 'px'; } else { pageDivs[parseInt(i.toString(), 10)].style.width = pageWidth * this.pdfViewerBase.getZoomFactor() + 'px'; pageDivs[parseInt(i.toString(), 10)].style.height = this.pdfViewerBase.pageSize[parseInt(pageNumber.toString(), 10)].height * this.pdfViewerBase.getZoomFactor() + 'px'; } } } if (this.pdfViewerBase.textLayer) { var textLayers = document.querySelectorAll('div[id*="' + this.pdfViewer.element.id + '_textLayer_"]'); for (var i = 0; i < textLayers.length; i++) { textLayers[parseInt(i.toString(), 10)].style.display = 'none'; } } if (this.pdfViewerBase.isTextMarkupAnnotationModule()) { var annotationLayers = document.querySelectorAll('canvas[id*="' + this.pdfViewer.element.id + '_annotationCanvas_"]'); for (var j = 0; j < annotationLayers.length; j++) { var pageNumber = annotationLayers[parseInt(j.toString(), 10)].id.split('_annotationCanvas_')[1]; this.pdfViewer.annotationModule.textMarkupAnnotationModule.rerenderAnnotationsPinch(parseInt(pageNumber, 10)); } } if (Browser.isDevice) { if (this.pdfViewer.formDesignerModule) { var pageNumber_1 = this.pdfViewer.currentPageNumber; var fomrFieldCollection = this.pdfViewer.formFieldCollection.filter(function (data) { return data.pageNumber === pageNumber_1; }); for (var i = 0; i < fomrFieldCollection.length; i++) { document.querySelectorAll('[id^=' + fomrFieldCollection[parseInt(i.toString(), 10)].id + ']').forEach(function (formField) { return formField.style.display = 'none'; }); } } else { document.querySelectorAll('[id^="pdfViewerinput_"]').forEach(function (formField) { return formField.parentElement.style.display = 'none'; }); } } this.pdfViewerBase.pageViewScrollChanged(this.reRenderPageNumber); this.isPagePinchZoomed = false; this.rerenderOnScrollTimer = setTimeout(function () { _this.pdfViewerBase.pageViewScrollChanged(_this.reRenderPageNumber); }, 300); if (this.pdfViewerBase.textLayer) { var textLayers = document.querySelectorAll('div[id*="' + this.pdfViewer.element.id + '_textLayer_"]'); for (var i = 0; i < textLayers.length; i++) { textLayers[parseInt(i.toString(), 10)].style.display = 'block'; } } } }; /** * @private * @returns {void} */ Magnification.prototype.pinchMoveScroll = function () { var _this = this; if (this.isRerenderCanvasCreated) { this.clearIntervalTimer(); } if (this.isPagesZoomed || (!this.isRerenderCanvasCreated && this.isPagePinchZoomed)) { this.clearRendering(); this.isPagesZoomed = false; clearTimeout(this.magnifyPageRerenderTimer); this.isPinchScrolled = true; this.isFormFieldPageZoomed = true; this.rerenderOnScrollTimer = setTimeout(function () { _this.rerenderOnScroll(); }, 100); } }; Magnification.prototype.initiateRerender = function (proxy) { var isReRender = false; if (this.previousZoomFactor < 0.4 || this.pdfViewerBase.isMinimumZoom) { isReRender = true; } if (((proxy.pageRerenderCount === proxy.pdfViewerBase.reRenderedCount) || isReRender) && proxy.pageRerenderCount !== 0 && proxy.pdfViewerBase.reRenderedCount !== 0) { proxy.reRenderAfterPinch(this.reRenderPageNumber); proxy.isFormFieldPageZoomed = false; } }; Magnification.prototype.reRenderAfterPinch = function (currentPageIndex) { this.pageRerenderCount = 0; var lowerPageValue = currentPageIndex - 3; var higherPageValue = currentPageIndex + 1; if (this.pdfViewerBase.isMinimumZoom) { lowerPageValue = currentPageIndex - 4; higherPageValue = currentPageIndex + 4; } lowerPageValue = (lowerPageValue > 0) ? lowerPageValue : 0; higherPageValue = (higherPageValue < this.pdfViewerBase.pageCount) ? higherPageValue : (this.pdfViewerBase.pageCount - 1); for (var i = lowerPageValue; i <= higherPageValue; i++) { var pageDiv = this.pdfViewerBase.getElement('_pageDiv_' + i); var oldCanvas = this.pdfViewerBase.getElement('_oldCanvas_' + i); if (oldCanvas) { oldCanvas.onload = null; oldCanvas.onerror = null; oldCanvas.parentNode.removeChild(oldCanvas); } if (this.pdfViewerBase.isTextMarkupAnnotationModule()) { this.pdfViewer.annotationModule.textMarkupAnnotationModule.rerenderAnnotations(i); } else if (this.pdfViewer.formDesignerModule) { this.rerenderAnnotations(i); this.pdfViewer.renderDrawing(undefined, currentPageIndex); } if (pageDiv) { pageDiv.style.visibility = 'visible'; } } this.isRerenderCanvasCreated = false; this.isPagePinchZoomed = false; if (this.pdfViewerBase.reRenderedCount !== 0) { this.pdfViewerBase.reRenderedCount = 0; this.pageRerenderCount = 0; clearInterval(this.rerenderInterval); this.rerenderInterval = null; } this.imageObjects = []; }; /** * @param {number} pageNumber - It describes about the page number * @private * @returns {void} */ Magnification.prototype.rerenderAnnotations = function (pageNumber) { var _this = this; var oldCanvasCollection = document.querySelectorAll('#' + this.pdfViewer.element.id + '_old_annotationCanvas_' + pageNumber); for (var i = 0; i < oldCanvasCollection.length; i++) { if (oldCanvasCollection[parseInt(i.toString(), 10)]) { oldCanvasCollection[parseInt(i.toString(), 10)].parentElement.removeChild(oldCanvasCollection[parseInt(i.toString(), 10)]); } } // Styles need to be applied to both canvases. The 'blendAnnotationsIntoCanvas' is used for highlight annotations. ['_annotationCanvas_', '_blendAnnotationsIntoCanvas_'].forEach(function (id) { var canvas = _this.pdfViewerBase.getElement("" + id + pageNumber); canvas.style.setProperty('display', 'block'); }); }; Magnification.prototype.designNewCanvas = function (currentPageIndex) { if (this.pdfViewerBase.textLayer) { this.pdfViewerBase.textLayer.clearTextLayers(); } var lowerPageValue = currentPageIndex - 3; var higherPageValue = currentPageIndex + 1; // jshint ignore:line if (this.pdfViewerBase.isMinimumZoom) { lowerPageValue = currentPageIndex - 4; higherPageValue = currentPageIndex + 4; } lowerPageValue = (lowerPageValue > 0) ? lowerPageValue : 0; higherPageValue = (higherPageValue < this.pdfViewerBase.pageCount) ? higherPageValue : (this.pdfViewerBase.pageCount - 1); for (var i = lowerPageValue; i <= higherPageValue; i++) { if (this.pdfViewerBase.pageSize[parseInt(i.toString(), 10)]) { var canvas = this.pdfViewerBase.getElement('_pageCanvas_' + i); var width = this.pdfViewerBase.pageSize[parseInt(i.toString(), 10)].width * this.zoomFactor; var height = this.pdfViewerBase.pageSize[parseInt(i.toString(), 10)].height * this.zoomFactor; if (canvas && !this.pdfViewer.restrictZoomRequest) { this.pdfViewerBase.renderPageCanvas(this.pdfViewerBase.getElement('_pageDiv_' + i), width, height, i, 'none'); } else if (!this.pdfViewer.restrictZoomRequest) { this.pdfViewerBase.renderPageCanvas(this.pdfViewerBase.getElement('_pageDiv_' + i), width, height, i, 'none'); } } } this.isRerenderCanvasCreated = true; }; /** * @private * @returns {void} */ Magnification.prototype.pageRerenderOnMouseWheel = function () { var _this = this; if (this.isRerenderCanvasCreated) { this.clearIntervalTimer(); clearTimeout(this.magnifyPageRerenderTimer); if (!this.isPinchScrolled) { this.isPinchScrolled = true; this.rerenderOnScrollTimer = setTimeout(function () { _this.rerenderOnScroll(); }, 100); } } }; /** * @private * @returns {void} */ Magnification.prototype.renderCountIncrement = function () { if (this.isRerenderCanvasCreated) { this.pageRerenderCount++; } }; /** * @private * @returns {void} */ Magnification.prototype.rerenderCountIncrement = function () { if (this.pageRerenderCount > 0) { this.pdfViewerBase.reRenderedCount++; } }; /** * @param {number} pageNumber - It describes about the page number * @private * @returns {void} */ Magnification.prototype.resizeCanvas = function (pageNumber) { var annotationModule = this.pdfViewer.annotationModule; if (annotationModule && annotationModule.inkAnnotationModule && annotationModule.inkAnnotationModule.outputString !== '') { annotationModule.inkAnnotationModule.inkPathDataCollection.push({ pathData: annotationModule.inkAnnotationModule.outputString, zoomFactor: annotationModule.inkAnnotationModule.inkAnnotationInitialZoom }); annotationModule.inkAnnotationModule.outputString = ''; } if (annotationModule && annotationModule.freeTextAnnotationModule) { var currentPosition = { x: annotationModule.freeTextAnnotationModule.currentPosition[0], y: annotationModule.freeTextAnnotationModule.currentPosition[1], width: annotationModule.freeTextAnnotationModule.currentPosition[2], height: annotationModule.freeTextAnnotationModule.currentPosition[3] }; annotationModule.freeTextAnnotationModule.addInputInZoom(currentPosition); } var lowerPageValue = pageNumber - 3; var higherPageValue = pageNumber + 3; if (this.pdfViewerBase.isMinimumZoom) { lowerPageValue = pageNumber - 4; higherPageValue = pageNumber + 4; } if (this.pdfViewer.initialRenderPages > this.pdfViewerBase.pageRenderCount) { lowerPageValue = 0; higherPageValue = (higherPageValue < this.pdfViewer.initialRenderPages) ? (this.pdfViewer.initialRenderPages <= this.pdfViewerBase.pageCount) ? this.pdfViewer.initialRenderPages : this.pdfViewerBase.pageCount : (higherPageValue < this.pdfViewerBase.pageCount) ? higherPageValue : (this.pdfViewerBase.pageCount - 1); } else { lowerPageValue = (lowerPageValue > 0) ? lowerPageValue : 0; higherPageValue = (higherPageValue < this.pdfViewerBase.pageCount) ? higherPageValue : (this.pdfViewerBase.pageCount - 1); } for (var i = lowerPageValue; i <= higherPageValue; i++) { var pageDiv = this.pdfViewerBase.getElement('_pageDiv_' + i); var textLayer = document.getElementById(this.pdfViewer.element.id + '_textLayer_' + i); if (pageDiv) { if ((lowerPageValue <= i) && (i <= higherPageValue)) { var isSelectionAvailable = false; if (this.pdfViewer.textSelectionModule) { isSelectionAvailable = this.pdfViewer.textSelectionModule.isSelectionAvailableOnScroll(i); } if (this.pdfViewerBase.pageSize[parseInt(i.toString(), 10)] != null) { var width = this.pdfViewerBase.pageSize[parseInt(i.toString(), 10)].width * this.zoomFactor; var height = this.pdfViewerBase.pageSize[parseInt(i.toString(), 10)].height * this.zoomFactor; pageDiv.style.width = width + 'px'; pageDiv.style.height = height + 'px'; pageDiv.style.top = ((this.pdfViewerBase.pageSize[parseInt(i.toString(), 10)].top) * this.zoomFactor) + 'px'; if (this.pdfViewer.enableRtl) { pageDiv.style.right = this.pdfViewerBase.updateLeftPosition(i) + 'px'; } else { pageDiv.style.left = this.pdfViewerBase.updateLeftPosition(i) + 'px'; } var canva