Only display the pageNumber-loadingIcon when rendering is currently running
*This makes the same kind of changes as in the previous patch, but for the pageNumber-loadingIcon in the main toolbar.* To display the pageNumber-loadingIcon when rendering starts, if the page is the most visible one, we'll utilize the existing "pagerender" event. To toggle the pageNumber-loadingIcon as the user moves through the document we'll now instead utilize the "pagechanging" event, which should actually be slightly more efficient overall[1]. Note how we'd, in the old code, only consider the most visible page anyway when toggling the pageNumber-loadingIcon. --- [1] Even in a PDF document as relatively short/simple as `tracemonkey.pdf`, scrolling through the entire document can easily trigger the "updateviewarea" event more than a thousand times.
This commit is contained in:
parent
a578571f59
commit
4224984525
27
web/app.js
27
web/app.js
@ -1804,6 +1804,7 @@ const PDFViewerApplication = {
|
|||||||
eventBus._on("hashchange", webViewerHashchange);
|
eventBus._on("hashchange", webViewerHashchange);
|
||||||
eventBus._on("beforeprint", _boundEvents.beforePrint);
|
eventBus._on("beforeprint", _boundEvents.beforePrint);
|
||||||
eventBus._on("afterprint", _boundEvents.afterPrint);
|
eventBus._on("afterprint", _boundEvents.afterPrint);
|
||||||
|
eventBus._on("pagerender", webViewerPageRender);
|
||||||
eventBus._on("pagerendered", webViewerPageRendered);
|
eventBus._on("pagerendered", webViewerPageRendered);
|
||||||
eventBus._on("updateviewarea", webViewerUpdateViewarea);
|
eventBus._on("updateviewarea", webViewerUpdateViewarea);
|
||||||
eventBus._on("pagechanging", webViewerPageChanging);
|
eventBus._on("pagechanging", webViewerPageChanging);
|
||||||
@ -1936,6 +1937,7 @@ const PDFViewerApplication = {
|
|||||||
eventBus._off("hashchange", webViewerHashchange);
|
eventBus._off("hashchange", webViewerHashchange);
|
||||||
eventBus._off("beforeprint", _boundEvents.beforePrint);
|
eventBus._off("beforeprint", _boundEvents.beforePrint);
|
||||||
eventBus._off("afterprint", _boundEvents.afterPrint);
|
eventBus._off("afterprint", _boundEvents.afterPrint);
|
||||||
|
eventBus._off("pagerender", webViewerPageRender);
|
||||||
eventBus._off("pagerendered", webViewerPageRendered);
|
eventBus._off("pagerendered", webViewerPageRendered);
|
||||||
eventBus._off("updateviewarea", webViewerUpdateViewarea);
|
eventBus._off("updateviewarea", webViewerUpdateViewarea);
|
||||||
eventBus._off("pagechanging", webViewerPageChanging);
|
eventBus._off("pagechanging", webViewerPageChanging);
|
||||||
@ -2212,6 +2214,14 @@ function webViewerInitialized() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function webViewerPageRender({ pageNumber }) {
|
||||||
|
// If the page is (the most) visible when it starts rendering,
|
||||||
|
// ensure that the page number input loading indicator is displayed.
|
||||||
|
if (pageNumber === PDFViewerApplication.page) {
|
||||||
|
PDFViewerApplication.toolbar?.updateLoadingIndicatorState(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function webViewerPageRendered({ pageNumber, error }) {
|
function webViewerPageRendered({ pageNumber, error }) {
|
||||||
// If the page is still visible when it has finished rendering,
|
// If the page is still visible when it has finished rendering,
|
||||||
// ensure that the page number input loading indicator is hidden.
|
// ensure that the page number input loading indicator is hidden.
|
||||||
@ -2321,20 +2331,13 @@ function webViewerUpdateViewarea({ location }) {
|
|||||||
// Unable to write to storage.
|
// Unable to write to storage.
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if (PDFViewerApplication.appConfig.secondaryToolbar) {
|
||||||
const href = PDFViewerApplication.pdfLinkService.getAnchorUrl(
|
const href = PDFViewerApplication.pdfLinkService.getAnchorUrl(
|
||||||
location.pdfOpenParams
|
location.pdfOpenParams
|
||||||
);
|
);
|
||||||
if (PDFViewerApplication.appConfig.secondaryToolbar) {
|
|
||||||
PDFViewerApplication.appConfig.secondaryToolbar.viewBookmarkButton.href =
|
PDFViewerApplication.appConfig.secondaryToolbar.viewBookmarkButton.href =
|
||||||
href;
|
href;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show/hide the loading indicator in the page number input element.
|
|
||||||
const currentPage = PDFViewerApplication.pdfViewer.getPageView(
|
|
||||||
/* index = */ PDFViewerApplication.page - 1
|
|
||||||
);
|
|
||||||
const loading = currentPage?.renderingState !== RenderingStates.FINISHED;
|
|
||||||
PDFViewerApplication.toolbar?.updateLoadingIndicatorState(loading);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function webViewerScrollModeChanged(evt) {
|
function webViewerScrollModeChanged(evt) {
|
||||||
@ -2565,6 +2568,14 @@ function webViewerPageChanging({ pageNumber, pageLabel }) {
|
|||||||
pageNumber
|
pageNumber
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Show/hide the loading indicator in the page number input element.
|
||||||
|
const currentPage = PDFViewerApplication.pdfViewer.getPageView(
|
||||||
|
/* index = */ pageNumber - 1
|
||||||
|
);
|
||||||
|
PDFViewerApplication.toolbar?.updateLoadingIndicatorState(
|
||||||
|
currentPage?.renderingState === RenderingStates.RUNNING
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function webViewerResolutionChange(evt) {
|
function webViewerResolutionChange(evt) {
|
||||||
|
Loading…
Reference in New Issue
Block a user