Browse Source

Refactor `PDFViewerApplication.initialize` into two methods, one that reads the Preferences and one that initializes the various viewer components

Jonas Jenwald 8 years ago
parent
commit
2c1436f6cb
  1. 212
      web/app.js

212
web/app.js

@ -193,9 +193,124 @@ var PDFViewerApplication = { @@ -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 = { @@ -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 = { @@ -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) {

Loading…
Cancel
Save