Merge pull request #7586 from Snuffleupagus/viewer-initialize-Preferences-earlier

Move the `Preferences` initialization/fetching code to the top of `PDFViewerApplication.initialize`, and add a `enhanceTextSelection` preference to the viewer
This commit is contained in:
Tim van der Meij 2016-09-03 18:55:24 +02:00 committed by GitHub
commit 461a18a74a
4 changed files with 141 additions and 127 deletions

View File

@ -94,6 +94,10 @@
"type": "boolean", "type": "boolean",
"description": "Whether to prevent the extension from reporting the extension and browser version to the extension developers.", "description": "Whether to prevent the extension from reporting the extension and browser version to the extension developers.",
"default": false "default": false
},
"enhanceTextSelection": {
"type": "boolean",
"default": false
} }
} }
} }

View File

@ -101,7 +101,6 @@ var SCALE_SELECT_CONTAINER_PADDING = 8;
var SCALE_SELECT_PADDING = 22; var SCALE_SELECT_PADDING = 22;
var PAGE_NUMBER_LOADING_INDICATOR = 'visiblePageIsLoading'; var PAGE_NUMBER_LOADING_INDICATOR = 'visiblePageIsLoading';
var DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT = 5000; var DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT = 5000;
var ENHANCE_TEXT_SELECTION = false;
function configure(PDFJS) { function configure(PDFJS) {
PDFJS.imageResourcesPath = './images/'; PDFJS.imageResourcesPath = './images/';
@ -177,12 +176,79 @@ var PDFViewerApplication = {
preferencePdfBugEnabled: false, preferencePdfBugEnabled: false,
preferenceShowPreviousViewOnLoad: true, preferenceShowPreviousViewOnLoad: true,
preferenceDefaultZoomValue: '', preferenceDefaultZoomValue: '',
preferenceEnhanceTextSelection: false,
isViewerEmbedded: (window.parent !== window), isViewerEmbedded: (window.parent !== window),
url: '', url: '',
externalServices: DefaultExernalServices, externalServices: DefaultExernalServices,
// called once when the document is loaded // called once when the document is loaded
initialize: function pdfViewInitialize(appConfig) { initialize: function pdfViewInitialize(appConfig) {
var self = this;
var PDFJS = pdfjsLib.PDFJS;
Preferences.initialize();
this.preferences = Preferences;
// Fetch the `Preferences` first, so that they can be used below when the
// various viewer components are initialized.
var preferencesPromise = 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) {
self.preferenceEnhanceTextSelection = 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;
}),
// TODO move more preferences and other async stuff here
]).catch(function (reason) { });
var initializedPromise = preferencesPromise.then(function () {
configure(pdfjsLib.PDFJS); configure(pdfjsLib.PDFJS);
this.appConfig = appConfig; this.appConfig = appConfig;
@ -211,7 +277,7 @@ var PDFViewerApplication = {
renderingQueue: pdfRenderingQueue, renderingQueue: pdfRenderingQueue,
linkService: pdfLinkService, linkService: pdfLinkService,
downloadManager: downloadManager, downloadManager: downloadManager,
enhanceTextSelection: ENHANCE_TEXT_SELECTION, enhanceTextSelection: this.preferenceEnhanceTextSelection,
}); });
pdfRenderingQueue.setViewer(this.pdfViewer); pdfRenderingQueue.setViewer(this.pdfViewer);
pdfLinkService.setViewer(this.pdfViewer); pdfLinkService.setViewer(this.pdfViewer);
@ -224,9 +290,6 @@ var PDFViewerApplication = {
}); });
pdfRenderingQueue.setThumbnailViewer(this.pdfThumbnailViewer); pdfRenderingQueue.setThumbnailViewer(this.pdfThumbnailViewer);
Preferences.initialize();
this.preferences = Preferences;
this.pdfHistory = new PDFHistory({ this.pdfHistory = new PDFHistory({
linkService: pdfLinkService, linkService: pdfLinkService,
eventBus: this.eventBus eventBus: this.eventBus
@ -242,7 +305,8 @@ var PDFViewerApplication = {
} }
this.findBar.updateResultsCount(matchCount); this.findBar.updateResultsCount(matchCount);
}.bind(this); }.bind(this);
this.findController.onUpdateState = function (state, previous, matchCount) { this.findController.onUpdateState = function (state, previous,
matchCount) {
if (this.supportsIntegratedFind) { if (this.supportsIntegratedFind) {
this.externalServices.updateFindControlState( this.externalServices.updateFindControlState(
{result: state, findPrevious: previous}); {result: state, findPrevious: previous});
@ -305,62 +369,7 @@ var PDFViewerApplication = {
this.pdfSidebar = new PDFSidebar(sidebarConfig); this.pdfSidebar = new PDFSidebar(sidebarConfig);
this.pdfSidebar.onToggled = this.forceRendering.bind(this); this.pdfSidebar.onToggled = this.forceRendering.bind(this);
var self = this; }.bind(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('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;
}),
// TODO move more preferences and other async stuff here
]).catch(function (reason) { });
return initializedPromise.then(function () { return initializedPromise.then(function () {
if (self.isViewerEmbedded && !PDFJS.isExternalLinkTargetSet()) { if (self.isViewerEmbedded && !PDFJS.isExternalLinkTargetSet()) {

View File

@ -11,5 +11,6 @@
"disableFontFace": false, "disableFontFace": false,
"disableTextLayer": false, "disableTextLayer": false,
"useOnlyCssZoom": false, "useOnlyCssZoom": false,
"externalLinkTarget": 0 "externalLinkTarget": 0,
"enhanceTextSelection": false
} }

View File

@ -36,7 +36,7 @@
* @property {PageViewport} viewport - The viewport of the text layer. * @property {PageViewport} viewport - The viewport of the text layer.
* @property {PDFFindController} findController * @property {PDFFindController} findController
* @property {boolean} enhanceTextSelection - Option to turn on improved * @property {boolean} enhanceTextSelection - Option to turn on improved
* text selection. * text selection. The default value is `false`.
*/ */
/** /**
@ -59,7 +59,7 @@ var TextLayerBuilder = (function TextLayerBuilderClosure() {
this.textDivs = []; this.textDivs = [];
this.findController = options.findController || null; this.findController = options.findController || null;
this.textLayerRenderTask = null; this.textLayerRenderTask = null;
this.enhanceTextSelection = options.enhanceTextSelection; this.enhanceTextSelection = options.enhanceTextSelection || false;
this._bindMouse(); this._bindMouse();
} }