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' ||
|
||||||
@ -1709,14 +1749,8 @@ function webViewerResize() {
|
|||||||
PDFViewerApplication.pdfViewer.currentScaleValue = DEFAULT_SCALE_VALUE;
|
PDFViewerApplication.pdfViewer.currentScaleValue = DEFAULT_SCALE_VALUE;
|
||||||
}
|
}
|
||||||
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) {
|
||||||
var hash = e.hash;
|
var hash = e.hash;
|
||||||
@ -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