diff --git a/web/app.js b/web/app.js index 156367f5f..350f21b18 100644 --- a/web/app.js +++ b/web/app.js @@ -193,134 +193,36 @@ 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; - var eventBus = appConfig.eventBus || getGlobalEventBus(); - this.eventBus = eventBus; - this.bindEvents(); - - var pdfRenderingQueue = new PDFRenderingQueue(); - pdfRenderingQueue.onIdle = this.cleanup.bind(this); - this.pdfRenderingQueue = pdfRenderingQueue; - - var pdfLinkService = new PDFLinkService({ - eventBus: eventBus - }); - this.pdfLinkService = pdfLinkService; - - var downloadManager = this.externalServices.createDownloadManager(); - this.downloadManager = downloadManager; - - var container = appConfig.mainContainer; - var viewer = appConfig.viewerContainer; - this.pdfViewer = new PDFViewer({ - container: container, - viewer: viewer, - eventBus: eventBus, - renderingQueue: pdfRenderingQueue, - linkService: pdfLinkService, - downloadManager: downloadManager, - enhanceTextSelection: false, - renderInteractiveForms: false, - }); - pdfRenderingQueue.setViewer(this.pdfViewer); - pdfLinkService.setViewer(this.pdfViewer); - - var thumbnailContainer = appConfig.sidebar.thumbnailView; - this.pdfThumbnailViewer = new PDFThumbnailViewer({ - container: thumbnailContainer, - renderingQueue: pdfRenderingQueue, - linkService: pdfLinkService - }); - pdfRenderingQueue.setThumbnailViewer(this.pdfThumbnailViewer); - Preferences.initialize(); this.preferences = Preferences; - this.pdfHistory = new PDFHistory({ - linkService: pdfLinkService, - eventBus: this.eventBus - }); - pdfLinkService.setHistory(this.pdfHistory); + this._initializeViewerComponents(); - this.findController = new PDFFindController({ - pdfViewer: this.pdfViewer - }); - this.findController.onUpdateResultsCount = function (matchCount) { - if (this.supportsIntegratedFind) { - return; + 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; } - this.findBar.updateResultsCount(matchCount); - }.bind(this); - this.findController.onUpdateState = function (state, previous, matchCount) { - if (this.supportsIntegratedFind) { - this.externalServices.updateFindControlState( - {result: state, findPrevious: previous}); - } else { - this.findBar.updateUIState(state, previous, matchCount); - } - }.bind(this); - this.pdfViewer.setFindController(this.findController); - - // FIXME better PDFFindBar constructor parameters - var findBarConfig = Object.create(appConfig.findBar); - findBarConfig.findController = this.findController; - findBarConfig.eventBus = this.eventBus; - this.findBar = new PDFFindBar(findBarConfig); - - this.overlayManager = OverlayManager; - - this.handTool = new HandTool({ - container: container, - eventBus: this.eventBus, + self.initialized = true; }); + }, - this.pdfDocumentProperties = - new PDFDocumentProperties(appConfig.documentProperties); - - this.toolbar = new Toolbar(appConfig.toolbar, container, eventBus); - - this.secondaryToolbar = - new SecondaryToolbar(appConfig.secondaryToolbar, container, eventBus); - - if (this.supportsFullscreen) { - this.pdfPresentationMode = new PDFPresentationMode({ - container: container, - viewer: viewer, - pdfViewer: this.pdfViewer, - eventBus: this.eventBus, - contextMenuItems: appConfig.fullscreen - }); - } - - this.passwordPrompt = new PasswordPrompt(appConfig.passwordOverlay); - - this.pdfOutlineViewer = new PDFOutlineViewer({ - container: appConfig.sidebar.outlineView, - eventBus: this.eventBus, - linkService: pdfLinkService, - }); - - this.pdfAttachmentViewer = new PDFAttachmentViewer({ - container: appConfig.sidebar.attachmentsView, - eventBus: this.eventBus, - downloadManager: downloadManager - }); - - // FIXME better PDFSidebar constructor parameters - var sidebarConfig = Object.create(appConfig.sidebar); - sidebarConfig.pdfViewer = this.pdfViewer; - sidebarConfig.pdfThumbnailViewer = this.pdfThumbnailViewer; - sidebarConfig.pdfOutlineViewer = this.pdfOutlineViewer; - sidebarConfig.eventBus = this.eventBus; - this.pdfSidebar = new PDFSidebar(sidebarConfig); - this.pdfSidebar.onToggled = this.forceRendering.bind(this); - + /** + * @private + */ + _readPreferences: function () { var self = this; var PDFJS = pdfjsLib.PDFJS; - var initializedPromise = Promise.all([ + + return Promise.all([ Preferences.get('enableWebGL').then(function resolved(value) { PDFJS.disableWebGL = !value; }), @@ -401,16 +303,132 @@ var PDFViewerApplication = { }), // 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; - } + /** + * @private + */ + _initializeViewerComponents: function () { + var appConfig = this.appConfig; - self.initialized = true; + var eventBus = appConfig.eventBus || getGlobalEventBus(); + this.eventBus = eventBus; + this.bindEvents(); + + var pdfRenderingQueue = new PDFRenderingQueue(); + pdfRenderingQueue.onIdle = this.cleanup.bind(this); + this.pdfRenderingQueue = pdfRenderingQueue; + + var pdfLinkService = new PDFLinkService({ + eventBus: eventBus }); + this.pdfLinkService = pdfLinkService; + + var downloadManager = this.externalServices.createDownloadManager(); + this.downloadManager = downloadManager; + + var container = appConfig.mainContainer; + var viewer = appConfig.viewerContainer; + this.pdfViewer = new PDFViewer({ + container: container, + viewer: viewer, + eventBus: eventBus, + renderingQueue: pdfRenderingQueue, + linkService: pdfLinkService, + downloadManager: downloadManager, + enhanceTextSelection: false, + renderInteractiveForms: false, + }); + pdfRenderingQueue.setViewer(this.pdfViewer); + pdfLinkService.setViewer(this.pdfViewer); + + var thumbnailContainer = appConfig.sidebar.thumbnailView; + this.pdfThumbnailViewer = new PDFThumbnailViewer({ + container: thumbnailContainer, + renderingQueue: pdfRenderingQueue, + linkService: pdfLinkService + }); + pdfRenderingQueue.setThumbnailViewer(this.pdfThumbnailViewer); + + this.pdfHistory = new PDFHistory({ + linkService: pdfLinkService, + eventBus: this.eventBus + }); + pdfLinkService.setHistory(this.pdfHistory); + + this.findController = new PDFFindController({ + pdfViewer: this.pdfViewer + }); + this.findController.onUpdateResultsCount = function (matchCount) { + if (this.supportsIntegratedFind) { + return; + } + this.findBar.updateResultsCount(matchCount); + }.bind(this); + this.findController.onUpdateState = function (state, previous, matchCount) { + if (this.supportsIntegratedFind) { + this.externalServices.updateFindControlState( + {result: state, findPrevious: previous}); + } else { + this.findBar.updateUIState(state, previous, matchCount); + } + }.bind(this); + + this.pdfViewer.setFindController(this.findController); + + // FIXME better PDFFindBar constructor parameters + var findBarConfig = Object.create(appConfig.findBar); + findBarConfig.findController = this.findController; + findBarConfig.eventBus = this.eventBus; + this.findBar = new PDFFindBar(findBarConfig); + + this.overlayManager = OverlayManager; + + this.handTool = new HandTool({ + container: container, + eventBus: this.eventBus, + }); + + this.pdfDocumentProperties = + new PDFDocumentProperties(appConfig.documentProperties); + + this.toolbar = new Toolbar(appConfig.toolbar, container, eventBus); + + this.secondaryToolbar = + new SecondaryToolbar(appConfig.secondaryToolbar, container, eventBus); + + if (this.supportsFullscreen) { + this.pdfPresentationMode = new PDFPresentationMode({ + container: container, + viewer: viewer, + pdfViewer: this.pdfViewer, + eventBus: this.eventBus, + contextMenuItems: appConfig.fullscreen + }); + } + + this.passwordPrompt = new PasswordPrompt(appConfig.passwordOverlay); + + this.pdfOutlineViewer = new PDFOutlineViewer({ + container: appConfig.sidebar.outlineView, + eventBus: this.eventBus, + linkService: pdfLinkService, + }); + + this.pdfAttachmentViewer = new PDFAttachmentViewer({ + container: appConfig.sidebar.attachmentsView, + eventBus: this.eventBus, + downloadManager: downloadManager + }); + + // FIXME better PDFSidebar constructor parameters + var sidebarConfig = Object.create(appConfig.sidebar); + sidebarConfig.pdfViewer = this.pdfViewer; + sidebarConfig.pdfThumbnailViewer = this.pdfThumbnailViewer; + sidebarConfig.pdfOutlineViewer = this.pdfOutlineViewer; + sidebarConfig.eventBus = this.eventBus; + this.pdfSidebar = new PDFSidebar(sidebarConfig); + this.pdfSidebar.onToggled = this.forceRendering.bind(this); }, run: function pdfViewRun(config) {