Merge pull request #7886 from Snuffleupagus/viewer-async-initialization
Move the `Preferences` initialization/fetching code to the top of `PDFViewerApplication.initialize`, to enable using them when initializing e.g. the viewer components
This commit is contained in:
		
						commit
						b629be05bd
					
				
							
								
								
									
										441
									
								
								web/app.js
									
									
									
									
									
								
							
							
						
						
									
										441
									
								
								web/app.js
									
									
									
									
									
								
							| @ -181,11 +181,16 @@ var PDFViewerApplication = { | |||||||
|   eventBus: null, |   eventBus: null, | ||||||
|   pageRotation: 0, |   pageRotation: 0, | ||||||
|   isInitialViewSet: false, |   isInitialViewSet: false, | ||||||
|   preferenceSidebarViewOnLoad: SidebarView.NONE, |   viewerPrefs: { | ||||||
|   preferencePdfBugEnabled: false, |     sidebarViewOnLoad: SidebarView.NONE, | ||||||
|   preferenceShowPreviousViewOnLoad: true, |     pdfBugEnabled: false, | ||||||
|   preferenceDefaultZoomValue: '', |     showPreviousViewOnLoad: true, | ||||||
|   preferenceDisablePageLabels: false, |     defaultZoomValue: '', | ||||||
|  |     disablePageLabels: false, | ||||||
|  |     renderer: 'canvas', | ||||||
|  |     enhanceTextSelection: false, | ||||||
|  |     renderInteractiveForms: false, | ||||||
|  |   }, | ||||||
|   isViewerEmbedded: (window.parent !== window), |   isViewerEmbedded: (window.parent !== window), | ||||||
|   url: '', |   url: '', | ||||||
|   baseUrl: '', |   baseUrl: '', | ||||||
| @ -193,160 +198,66 @@ var PDFViewerApplication = { | |||||||
| 
 | 
 | ||||||
|   // called once when the document is loaded
 |   // called once when the document is loaded
 | ||||||
|   initialize: function pdfViewInitialize(appConfig) { |   initialize: function pdfViewInitialize(appConfig) { | ||||||
|     configure(pdfjsLib.PDFJS); |     var self = this; | ||||||
|     this.appConfig = appConfig; |     var PDFJS = pdfjsLib.PDFJS; | ||||||
| 
 |  | ||||||
|     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(); |     Preferences.initialize(); | ||||||
|     this.preferences = Preferences; |     this.preferences = Preferences; | ||||||
| 
 | 
 | ||||||
|     this.pdfHistory = new PDFHistory({ |     configure(PDFJS); | ||||||
|       linkService: pdfLinkService, |     this.appConfig = appConfig; | ||||||
|       eventBus: this.eventBus |  | ||||||
|     }); |  | ||||||
|     pdfLinkService.setHistory(this.pdfHistory); |  | ||||||
| 
 | 
 | ||||||
|     this.findController = new PDFFindController({ |     return this._readPreferences().then(function () { | ||||||
|       pdfViewer: this.pdfViewer |       return self._initializeViewerComponents(); | ||||||
|     }); |     }).then(function () { | ||||||
|     this.findController.onUpdateResultsCount = function (matchCount) { |       // Bind the various event handlers *after* the viewer has been
 | ||||||
|       if (this.supportsIntegratedFind) { |       // initialized, to prevent errors if an event arrives too soon.
 | ||||||
|         return; |       self.bindEvents(); | ||||||
|       } |       self.bindWindowEvents(); | ||||||
|       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); |       if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) { | ||||||
| 
 |         // For backwards compatibility, we dispatch the 'localized' event on
 | ||||||
|     // FIXME better PDFFindBar constructor parameters
 |         // the `eventBus` once the viewer has been initialized.
 | ||||||
|     var findBarConfig = Object.create(appConfig.findBar); |         localized.then(function () { | ||||||
|     findBarConfig.findController = this.findController; |           self.eventBus.dispatch('localized'); | ||||||
|     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); |       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.pdfOutlineViewer = new PDFOutlineViewer({ |       self.initialized = true; | ||||||
|       container: appConfig.sidebar.outlineView, |  | ||||||
|       eventBus: this.eventBus, |  | ||||||
|       linkService: pdfLinkService, |  | ||||||
|     }); |     }); | ||||||
|  |   }, | ||||||
| 
 | 
 | ||||||
|     this.pdfAttachmentViewer = new PDFAttachmentViewer({ |   /** | ||||||
|       container: appConfig.sidebar.attachmentsView, |    * @private | ||||||
|       eventBus: this.eventBus, |    */ | ||||||
|       downloadManager: downloadManager |   _readPreferences: function () { | ||||||
|     }); |  | ||||||
| 
 |  | ||||||
|     // 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); |  | ||||||
| 
 |  | ||||||
|     var self = this; |     var self = this; | ||||||
|     var PDFJS = pdfjsLib.PDFJS; |     var PDFJS = pdfjsLib.PDFJS; | ||||||
|     var initializedPromise = Promise.all([ | 
 | ||||||
|  |     return Promise.all([ | ||||||
|       Preferences.get('enableWebGL').then(function resolved(value) { |       Preferences.get('enableWebGL').then(function resolved(value) { | ||||||
|         PDFJS.disableWebGL = !value; |         PDFJS.disableWebGL = !value; | ||||||
|       }), |       }), | ||||||
|       Preferences.get('sidebarViewOnLoad').then(function resolved(value) { |       Preferences.get('sidebarViewOnLoad').then(function resolved(value) { | ||||||
|         self.preferenceSidebarViewOnLoad = value; |         self.viewerPrefs['sidebarViewOnLoad'] = value; | ||||||
|       }), |       }), | ||||||
|       Preferences.get('pdfBugEnabled').then(function resolved(value) { |       Preferences.get('pdfBugEnabled').then(function resolved(value) { | ||||||
|         self.preferencePdfBugEnabled = value; |         self.viewerPrefs['pdfBugEnabled'] = value; | ||||||
|       }), |       }), | ||||||
|       Preferences.get('showPreviousViewOnLoad').then(function resolved(value) { |       Preferences.get('showPreviousViewOnLoad').then(function resolved(value) { | ||||||
|         self.preferenceShowPreviousViewOnLoad = value; |         self.viewerPrefs['showPreviousViewOnLoad'] = value; | ||||||
|       }), |       }), | ||||||
|       Preferences.get('defaultZoomValue').then(function resolved(value) { |       Preferences.get('defaultZoomValue').then(function resolved(value) { | ||||||
|         self.preferenceDefaultZoomValue = value; |         self.viewerPrefs['defaultZoomValue'] = value; | ||||||
|       }), |       }), | ||||||
|       Preferences.get('enhanceTextSelection').then(function resolved(value) { |       Preferences.get('enhanceTextSelection').then(function resolved(value) { | ||||||
|         // TODO: Move the initialization and fetching of `Preferences` to occur
 |         self.viewerPrefs['enhanceTextSelection'] = value; | ||||||
|         //       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) { |       Preferences.get('disableTextLayer').then(function resolved(value) { | ||||||
|         if (PDFJS.disableTextLayer === true) { |         if (PDFJS.disableTextLayer === true) { | ||||||
| @ -385,31 +296,146 @@ var PDFViewerApplication = { | |||||||
|         PDFJS.externalLinkTarget = value; |         PDFJS.externalLinkTarget = value; | ||||||
|       }), |       }), | ||||||
|       Preferences.get('renderer').then(function resolved(value) { |       Preferences.get('renderer').then(function resolved(value) { | ||||||
|         // TODO: Like the `enhanceTextSelection` preference, move the
 |         self.viewerPrefs['renderer'] = value; | ||||||
|         //       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) { |       Preferences.get('renderInteractiveForms').then(function resolved(value) { | ||||||
|         // TODO: Like the `enhanceTextSelection` preference, move the
 |         self.viewerPrefs['renderInteractiveForms'] = value; | ||||||
|         //       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) { |       Preferences.get('disablePageLabels').then(function resolved(value) { | ||||||
|         self.preferenceDisablePageLabels = value; |         self.viewerPrefs['disablePageLabels'] = value; | ||||||
|       }), |       }), | ||||||
|       // TODO move more preferences and other async stuff here
 |  | ||||||
|     ]).catch(function (reason) { }); |     ]).catch(function (reason) { }); | ||||||
|  |   }, | ||||||
| 
 | 
 | ||||||
|     return initializedPromise.then(function () { |   /** | ||||||
|       if (self.isViewerEmbedded && !PDFJS.isExternalLinkTargetSet()) { |    * @private | ||||||
|         // Prevent external links from "replacing" the viewer,
 |    */ | ||||||
|         // when it's embedded in e.g. an iframe or an object.
 |   _initializeViewerComponents: function () { | ||||||
|         PDFJS.externalLinkTarget = PDFJS.LinkTarget.TOP; |     var self = this; | ||||||
|  |     var appConfig = this.appConfig; | ||||||
|  | 
 | ||||||
|  |     return new Promise(function (resolve, reject) { | ||||||
|  |       var eventBus = appConfig.eventBus || getGlobalEventBus(); | ||||||
|  |       self.eventBus = eventBus; | ||||||
|  | 
 | ||||||
|  |       var pdfRenderingQueue = new PDFRenderingQueue(); | ||||||
|  |       pdfRenderingQueue.onIdle = self.cleanup.bind(self); | ||||||
|  |       self.pdfRenderingQueue = pdfRenderingQueue; | ||||||
|  | 
 | ||||||
|  |       var pdfLinkService = new PDFLinkService({ | ||||||
|  |         eventBus: eventBus | ||||||
|  |       }); | ||||||
|  |       self.pdfLinkService = pdfLinkService; | ||||||
|  | 
 | ||||||
|  |       var downloadManager = self.externalServices.createDownloadManager(); | ||||||
|  |       self.downloadManager = downloadManager; | ||||||
|  | 
 | ||||||
|  |       var container = appConfig.mainContainer; | ||||||
|  |       var viewer = appConfig.viewerContainer; | ||||||
|  |       self.pdfViewer = new PDFViewer({ | ||||||
|  |         container: container, | ||||||
|  |         viewer: viewer, | ||||||
|  |         eventBus: eventBus, | ||||||
|  |         renderingQueue: pdfRenderingQueue, | ||||||
|  |         linkService: pdfLinkService, | ||||||
|  |         downloadManager: downloadManager, | ||||||
|  |         renderer: self.viewerPrefs['renderer'], | ||||||
|  |         enhanceTextSelection: self.viewerPrefs['enhanceTextSelection'], | ||||||
|  |         renderInteractiveForms: self.viewerPrefs['renderInteractiveForms'], | ||||||
|  |       }); | ||||||
|  |       pdfRenderingQueue.setViewer(self.pdfViewer); | ||||||
|  |       pdfLinkService.setViewer(self.pdfViewer); | ||||||
|  | 
 | ||||||
|  |       var thumbnailContainer = appConfig.sidebar.thumbnailView; | ||||||
|  |       self.pdfThumbnailViewer = new PDFThumbnailViewer({ | ||||||
|  |         container: thumbnailContainer, | ||||||
|  |         renderingQueue: pdfRenderingQueue, | ||||||
|  |         linkService: pdfLinkService, | ||||||
|  |       }); | ||||||
|  |       pdfRenderingQueue.setThumbnailViewer(self.pdfThumbnailViewer); | ||||||
|  | 
 | ||||||
|  |       self.pdfHistory = new PDFHistory({ | ||||||
|  |         linkService: pdfLinkService, | ||||||
|  |         eventBus: eventBus, | ||||||
|  |       }); | ||||||
|  |       pdfLinkService.setHistory(self.pdfHistory); | ||||||
|  | 
 | ||||||
|  |       self.findController = new PDFFindController({ | ||||||
|  |         pdfViewer: self.pdfViewer, | ||||||
|  |       }); | ||||||
|  |       self.findController.onUpdateResultsCount = function (matchCount) { | ||||||
|  |         if (self.supportsIntegratedFind) { | ||||||
|  |           return; | ||||||
|  |         } | ||||||
|  |         self.findBar.updateResultsCount(matchCount); | ||||||
|  |       }; | ||||||
|  |       self.findController.onUpdateState = function (state, previous, | ||||||
|  |                                                     matchCount) { | ||||||
|  |         if (self.supportsIntegratedFind) { | ||||||
|  |           self.externalServices.updateFindControlState( | ||||||
|  |             {result: state, findPrevious: previous}); | ||||||
|  |         } else { | ||||||
|  |           self.findBar.updateUIState(state, previous, matchCount); | ||||||
|  |         } | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       self.pdfViewer.setFindController(self.findController); | ||||||
|  | 
 | ||||||
|  |       // FIXME better PDFFindBar constructor parameters
 | ||||||
|  |       var findBarConfig = Object.create(appConfig.findBar); | ||||||
|  |       findBarConfig.findController = self.findController; | ||||||
|  |       findBarConfig.eventBus = eventBus; | ||||||
|  |       self.findBar = new PDFFindBar(findBarConfig); | ||||||
|  | 
 | ||||||
|  |       self.overlayManager = OverlayManager; | ||||||
|  | 
 | ||||||
|  |       self.handTool = new HandTool({ | ||||||
|  |         container: container, | ||||||
|  |         eventBus: eventBus, | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       self.pdfDocumentProperties = | ||||||
|  |         new PDFDocumentProperties(appConfig.documentProperties); | ||||||
|  | 
 | ||||||
|  |       self.toolbar = new Toolbar(appConfig.toolbar, container, eventBus); | ||||||
|  | 
 | ||||||
|  |       self.secondaryToolbar = | ||||||
|  |         new SecondaryToolbar(appConfig.secondaryToolbar, container, eventBus); | ||||||
|  | 
 | ||||||
|  |       if (self.supportsFullscreen) { | ||||||
|  |         self.pdfPresentationMode = new PDFPresentationMode({ | ||||||
|  |           container: container, | ||||||
|  |           viewer: viewer, | ||||||
|  |           pdfViewer: self.pdfViewer, | ||||||
|  |           eventBus: eventBus, | ||||||
|  |           contextMenuItems: appConfig.fullscreen | ||||||
|  |         }); | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|       self.initialized = true; |       self.passwordPrompt = new PasswordPrompt(appConfig.passwordOverlay); | ||||||
|  | 
 | ||||||
|  |       self.pdfOutlineViewer = new PDFOutlineViewer({ | ||||||
|  |         container: appConfig.sidebar.outlineView, | ||||||
|  |         eventBus: eventBus, | ||||||
|  |         linkService: pdfLinkService, | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       self.pdfAttachmentViewer = new PDFAttachmentViewer({ | ||||||
|  |         container: appConfig.sidebar.attachmentsView, | ||||||
|  |         eventBus: eventBus, | ||||||
|  |         downloadManager: downloadManager, | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       // FIXME better PDFSidebar constructor parameters
 | ||||||
|  |       var sidebarConfig = Object.create(appConfig.sidebar); | ||||||
|  |       sidebarConfig.pdfViewer = self.pdfViewer; | ||||||
|  |       sidebarConfig.pdfThumbnailViewer = self.pdfThumbnailViewer; | ||||||
|  |       sidebarConfig.pdfOutlineViewer = self.pdfOutlineViewer; | ||||||
|  |       sidebarConfig.eventBus = eventBus; | ||||||
|  |       self.pdfSidebar = new PDFSidebar(sidebarConfig); | ||||||
|  |       self.pdfSidebar.onToggled = self.forceRendering.bind(self); | ||||||
|  | 
 | ||||||
|  |       resolve(undefined); | ||||||
|     }); |     }); | ||||||
|   }, |   }, | ||||||
| 
 | 
 | ||||||
| @ -912,7 +938,7 @@ var PDFViewerApplication = { | |||||||
|       if (!pdfjsLib.PDFJS.disableHistory && !self.isViewerEmbedded) { |       if (!pdfjsLib.PDFJS.disableHistory && !self.isViewerEmbedded) { | ||||||
|         // The browsing history is only enabled when the viewer is standalone,
 |         // The browsing history is only enabled when the viewer is standalone,
 | ||||||
|         // i.e. not when it is embedded in a web page.
 |         // i.e. not when it is embedded in a web page.
 | ||||||
|         if (!self.preferenceShowPreviousViewOnLoad) { |         if (!self.viewerPrefs['showPreviousViewOnLoad']) { | ||||||
|           self.pdfHistory.clearHistoryState(); |           self.pdfHistory.clearHistoryState(); | ||||||
|         } |         } | ||||||
|         self.pdfHistory.initialize(self.documentFingerprint); |         self.pdfHistory.initialize(self.documentFingerprint); | ||||||
| @ -932,10 +958,10 @@ var PDFViewerApplication = { | |||||||
| 
 | 
 | ||||||
|       store.initializedPromise.then(function resolved() { |       store.initializedPromise.then(function resolved() { | ||||||
|         var storedHash = null, sidebarView = null; |         var storedHash = null, sidebarView = null; | ||||||
|         if (self.preferenceShowPreviousViewOnLoad && |         if (self.viewerPrefs['showPreviousViewOnLoad'] && | ||||||
|             store.get('exists', false)) { |             store.get('exists', false)) { | ||||||
|           var pageNum = store.get('page', '1'); |           var pageNum = store.get('page', '1'); | ||||||
|           var zoom = self.preferenceDefaultZoomValue || |           var zoom = self.viewerPrefs['defaultZoomValue'] || | ||||||
|                      store.get('zoom', DEFAULT_SCALE_VALUE); |                      store.get('zoom', DEFAULT_SCALE_VALUE); | ||||||
|           var left = store.get('scrollLeft', '0'); |           var left = store.get('scrollLeft', '0'); | ||||||
|           var top = store.get('scrollTop', '0'); |           var top = store.get('scrollTop', '0'); | ||||||
| @ -944,8 +970,8 @@ var PDFViewerApplication = { | |||||||
|                        left + ',' + top; |                        left + ',' + top; | ||||||
| 
 | 
 | ||||||
|           sidebarView = store.get('sidebarView', SidebarView.NONE); |           sidebarView = store.get('sidebarView', SidebarView.NONE); | ||||||
|         } else if (self.preferenceDefaultZoomValue) { |         } else if (self.viewerPrefs['defaultZoomValue']) { | ||||||
|           storedHash = 'page=1&zoom=' + self.preferenceDefaultZoomValue; |           storedHash = 'page=1&zoom=' + self.viewerPrefs['defaultZoomValue']; | ||||||
|         } |         } | ||||||
|         self.setInitialView(storedHash, |         self.setInitialView(storedHash, | ||||||
|           { scale: scale, sidebarView: sidebarView }); |           { scale: scale, sidebarView: sidebarView }); | ||||||
| @ -981,7 +1007,7 @@ var PDFViewerApplication = { | |||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     pdfDocument.getPageLabels().then(function (labels) { |     pdfDocument.getPageLabels().then(function (labels) { | ||||||
|       if (!labels || self.preferenceDisablePageLabels) { |       if (!labels || self.viewerPrefs['disablePageLabels']) { | ||||||
|         return; |         return; | ||||||
|       } |       } | ||||||
|       var i = 0, numLabels = labels.length; |       var i = 0, numLabels = labels.length; | ||||||
| @ -1111,7 +1137,7 @@ var PDFViewerApplication = { | |||||||
| 
 | 
 | ||||||
|     this.isInitialViewSet = true; |     this.isInitialViewSet = true; | ||||||
| 
 | 
 | ||||||
|     this.pdfSidebar.setInitialView(this.preferenceSidebarViewOnLoad || |     this.pdfSidebar.setInitialView(this.viewerPrefs['sidebarViewOnLoad'] || | ||||||
|                                    (sidebarView | 0)); |                                    (sidebarView | 0)); | ||||||
| 
 | 
 | ||||||
|     if (this.initialDestination) { |     if (this.initialDestination) { | ||||||
| @ -1277,7 +1303,41 @@ var PDFViewerApplication = { | |||||||
|     if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) { |     if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) { | ||||||
|       eventBus.on('fileinputchange', webViewerFileInputChange); |       eventBus.on('fileinputchange', webViewerFileInputChange); | ||||||
|     } |     } | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   bindWindowEvents: function pdfViewBindWindowEvents() { | ||||||
|  |     var eventBus = this.eventBus; | ||||||
|  | 
 | ||||||
|  |     window.addEventListener('wheel', webViewerWheel); | ||||||
|  |     window.addEventListener('click', webViewerClick); | ||||||
|  |     window.addEventListener('keydown', webViewerKeyDown); | ||||||
|  | 
 | ||||||
|  |     window.addEventListener('resize', function windowResize() { | ||||||
|  |       eventBus.dispatch('resize'); | ||||||
|  |     }); | ||||||
|  |     window.addEventListener('hashchange', function windowHashChange() { | ||||||
|  |       eventBus.dispatch('hashchange', { | ||||||
|  |         hash: document.location.hash.substring(1), | ||||||
|  |       }); | ||||||
|  |     }); | ||||||
|  |     window.addEventListener('beforeprint', function windowBeforePrint() { | ||||||
|  |       eventBus.dispatch('beforeprint'); | ||||||
|  |     }); | ||||||
|  |     window.addEventListener('afterprint', function windowAfterPrint() { | ||||||
|  |       eventBus.dispatch('afterprint'); | ||||||
|  |     }); | ||||||
|  |     if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) { | ||||||
|  |       window.addEventListener('change', function windowChange(evt) { | ||||||
|  |         var files = evt.target.files; | ||||||
|  |         if (!files || files.length === 0) { | ||||||
|  |           return; | ||||||
|         } |         } | ||||||
|  |         eventBus.dispatch('fileinputchange', { | ||||||
|  |           fileInput: evt.target, | ||||||
|  |         }); | ||||||
|  |       }); | ||||||
|  |     } | ||||||
|  |   }, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| var validateFileURL; | var validateFileURL; | ||||||
| @ -1368,7 +1428,7 @@ function webViewerInitialized() { | |||||||
|   var PDFJS = pdfjsLib.PDFJS; |   var PDFJS = pdfjsLib.PDFJS; | ||||||
| 
 | 
 | ||||||
|   if ((typeof PDFJSDev === 'undefined' || !PDFJSDev.test('PRODUCTION')) || |   if ((typeof PDFJSDev === 'undefined' || !PDFJSDev.test('PRODUCTION')) || | ||||||
|       PDFViewerApplication.preferencePdfBugEnabled) { |       PDFViewerApplication.viewerPrefs['pdfBugEnabled']) { | ||||||
|     // Special debugging flags in the hash section of the URL.
 |     // Special debugging flags in the hash section of the URL.
 | ||||||
|     var hash = document.location.hash.substring(1); |     var hash = document.location.hash.substring(1); | ||||||
|     var hashParams = parseQueryString(hash); |     var hashParams = parseQueryString(hash); | ||||||
| @ -1582,9 +1642,6 @@ function webViewerTextLayerRendered(e) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function webViewerPageMode(e) { | function webViewerPageMode(e) { | ||||||
|   if (!PDFViewerApplication.initialized) { |  | ||||||
|     return; |  | ||||||
|   } |  | ||||||
|   // Handle the 'pagemode' hash parameter, see also `PDFLinkService_setHash`.
 |   // Handle the 'pagemode' hash parameter, see also `PDFLinkService_setHash`.
 | ||||||
|   var mode = e.mode, view; |   var mode = e.mode, view; | ||||||
|   switch (mode) { |   switch (mode) { | ||||||
| @ -1609,9 +1666,6 @@ function webViewerPageMode(e) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function webViewerNamedAction(e) { | function webViewerNamedAction(e) { | ||||||
|   if (!PDFViewerApplication.initialized) { |  | ||||||
|     return; |  | ||||||
|   } |  | ||||||
|   // Processing couple of named actions that might be useful.
 |   // Processing couple of named actions that might be useful.
 | ||||||
|   // See also PDFLinkService.executeNamedAction
 |   // See also PDFLinkService.executeNamedAction
 | ||||||
|   var action = e.action; |   var action = e.action; | ||||||
| @ -1637,9 +1691,6 @@ function webViewerPresentationModeChanged(e) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function webViewerSidebarViewChanged(e) { | function webViewerSidebarViewChanged(e) { | ||||||
|   if (!PDFViewerApplication.initialized) { |  | ||||||
|     return; |  | ||||||
|   } |  | ||||||
|   PDFViewerApplication.pdfRenderingQueue.isThumbnailViewEnabled = |   PDFViewerApplication.pdfRenderingQueue.isThumbnailViewEnabled = | ||||||
|     PDFViewerApplication.pdfSidebar.isThumbnailViewVisible; |     PDFViewerApplication.pdfSidebar.isThumbnailViewVisible; | ||||||
| 
 | 
 | ||||||
| @ -1654,9 +1705,6 @@ function webViewerSidebarViewChanged(e) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function webViewerUpdateViewarea(e) { | function webViewerUpdateViewarea(e) { | ||||||
|   if (!PDFViewerApplication.initialized) { |  | ||||||
|     return; |  | ||||||
|   } |  | ||||||
|   var location = e.location, store = PDFViewerApplication.store; |   var location = e.location, store = PDFViewerApplication.store; | ||||||
| 
 | 
 | ||||||
|   if (store) { |   if (store) { | ||||||
| @ -1687,15 +1735,7 @@ function webViewerUpdateViewarea(e) { | |||||||
|   PDFViewerApplication.toolbar.updateLoadingIndicatorState(loading); |   PDFViewerApplication.toolbar.updateLoadingIndicatorState(loading); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| window.addEventListener('resize', function webViewerResize(evt) { |  | ||||||
|   if (!PDFViewerApplication.eventBus) { |  | ||||||
|     return; |  | ||||||
|   } |  | ||||||
|   PDFViewerApplication.eventBus.dispatch('resize'); |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| function webViewerResize() { | function webViewerResize() { | ||||||
|   if (PDFViewerApplication.initialized) { |  | ||||||
|   var currentScaleValue = PDFViewerApplication.pdfViewer.currentScaleValue; |   var currentScaleValue = PDFViewerApplication.pdfViewer.currentScaleValue; | ||||||
|   if (currentScaleValue === 'auto' || |   if (currentScaleValue === 'auto' || | ||||||
|       currentScaleValue === 'page-fit' || |       currentScaleValue === 'page-fit' || | ||||||
| @ -1710,12 +1750,6 @@ function webViewerResize() { | |||||||
|   } |   } | ||||||
|   PDFViewerApplication.pdfViewer.update(); |   PDFViewerApplication.pdfViewer.update(); | ||||||
| } | } | ||||||
| } |  | ||||||
| 
 |  | ||||||
| window.addEventListener('hashchange', function webViewerHashchange(evt) { |  | ||||||
|   var hash = document.location.hash.substring(1); |  | ||||||
|   PDFViewerApplication.eventBus.dispatch('hashchange', {hash: hash}); |  | ||||||
| }); |  | ||||||
| 
 | 
 | ||||||
| function webViewerHashchange(e) { | function webViewerHashchange(e) { | ||||||
|   if (PDFViewerApplication.pdfHistory.isHashChangeUnlocked) { |   if (PDFViewerApplication.pdfHistory.isHashChangeUnlocked) { | ||||||
| @ -1733,15 +1767,6 @@ function webViewerHashchange(e) { | |||||||
| 
 | 
 | ||||||
| var webViewerFileInputChange; | var webViewerFileInputChange; | ||||||
| if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) { | if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) { | ||||||
|   window.addEventListener('change', function webViewerChange(evt) { |  | ||||||
|     var files = evt.target.files; |  | ||||||
|     if (!files || files.length === 0) { |  | ||||||
|       return; |  | ||||||
|     } |  | ||||||
|     PDFViewerApplication.eventBus.dispatch('fileinputchange', |  | ||||||
|       {fileInput: evt.target}); |  | ||||||
|   }, true); |  | ||||||
| 
 |  | ||||||
|   webViewerFileInputChange = function webViewerFileInputChange(e) { |   webViewerFileInputChange = function webViewerFileInputChange(e) { | ||||||
|     var file = e.fileInput.files[0]; |     var file = e.fileInput.files[0]; | ||||||
| 
 | 
 | ||||||
| @ -1771,11 +1796,6 @@ if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) { | |||||||
|   }; |   }; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function webViewerLocalized() { |  | ||||||
|   document.getElementsByTagName('html')[0].dir = mozL10n.getDirection(); |  | ||||||
|   PDFViewerApplication.eventBus.dispatch('localized'); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function webViewerPresentationMode() { | function webViewerPresentationMode() { | ||||||
|   PDFViewerApplication.requestPresentationMode(); |   PDFViewerApplication.requestPresentationMode(); | ||||||
| } | } | ||||||
| @ -1859,9 +1879,6 @@ function webViewerFindFromUrlHash(e) { | |||||||
| function webViewerScaleChanging(e) { | function webViewerScaleChanging(e) { | ||||||
|   PDFViewerApplication.toolbar.setPageScale(e.presetValue, e.scale); |   PDFViewerApplication.toolbar.setPageScale(e.presetValue, e.scale); | ||||||
| 
 | 
 | ||||||
|   if (!PDFViewerApplication.initialized) { |  | ||||||
|     return; |  | ||||||
|   } |  | ||||||
|   PDFViewerApplication.pdfViewer.update(); |   PDFViewerApplication.pdfViewer.update(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -1885,9 +1902,9 @@ function webViewerPageChanging(e) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| var zoomDisabled = false, zoomDisabledTimeout; | var zoomDisabled = false, zoomDisabledTimeout; | ||||||
| function handleMouseWheel(evt) { | function webViewerWheel(evt) { | ||||||
|   var pdfViewer = PDFViewerApplication.pdfViewer; |   var pdfViewer = PDFViewerApplication.pdfViewer; | ||||||
|   if (!pdfViewer || pdfViewer.isInPresentationMode) { |   if (pdfViewer.isInPresentationMode) { | ||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| @ -1937,9 +1954,7 @@ function handleMouseWheel(evt) { | |||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| window.addEventListener('wheel', handleMouseWheel); | function webViewerClick(evt) { | ||||||
| 
 |  | ||||||
| window.addEventListener('click', function click(evt) { |  | ||||||
|   if (!PDFViewerApplication.secondaryToolbar.isOpen) { |   if (!PDFViewerApplication.secondaryToolbar.isOpen) { | ||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
| @ -1949,9 +1964,9 @@ window.addEventListener('click', function click(evt) { | |||||||
|        evt.target !== appConfig.secondaryToolbar.toggleButton)) { |        evt.target !== appConfig.secondaryToolbar.toggleButton)) { | ||||||
|     PDFViewerApplication.secondaryToolbar.close(); |     PDFViewerApplication.secondaryToolbar.close(); | ||||||
|   } |   } | ||||||
| }, true); | } | ||||||
| 
 | 
 | ||||||
| window.addEventListener('keydown', function keydown(evt) { | function webViewerKeyDown(evt) { | ||||||
|   if (OverlayManager.active) { |   if (OverlayManager.active) { | ||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
| @ -2227,18 +2242,12 @@ window.addEventListener('keydown', function keydown(evt) { | |||||||
|   if (handled) { |   if (handled) { | ||||||
|     evt.preventDefault(); |     evt.preventDefault(); | ||||||
|   } |   } | ||||||
| }); | } | ||||||
| 
 | 
 | ||||||
| window.addEventListener('beforeprint', function beforePrint(evt) { | localized.then(function webViewerLocalized() { | ||||||
|   PDFViewerApplication.eventBus.dispatch('beforeprint'); |   document.getElementsByTagName('html')[0].dir = mozL10n.getDirection(); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| window.addEventListener('afterprint', function afterPrint(evt) { |  | ||||||
|   PDFViewerApplication.eventBus.dispatch('afterprint'); |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| localized.then(webViewerLocalized); |  | ||||||
| 
 |  | ||||||
| /* Abstract factory for the print service. */ | /* Abstract factory for the print service. */ | ||||||
| var PDFPrintServiceFactory = { | var PDFPrintServiceFactory = { | ||||||
|   instance: { |   instance: { | ||||||
|  | |||||||
| @ -18,17 +18,19 @@ | |||||||
| (function (root, factory) { | (function (root, factory) { | ||||||
|   if (typeof define === 'function' && define.amd) { |   if (typeof define === 'function' && define.amd) { | ||||||
|     define('pdfjs-web/hand_tool', ['exports', 'pdfjs-web/grab_to_pan', |     define('pdfjs-web/hand_tool', ['exports', 'pdfjs-web/grab_to_pan', | ||||||
|       'pdfjs-web/preferences'], factory); |       'pdfjs-web/preferences', 'pdfjs-web/ui_utils'], factory); | ||||||
|   } else if (typeof exports !== 'undefined') { |   } else if (typeof exports !== 'undefined') { | ||||||
|     factory(exports, require('./grab_to_pan.js'), require('./preferences.js')); |     factory(exports, require('./grab_to_pan.js'), require('./preferences.js'), | ||||||
|  |       require('./ui_utils.js')); | ||||||
|   } else { |   } else { | ||||||
|     factory((root.pdfjsWebHandTool = {}), root.pdfjsWebGrabToPan, |     factory((root.pdfjsWebHandTool = {}), root.pdfjsWebGrabToPan, | ||||||
|       root.pdfjsWebPreferences); |       root.pdfjsWebPreferences, root.pdfjsWebUIUtils); | ||||||
|   } |   } | ||||||
| }(this, function (exports, grabToPan, preferences) { | }(this, function (exports, grabToPan, preferences, uiUtils) { | ||||||
| 
 | 
 | ||||||
| var GrabToPan = grabToPan.GrabToPan; | var GrabToPan = grabToPan.GrabToPan; | ||||||
| var Preferences = preferences.Preferences; | var Preferences = preferences.Preferences; | ||||||
|  | var localized = uiUtils.localized; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * @typedef {Object} HandToolOptions |  * @typedef {Object} HandToolOptions | ||||||
| @ -59,13 +61,12 @@ var HandTool = (function HandToolClosure() { | |||||||
| 
 | 
 | ||||||
|     this.eventBus.on('togglehandtool', this.toggle.bind(this)); |     this.eventBus.on('togglehandtool', this.toggle.bind(this)); | ||||||
| 
 | 
 | ||||||
|     this.eventBus.on('localized', function (e) { |     Promise.all([localized, Preferences.get('enableHandToolOnLoad')]).then( | ||||||
|       Preferences.get('enableHandToolOnLoad').then(function resolved(value) { |       function resolved(values) { | ||||||
|         if (value) { |         if (values[1] === true) { | ||||||
|           this.handTool.activate(); |           this.handTool.activate(); | ||||||
|         } |         } | ||||||
|       }.bind(this), function rejected(reason) {}); |       }.bind(this)).catch(function rejected(reason) { }); | ||||||
|     }.bind(this)); |  | ||||||
| 
 | 
 | ||||||
|     this.eventBus.on('presentationmodechanged', function (e) { |     this.eventBus.on('presentationmodechanged', function (e) { | ||||||
|       if (e.switchInProgress) { |       if (e.switchInProgress) { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user