From 44587f345914f9602c46d05188f6ed5eed38c27f Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Mon, 17 Feb 2020 12:49:56 +0100 Subject: [PATCH] Add a `PDFViewerApplication.initializedPromise` property to allow (easier) tracking of when the default viewer has been initialized This complements the existing `PDFViewerApplication.initialized` boolean property, and may be helpful for custom implementations of the default viewer. This will thus provide users of the default viewer an alternative to setting the preference to dispatch events to the DOM (and listen for the "localized" event), since they can instead use: ```javascript document.addEventListener("webviewerloaded", function() { PDFViewerApplication.initializedPromise.then(function() { // The viewer has now been initialized. }) }); ``` Note that in order to avoid manually tracking the initialization state *twice*, this implementation purposely uses the `PromiseCapability` functionality to handle both `PDFViewerApplication.initialized` and `PDFViewerApplication.initializedPromise` internally. --- web/app.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/web/app.js b/web/app.js index c8e015706..1610f6249 100644 --- a/web/app.js +++ b/web/app.js @@ -38,6 +38,7 @@ import { import { AppOptions, OptionKind } from "./app_options.js"; import { build, + createPromiseCapability, getDocument, getFilenameFromUrl, GlobalWorkerOptions, @@ -128,7 +129,7 @@ class DefaultExternalServices { const PDFViewerApplication = { initialBookmark: document.location.hash.substring(1), - initialized: false, + _initializedCapability: createPromiseCapability(), fellback: false, appConfig: null, pdfDocument: null, @@ -215,7 +216,7 @@ const PDFViewerApplication = { this.eventBus.dispatch("localized", { source: this }); }); - this.initialized = true; + this._initializedCapability.resolve(); }, /** @@ -476,6 +477,14 @@ const PDFViewerApplication = { this.initialize(config).then(webViewerInitialized); }, + get initialized() { + return this._initializedCapability.settled; + }, + + get initializedPromise() { + return this._initializedCapability.promise; + }, + zoomIn(ticks) { if (this.pdfViewer.isInPresentationMode) { return;