Refactor PDFViewerApplication.initialize
into two methods, one that reads the Preferences and one that initializes the various viewer components
This commit is contained in:
parent
7d8fa1385d
commit
2c1436f6cb
262
web/app.js
262
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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user