mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2024-11-10 21:22:58 +01:00
01e8afc1f6
- Added total page and current page preview - Added new "Page" translation - Replaced CDN based assets with local - Production builds of assets Co-authored-by: David Bomba <turbo124@gmail.com>
102 lines
2.4 KiB
JavaScript
Vendored
102 lines
2.4 KiB
JavaScript
Vendored
/**
|
|
* Invoice Ninja (https://invoiceninja.com)
|
|
*
|
|
* @link https://github.com/invoiceninja/invoiceninja source repository
|
|
*
|
|
* @copyright Copyright (c) 2020. Invoice Ninja LLC (https://invoiceninja.com)
|
|
*
|
|
* @license https://opensource.org/licenses/AAL
|
|
*/
|
|
|
|
class PDF {
|
|
constructor(url, canvas) {
|
|
this.url = url;
|
|
this.canvas = canvas;
|
|
this.context = canvas.getContext("2d");
|
|
this.currentPage = 1;
|
|
this.maxPages = 1;
|
|
}
|
|
|
|
handlePreviousPage() {
|
|
if (this.currentPage == 1) {
|
|
return;
|
|
}
|
|
|
|
this.currentPage -= 1;
|
|
|
|
this.handle();
|
|
}
|
|
|
|
handleNextPage() {
|
|
if (this.currentPage == this.maxPages) {
|
|
return;
|
|
}
|
|
|
|
this.currentPage += 1;
|
|
|
|
this.handle();
|
|
}
|
|
|
|
prepare() {
|
|
let previousPageButton = document.getElementById(
|
|
"previous-page-button"
|
|
);
|
|
|
|
let nextPageButton = document.getElementById("next-page-button");
|
|
|
|
previousPageButton.addEventListener("click", () =>
|
|
this.handlePreviousPage()
|
|
);
|
|
|
|
nextPageButton.addEventListener("click", () => this.handleNextPage());
|
|
|
|
return this;
|
|
}
|
|
|
|
setPagesInViewport() {
|
|
let currentPageContainer = document.getElementById(
|
|
"current-page-container"
|
|
);
|
|
|
|
let totalPageContainer = document.getElementById(
|
|
"total-page-container"
|
|
);
|
|
|
|
let paginationButtonContainer = document.getElementById(
|
|
"pagination-button-container"
|
|
);
|
|
|
|
currentPageContainer.innerText = this.currentPage;
|
|
totalPageContainer.innerText = this.maxPages;
|
|
|
|
if (this.maxPages > 1) {
|
|
paginationButtonContainer.style.display = "flex";
|
|
}
|
|
}
|
|
|
|
async handle() {
|
|
let pdf = await pdfjsLib.getDocument(this.url).promise;
|
|
|
|
let page = await pdf.getPage(this.currentPage);
|
|
|
|
this.maxPages = pdf.numPages;
|
|
|
|
let viewport = await page.getViewport({ scale: 1 });
|
|
|
|
this.canvas.height = viewport.height;
|
|
this.canvas.width = viewport.width;
|
|
|
|
page.render({
|
|
canvasContext: this.context,
|
|
viewport
|
|
});
|
|
|
|
this.setPagesInViewport();
|
|
}
|
|
}
|
|
|
|
const url = document.querySelector("meta[name='pdf-url'").content;
|
|
const canvas = document.getElementById("pdf-placeholder");
|
|
|
|
new PDF(url, canvas).prepare().handle();
|