@syncfusion/ej2-pdfviewer
Version:
Essential JS 2 PDF viewer Component
283 lines (282 loc) • 10.7 kB
JavaScript
import { PdfPageRotateAngle } from '../organize-pdf';
import { isNullOrUndefined, Browser } from '@syncfusion/ej2-base';
/**
* @private
* @param { string } rotate - It's describe about a rotate angle in string.
* @returns { number } - It's describe a rotation angle.
*/
export function getRotatedAngle(rotate) {
switch (rotate.trim()) {
case '0':
return 0;
case '90':
case '1':
return 90;
case '180':
case '2':
return 180;
case '270':
case '3':
return 270;
case '360':
case '4':
return 0;
default:
return 0;
}
}
/**
* @private
* @param { string } rotateAngle - It's describe about a rotate angle in string.
* @returns { number } - It's describe about a rotation value.
*/
export function getRotation(rotateAngle) {
switch (rotateAngle.trim()) {
case '0':
return 0;
case '90':
return 1;
case '180':
return 2;
case '270':
return 3;
case '360':
return 0;
default:
return 0;
}
}
/**
* @private
* @param { number } pageIndex - It's describe about a current page index.
* @param { number } pageWidth - It's describe about a page width.
* @param { number } pageHeight - It's describe about a page height.
* @returns {void}
*/
export function updatePageSize(pageIndex, pageWidth, pageHeight) {
if (this.pdfViewerBase.pageSize[parseInt(pageIndex.toString(), 10)]) {
this.pdfViewerBase.pageSize[parseInt(pageIndex.toString(), 10)].width = pageWidth;
this.pdfViewerBase.pageSize[parseInt(pageIndex.toString(), 10)].height = pageHeight;
if (this.pdfViewerBase.highestWidth < pageWidth) {
this.pdfViewerBase.highestWidth = pageWidth;
}
this.pdfViewerBase.isMixedSizeDocument = true;
}
for (var i = pageIndex; i < this.pdfViewerBase.pageSize.length; i++) {
if (!this.pdfViewerBase.pageSize[parseInt((i - 1).toString(), 10)] && i - 1 < 0) {
this.pdfViewerBase.pageSize[parseInt(i.toString(), 10)].top = this.pdfViewerBase.pageGap;
}
else {
this.pdfViewerBase.pageSize[parseInt(i.toString(), 10)].top =
this.pdfViewerBase.pageSize[parseInt((i - 1).toString(), 10)].top +
this.pdfViewerBase.pageSize[parseInt((i - 1).toString(), 10)].height + this.pdfViewerBase.pageGap;
}
}
}
/**
* @private
* @param { HTMLElement } parentElement - It's describe about a page html element.
* @param { number } parentPageIndex - It's describe about a parent page index.
* @returns { number } - It's describe about a next page index.
*/
export function getNextSubIndex(parentElement, parentPageIndex) {
var elementsWithAnchorId = parentElement.querySelectorAll("[id^='anchor_page_" + parentPageIndex + "']");
// Find the largest subindex among the existing elements
var maxSubIndex = -1;
elementsWithAnchorId.forEach(function (element) {
var _a = element.id.split('_').slice(2), pageIndex = _a[0], subIndex = _a[1];
if (Number(subIndex) > maxSubIndex) {
maxSubIndex = Number(subIndex);
}
});
return maxSubIndex + 1;
}
/**
* @private
* @param { number[] } pageNumbers - It's describe about a document page numbers collection.
* @returns { void }
*/
export function rotateClockwise(pageNumbers) {
if (this.pdfViewer.pageOrganizerSettings.canRotate) {
var _loop_1 = function (pageIndex) {
// Find the index of the page in the rotationDetail array
var index = this_1.organizePagesCollection.findIndex(function (item) { return item.pageIndex === pageIndex; });
// Check if the page is already in the rotationDetail array
if (index !== -1) {
// If the pageIndex is found in the array, update the rotation angle
this_1.organizePagesCollection[parseInt(index.toString(), 10)].rotateAngle =
(this_1.organizePagesCollection[parseInt(index.toString(), 10)].rotateAngle + 90 + 360) % 360;
}
};
var this_1 = this;
// Iterate through the provided page numbers
for (var _i = 0, pageNumbers_1 = pageNumbers; _i < pageNumbers_1.length; _i++) {
var pageIndex = pageNumbers_1[_i];
_loop_1(pageIndex);
}
}
}
/**
* @private
* @param { number[] } pageNumbers - It's describe about a document page numbers collection.
* @returns { void }
*/
export function rotateCounterclockwise(pageNumbers) {
if (this.pdfViewer.pageOrganizerSettings.canRotate) {
var _loop_2 = function (pageIndex) {
// Find the index of the page in the rotationDetail array
var index = this_2.organizePagesCollection.findIndex(function (item) { return item.pageIndex === pageIndex; });
// Check if the page is already in the rotationDetail array
if (index !== -1) {
// If the pageIndex is found in the array, update the rotation angle
this_2.organizePagesCollection[parseInt(index.toString(), 10)].rotateAngle =
(this_2.organizePagesCollection[parseInt(index.toString(), 10)].rotateAngle - 90 + 360) % 360;
}
};
var this_2 = this;
// Iterate through the provided page numbers
for (var _i = 0, pageNumbers_2 = pageNumbers; _i < pageNumbers_2.length; _i++) {
var pageIndex = pageNumbers_2[_i];
_loop_2(pageIndex);
}
}
}
/**
* @private
* @param { HTMLDivElement } imageContainer - It's describe about a tile image container.
* @returns { number } - It's describe about a image zoom factor.
*/
export function getImageZoomFactor(imageContainer) {
var minValue = this.getImageZoomMin();
if (!this.pdfViewer.enablePageOrganizer || isNullOrUndefined(this.pdfViewer.pageOrganizerSettings)) {
return minValue;
}
var size = this.getImageZoomValue();
if (isNullOrUndefined(size)) {
return minValue;
}
var maxValue = this.getImageZoomMax();
if (!Browser.isDevice || this.pdfViewer.enableDesktopMode) {
return this.getImageZoomValue();
}
else {
var viewportWidth = this.pdfViewer.element.clientWidth;
var imageContainerWidth = 140;
imageContainer.style.position = 'absolute';
document.body.appendChild(imageContainer);
var computedStyle = window.getComputedStyle(imageContainer);
var margin = parseFloat(computedStyle.marginLeft) + parseFloat(computedStyle.marginRight);
document.body.removeChild(imageContainer);
if ((imageContainerWidth * maxValue) <= (viewportWidth - margin)) {
return this.getImageZoomValue();
}
else {
var maxFactor = (viewportWidth - margin) / imageContainerWidth;
var factor = (maxFactor - minValue) / (maxValue - minValue);
if (size < minValue) {
return minValue;
}
if (size > maxValue) {
return (minValue + ((maxValue - minValue) * factor));
}
return (minValue + ((size - minValue) * factor));
}
}
}
/**
* @private
* @param { boolean } isImageRequest - It's describe about a is image request or not.
* @param { number } size - It's describe about a tile image container.
* @returns { number } - It's describe about a image zoom value.
*/
export function getImageZoomValue(isImageRequest, size) {
var minValue = this.getImageZoomMin();
if (!this.pdfViewer.enablePageOrganizer || isNullOrUndefined(this.pdfViewer.pageOrganizerSettings)) {
return minValue;
}
if (isNullOrUndefined(size)) {
size = this.pdfViewer.pageOrganizerSettings.imageZoom;
if (isNullOrUndefined(size)) {
return minValue;
}
}
var maxValue = this.getImageZoomMax();
if (size < minValue) {
return minValue;
}
if (size > maxValue) {
return maxValue;
}
if (isImageRequest) {
return Math.round(size);
}
return size;
}
/**
* @private
* @param { number[] } pageIndexes - It's describe about a is image request or not.
* @param { PdfPageRotateAngle } pageRotateAngle - It's describe about a tile image container.
* @returns { void }
*/
export function processRotation(pageIndexes, pageRotateAngle) {
if (this.pdfViewer.pageOrganizerSettings.canRotate) {
var _loop_3 = function (pageIndex) {
var rotateAngle = pdfRotateAngle(pageRotateAngle);
// Find the index of the page in the rotationDetail array
var index = this_3.organizePagesCollection.findIndex(function (item) { return item.pageIndex === pageIndex; });
// Check if the page is already in the rotationDetail array
if (index !== -1) {
// If the pageIndex is found in the array, update the rotation angle
this_3.organizePagesCollection[parseInt(index.toString(), 10)].rotateAngle =
(this_3.organizePagesCollection[parseInt(index.toString(), 10)].rotateAngle + rotateAngle + 360) % 360;
}
};
var this_3 = this;
// Iterate through the provided page numbers
for (var _i = 0, pageIndexes_1 = pageIndexes; _i < pageIndexes_1.length; _i++) {
var pageIndex = pageIndexes_1[_i];
_loop_3(pageIndex);
}
}
}
/**
* @private
* @param { PdfPageRotateAngle } rotateAngle - It's describe about a tile image rotation.
* @returns { void }
*/
export function pdfRotateAngle(rotateAngle) {
var angle = 0;
if (rotateAngle === PdfPageRotateAngle.RotateAngle0) {
angle = 0;
}
else if (rotateAngle === PdfPageRotateAngle.RotateAngle90) {
angle = 90;
}
else if (rotateAngle === PdfPageRotateAngle.RotateAngle180) {
angle = 180;
}
else if (rotateAngle === PdfPageRotateAngle.RotateAngle270) {
angle = 270;
}
else if (rotateAngle === PdfPageRotateAngle.RotateAngle360) {
angle = 0;
}
return angle;
}
/**
* @private
* @param { any } a - It's describe about a start page index.
* @param { any } b - It's describe about a end page index.
* @returns { number } - It's describe about a current page index.
*/
export function sorting(a, b) {
a = !isNullOrUndefined(a) ? parseInt(a.toString(), 10) : -1;
b = !isNullOrUndefined(b) ? parseInt(b.toString(), 10) : -1;
if (a > b) {
return 1;
}
if (a < b) {
return -1;
}
return 0;
}