diff --git a/web/app.js b/web/app.js index 156367f5f..350f21b18 100644 --- a/web/app.js +++ b/web/app.js @@ -193,9 +193,124 @@ var PDFViewerApplication = { // called once when the document is loaded initialize: function pdfViewInitialize(appConfig) { + var self = this; + var PDFJS = pdfjsLib.PDFJS; + configure(pdfjsLib.PDFJS); this.appConfig = appConfig; + Preferences.initialize(); + this.preferences = Preferences; + + this._initializeViewerComponents(); + + return this._readPreferences().then(function () { + if (self.isViewerEmbedded && !PDFJS.isExternalLinkTargetSet()) { + // Prevent external links from "replacing" the viewer, + // when it's embedded in e.g. an iframe or an object. + PDFJS.externalLinkTarget = PDFJS.LinkTarget.TOP; + } + + self.initialized = true; + }); + }, + + /** + * @private + */ + _readPreferences: function () { + var self = this; + var PDFJS = pdfjsLib.PDFJS; + + return Promise.all([ + Preferences.get('enableWebGL').then(function resolved(value) { + PDFJS.disableWebGL = !value; + }), + Preferences.get('sidebarViewOnLoad').then(function resolved(value) { + self.preferenceSidebarViewOnLoad = value; + }), + Preferences.get('pdfBugEnabled').then(function resolved(value) { + self.preferencePdfBugEnabled = value; + }), + Preferences.get('showPreviousViewOnLoad').then(function resolved(value) { + self.preferenceShowPreviousViewOnLoad = value; + }), + Preferences.get('defaultZoomValue').then(function resolved(value) { + self.preferenceDefaultZoomValue = value; + }), + Preferences.get('enhanceTextSelection').then(function resolved(value) { + // TODO: Move the initialization and fetching of `Preferences` to occur + // before the various viewer components are initialized. + // + // This was attempted in: https://github.com/mozilla/pdf.js/pull/7586, + // but it had to be backed out since it violated implicit assumptions + // about some viewer components being synchronously available. + // + // NOTE: This hack works since the `enhanceTextSelection` option is not + // needed until `PDFViewer.setDocument` has been called. + self.pdfViewer.enhanceTextSelection = value; + }), + Preferences.get('disableTextLayer').then(function resolved(value) { + if (PDFJS.disableTextLayer === true) { + return; + } + PDFJS.disableTextLayer = value; + }), + Preferences.get('disableRange').then(function resolved(value) { + if (PDFJS.disableRange === true) { + return; + } + PDFJS.disableRange = value; + }), + Preferences.get('disableStream').then(function resolved(value) { + if (PDFJS.disableStream === true) { + return; + } + PDFJS.disableStream = value; + }), + Preferences.get('disableAutoFetch').then(function resolved(value) { + PDFJS.disableAutoFetch = value; + }), + Preferences.get('disableFontFace').then(function resolved(value) { + if (PDFJS.disableFontFace === true) { + return; + } + PDFJS.disableFontFace = value; + }), + Preferences.get('useOnlyCssZoom').then(function resolved(value) { + PDFJS.useOnlyCssZoom = value; + }), + Preferences.get('externalLinkTarget').then(function resolved(value) { + if (PDFJS.isExternalLinkTargetSet()) { + return; + } + PDFJS.externalLinkTarget = value; + }), + Preferences.get('renderer').then(function resolved(value) { + // TODO: Like the `enhanceTextSelection` preference, move the + // initialization and fetching of `Preferences` to occur + // before the various viewer components are initialized. + self.pdfViewer.renderer = value; + }), + Preferences.get('renderInteractiveForms').then(function resolved(value) { + // TODO: Like the `enhanceTextSelection` preference, move the + // initialization and fetching of `Preferences` to occur + // before the various viewer components are initialized. + self.pdfViewer.renderInteractiveForms = value; + }), + Preferences.get('disablePageLabels').then(function resolved(value) { + self.preferenceDisablePageLabels = value; + }), + // TODO move more preferences and other async stuff here + ]).catch(function (reason) { }); + }, + + /** + * @private + */ + _initializeViewerComponents: function () { + var appConfig = this.appConfig; + var eventBus = appConfig.eventBus || getGlobalEventBus(); this.eventBus = eventBus; this.bindEvents(); @@ -235,9 +350,6 @@ var PDFViewerApplication = { }); pdfRenderingQueue.setThumbnailViewer(this.pdfThumbnailViewer); - Preferences.initialize(); - this.preferences = Preferences; - this.pdfHistory = new PDFHistory({ linkService: pdfLinkService, eventBus: this.eventBus @@ -317,100 +429,6 @@ var PDFViewerApplication = { sidebarConfig.eventBus = this.eventBus; this.pdfSidebar = new PDFSidebar(sidebarConfig); this.pdfSidebar.onToggled = this.forceRendering.bind(this); - - var self = this; - var PDFJS = pdfjsLib.PDFJS; - var initializedPromise = Promise.all([ - Preferences.get('enableWebGL').then(function resolved(value) { - PDFJS.disableWebGL = !value; - }), - Preferences.get('sidebarViewOnLoad').then(function resolved(value) { - self.preferenceSidebarViewOnLoad = value; - }), - Preferences.get('pdfBugEnabled').then(function resolved(value) { - self.preferencePdfBugEnabled = value; - }), - Preferences.get('showPreviousViewOnLoad').then(function resolved(value) { - self.preferenceShowPreviousViewOnLoad = value; - }), - Preferences.get('defaultZoomValue').then(function resolved(value) { - self.preferenceDefaultZoomValue = value; - }), - Preferences.get('enhanceTextSelection').then(function resolved(value) { - // TODO: Move the initialization and fetching of `Preferences` to occur - // before the various viewer components are initialized. - // - // This was attempted in: https://github.com/mozilla/pdf.js/pull/7586, - // but it had to be backed out since it violated implicit assumptions - // about some viewer components being synchronously available. - // - // NOTE: This hack works since the `enhanceTextSelection` option is not - // needed until `PDFViewer.setDocument` has been called. - self.pdfViewer.enhanceTextSelection = value; - }), - Preferences.get('disableTextLayer').then(function resolved(value) { - if (PDFJS.disableTextLayer === true) { - return; - } - PDFJS.disableTextLayer = value; - }), - Preferences.get('disableRange').then(function resolved(value) { - if (PDFJS.disableRange === true) { - return; - } - PDFJS.disableRange = value; - }), - Preferences.get('disableStream').then(function resolved(value) { - if (PDFJS.disableStream === true) { - return; - } - PDFJS.disableStream = value; - }), - Preferences.get('disableAutoFetch').then(function resolved(value) { - PDFJS.disableAutoFetch = value; - }), - Preferences.get('disableFontFace').then(function resolved(value) { - if (PDFJS.disableFontFace === true) { - return; - } - PDFJS.disableFontFace = value; - }), - Preferences.get('useOnlyCssZoom').then(function resolved(value) { - PDFJS.useOnlyCssZoom = value; - }), - Preferences.get('externalLinkTarget').then(function resolved(value) { - if (PDFJS.isExternalLinkTargetSet()) { - return; - } - PDFJS.externalLinkTarget = value; - }), - Preferences.get('renderer').then(function resolved(value) { - // TODO: Like the `enhanceTextSelection` preference, move the - // initialization and fetching of `Preferences` to occur - // before the various viewer components are initialized. - self.pdfViewer.renderer = value; - }), - Preferences.get('renderInteractiveForms').then(function resolved(value) { - // TODO: Like the `enhanceTextSelection` preference, move the - // initialization and fetching of `Preferences` to occur - // before the various viewer components are initialized. - self.pdfViewer.renderInteractiveForms = value; - }), - Preferences.get('disablePageLabels').then(function resolved(value) { - self.preferenceDisablePageLabels = value; - }), - // TODO move more preferences and other async stuff here - ]).catch(function (reason) { }); - - return initializedPromise.then(function () { - if (self.isViewerEmbedded && !PDFJS.isExternalLinkTargetSet()) { - // Prevent external links from "replacing" the viewer, - // when it's embedded in e.g. an iframe or an object. - PDFJS.externalLinkTarget = PDFJS.LinkTarget.TOP; - } - - self.initialized = true; - }); }, run: function pdfViewRun(config) {