Convert the Preferences
to an ES6 class
This commit is contained in:
parent
99d35a1039
commit
c5f9193777
96
web/app.js
96
web/app.js
@ -42,7 +42,6 @@ import { PDFLinkService } from './pdf_link_service';
|
||||
import { PDFOutlineViewer } from './pdf_outline_viewer';
|
||||
import { PDFPresentationMode } from './pdf_presentation_mode';
|
||||
import { PDFThumbnailViewer } from './pdf_thumbnail_viewer';
|
||||
import { Preferences } from './preferences';
|
||||
import { SecondaryToolbar } from './secondary_toolbar';
|
||||
import { Toolbar } from './toolbar';
|
||||
import { ViewHistory } from './view_history';
|
||||
@ -75,6 +74,9 @@ var DefaultExternalServices = {
|
||||
createDownloadManager: function () {
|
||||
throw new Error('Not implemented: createDownloadManager');
|
||||
},
|
||||
createPreferences() {
|
||||
throw new Error('Not implemented: createPreferences');
|
||||
},
|
||||
supportsIntegratedFind: false,
|
||||
supportsDocumentFonts: true,
|
||||
supportsDocumentColors: true,
|
||||
@ -117,6 +119,8 @@ var PDFViewerApplication = {
|
||||
store: null,
|
||||
/** @type {DownloadManager} */
|
||||
downloadManager: null,
|
||||
/** @type {Preferences} */
|
||||
preferences: null,
|
||||
/** @type {Toolbar} */
|
||||
toolbar: null,
|
||||
/** @type {SecondaryToolbar} */
|
||||
@ -143,37 +147,34 @@ var PDFViewerApplication = {
|
||||
|
||||
// called once when the document is loaded
|
||||
initialize: function pdfViewInitialize(appConfig) {
|
||||
var self = this;
|
||||
|
||||
Preferences.initialize();
|
||||
this.preferences = Preferences;
|
||||
this.preferences = this.externalServices.createPreferences();
|
||||
|
||||
configure(PDFJS);
|
||||
this.appConfig = appConfig;
|
||||
|
||||
return this._readPreferences().then(function () {
|
||||
return self._initializeViewerComponents();
|
||||
}).then(function () {
|
||||
return this._readPreferences().then(() => {
|
||||
return this._initializeViewerComponents();
|
||||
}).then(() => {
|
||||
// Bind the various event handlers *after* the viewer has been
|
||||
// initialized, to prevent errors if an event arrives too soon.
|
||||
self.bindEvents();
|
||||
self.bindWindowEvents();
|
||||
this.bindEvents();
|
||||
this.bindWindowEvents();
|
||||
|
||||
if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {
|
||||
// For backwards compatibility, we dispatch the 'localized' event on
|
||||
// the `eventBus` once the viewer has been initialized.
|
||||
localized.then(function () {
|
||||
self.eventBus.dispatch('localized');
|
||||
localized.then(() => {
|
||||
this.eventBus.dispatch('localized');
|
||||
});
|
||||
}
|
||||
|
||||
if (self.isViewerEmbedded && !PDFJS.isExternalLinkTargetSet()) {
|
||||
if (this.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;
|
||||
this.initialized = true;
|
||||
});
|
||||
},
|
||||
|
||||
@ -181,74 +182,74 @@ var PDFViewerApplication = {
|
||||
* @private
|
||||
*/
|
||||
_readPreferences: function () {
|
||||
var self = this;
|
||||
var { preferences, viewerPrefs, } = this;
|
||||
|
||||
return Promise.all([
|
||||
Preferences.get('enableWebGL').then(function resolved(value) {
|
||||
preferences.get('enableWebGL').then(function resolved(value) {
|
||||
PDFJS.disableWebGL = !value;
|
||||
}),
|
||||
Preferences.get('sidebarViewOnLoad').then(function resolved(value) {
|
||||
self.viewerPrefs['sidebarViewOnLoad'] = value;
|
||||
preferences.get('sidebarViewOnLoad').then(function resolved(value) {
|
||||
viewerPrefs['sidebarViewOnLoad'] = value;
|
||||
}),
|
||||
Preferences.get('pdfBugEnabled').then(function resolved(value) {
|
||||
self.viewerPrefs['pdfBugEnabled'] = value;
|
||||
preferences.get('pdfBugEnabled').then(function resolved(value) {
|
||||
viewerPrefs['pdfBugEnabled'] = value;
|
||||
}),
|
||||
Preferences.get('showPreviousViewOnLoad').then(function resolved(value) {
|
||||
self.viewerPrefs['showPreviousViewOnLoad'] = value;
|
||||
preferences.get('showPreviousViewOnLoad').then(function resolved(value) {
|
||||
viewerPrefs['showPreviousViewOnLoad'] = value;
|
||||
}),
|
||||
Preferences.get('defaultZoomValue').then(function resolved(value) {
|
||||
self.viewerPrefs['defaultZoomValue'] = value;
|
||||
preferences.get('defaultZoomValue').then(function resolved(value) {
|
||||
viewerPrefs['defaultZoomValue'] = value;
|
||||
}),
|
||||
Preferences.get('enhanceTextSelection').then(function resolved(value) {
|
||||
self.viewerPrefs['enhanceTextSelection'] = value;
|
||||
preferences.get('enhanceTextSelection').then(function resolved(value) {
|
||||
viewerPrefs['enhanceTextSelection'] = value;
|
||||
}),
|
||||
Preferences.get('disableTextLayer').then(function resolved(value) {
|
||||
preferences.get('disableTextLayer').then(function resolved(value) {
|
||||
if (PDFJS.disableTextLayer === true) {
|
||||
return;
|
||||
}
|
||||
PDFJS.disableTextLayer = value;
|
||||
}),
|
||||
Preferences.get('disableRange').then(function resolved(value) {
|
||||
preferences.get('disableRange').then(function resolved(value) {
|
||||
if (PDFJS.disableRange === true) {
|
||||
return;
|
||||
}
|
||||
PDFJS.disableRange = value;
|
||||
}),
|
||||
Preferences.get('disableStream').then(function resolved(value) {
|
||||
preferences.get('disableStream').then(function resolved(value) {
|
||||
if (PDFJS.disableStream === true) {
|
||||
return;
|
||||
}
|
||||
PDFJS.disableStream = value;
|
||||
}),
|
||||
Preferences.get('disableAutoFetch').then(function resolved(value) {
|
||||
preferences.get('disableAutoFetch').then(function resolved(value) {
|
||||
PDFJS.disableAutoFetch = value;
|
||||
}),
|
||||
Preferences.get('disableFontFace').then(function resolved(value) {
|
||||
preferences.get('disableFontFace').then(function resolved(value) {
|
||||
if (PDFJS.disableFontFace === true) {
|
||||
return;
|
||||
}
|
||||
PDFJS.disableFontFace = value;
|
||||
}),
|
||||
Preferences.get('useOnlyCssZoom').then(function resolved(value) {
|
||||
preferences.get('useOnlyCssZoom').then(function resolved(value) {
|
||||
PDFJS.useOnlyCssZoom = value;
|
||||
}),
|
||||
Preferences.get('externalLinkTarget').then(function resolved(value) {
|
||||
preferences.get('externalLinkTarget').then(function resolved(value) {
|
||||
if (PDFJS.isExternalLinkTargetSet()) {
|
||||
return;
|
||||
}
|
||||
PDFJS.externalLinkTarget = value;
|
||||
}),
|
||||
Preferences.get('renderer').then(function resolved(value) {
|
||||
self.viewerPrefs['renderer'] = value;
|
||||
preferences.get('renderer').then(function resolved(value) {
|
||||
viewerPrefs['renderer'] = value;
|
||||
}),
|
||||
Preferences.get('renderInteractiveForms').then(function resolved(value) {
|
||||
self.viewerPrefs['renderInteractiveForms'] = value;
|
||||
preferences.get('renderInteractiveForms').then(function resolved(value) {
|
||||
viewerPrefs['renderInteractiveForms'] = value;
|
||||
}),
|
||||
Preferences.get('disablePageLabels').then(function resolved(value) {
|
||||
self.viewerPrefs['disablePageLabels'] = value;
|
||||
preferences.get('disablePageLabels').then(function resolved(value) {
|
||||
viewerPrefs['disablePageLabels'] = value;
|
||||
}),
|
||||
Preferences.get('enablePrintAutoRotate').then(function resolved(value) {
|
||||
self.viewerPrefs['enablePrintAutoRotate'] = value;
|
||||
preferences.get('enablePrintAutoRotate').then(function resolved(value) {
|
||||
viewerPrefs['enablePrintAutoRotate'] = value;
|
||||
}),
|
||||
]).catch(function (reason) { });
|
||||
},
|
||||
@ -260,7 +261,7 @@ var PDFViewerApplication = {
|
||||
var self = this;
|
||||
var appConfig = this.appConfig;
|
||||
|
||||
return new Promise(function (resolve, reject) {
|
||||
return new Promise((resolve, reject) => {
|
||||
var eventBus = appConfig.eventBus || getGlobalEventBus();
|
||||
self.eventBus = eventBus;
|
||||
|
||||
@ -337,8 +338,9 @@ var PDFViewerApplication = {
|
||||
self.overlayManager = OverlayManager;
|
||||
|
||||
self.handTool = new HandTool({
|
||||
container: container,
|
||||
eventBus: eventBus,
|
||||
container,
|
||||
eventBus,
|
||||
preferences: this.preferences,
|
||||
});
|
||||
|
||||
self.pdfDocumentProperties =
|
||||
@ -595,12 +597,12 @@ var PDFViewerApplication = {
|
||||
}
|
||||
if (this.pdfLoadingTask) {
|
||||
// We need to destroy already opened document.
|
||||
return this.close().then(function () {
|
||||
return this.close().then(() => {
|
||||
// Reload the preferences if a document was previously opened.
|
||||
Preferences.reload();
|
||||
this.preferences.reload();
|
||||
// ... and repeat the open() call.
|
||||
return this.open(file, args);
|
||||
}.bind(this));
|
||||
});
|
||||
}
|
||||
|
||||
var parameters = Object.create(null), scale;
|
||||
|
@ -15,10 +15,10 @@
|
||||
/* globals chrome */
|
||||
|
||||
import { DefaultExternalServices, PDFViewerApplication } from './app';
|
||||
import { BasePreferences } from './preferences';
|
||||
import { DownloadManager } from './download_manager';
|
||||
import { OverlayManager } from './overlay_manager';
|
||||
import { PDFJS } from './pdfjs';
|
||||
import { Preferences } from './preferences';
|
||||
|
||||
if (typeof PDFJSDev === 'undefined' || !PDFJSDev.test('CHROME')) {
|
||||
throw new Error('Module "pdfjs-web/chromecom" shall not be used outside ' +
|
||||
@ -293,46 +293,48 @@ function setReferer(url, callback) {
|
||||
// chrome.storage.local to chrome.storage.sync when needed.
|
||||
var storageArea = chrome.storage.sync || chrome.storage.local;
|
||||
|
||||
Preferences._writeToStorage = function (prefObj) {
|
||||
return new Promise(function (resolve) {
|
||||
if (prefObj === Preferences.defaults) {
|
||||
var keysToRemove = Object.keys(Preferences.defaults);
|
||||
// If the storage is reset, remove the keys so that the values from
|
||||
// managed storage are applied again.
|
||||
storageArea.remove(keysToRemove, function() {
|
||||
resolve();
|
||||
});
|
||||
} else {
|
||||
storageArea.set(prefObj, function() {
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
Preferences._readFromStorage = function (prefObj) {
|
||||
return new Promise(function (resolve) {
|
||||
if (chrome.storage.managed) {
|
||||
// Get preferences as set by the system administrator.
|
||||
// See extensions/chromium/preferences_schema.json for more information.
|
||||
// These preferences can be overridden by the user.
|
||||
chrome.storage.managed.get(Preferences.defaults, getPreferences);
|
||||
} else {
|
||||
// Managed storage not supported, e.g. in old Chromium versions.
|
||||
getPreferences(Preferences.defaults);
|
||||
}
|
||||
|
||||
function getPreferences(defaultPrefs) {
|
||||
if (chrome.runtime.lastError) {
|
||||
// Managed storage not supported, e.g. in Opera.
|
||||
defaultPrefs = Preferences.defaults;
|
||||
class ChromePreferences extends BasePreferences {
|
||||
_writeToStorage(prefObj) {
|
||||
return new Promise((resolve) => {
|
||||
if (prefObj === this.defaults) {
|
||||
var keysToRemove = Object.keys(this.defaults);
|
||||
// If the storage is reset, remove the keys so that the values from
|
||||
// managed storage are applied again.
|
||||
storageArea.remove(keysToRemove, function() {
|
||||
resolve();
|
||||
});
|
||||
} else {
|
||||
storageArea.set(prefObj, function() {
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
storageArea.get(defaultPrefs, function(readPrefs) {
|
||||
resolve(readPrefs);
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
_readFromStorage(prefObj) {
|
||||
return new Promise((resolve) => {
|
||||
var getPreferences = (defaultPrefs) => {
|
||||
if (chrome.runtime.lastError) {
|
||||
// Managed storage not supported, e.g. in Opera.
|
||||
defaultPrefs = this.defaults;
|
||||
}
|
||||
storageArea.get(defaultPrefs, function(readPrefs) {
|
||||
resolve(readPrefs);
|
||||
});
|
||||
};
|
||||
|
||||
if (chrome.storage.managed) {
|
||||
// Get preferences as set by the system administrator.
|
||||
// See extensions/chromium/preferences_schema.json for more information.
|
||||
// These preferences can be overridden by the user.
|
||||
chrome.storage.managed.get(this.defaults, getPreferences);
|
||||
} else {
|
||||
// Managed storage not supported, e.g. in old Chromium versions.
|
||||
getPreferences(this.defaults);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
var ChromeExternalServices = Object.create(DefaultExternalServices);
|
||||
ChromeExternalServices.initPassiveLoading = function (callbacks) {
|
||||
@ -345,6 +347,9 @@ ChromeExternalServices.initPassiveLoading = function (callbacks) {
|
||||
ChromeExternalServices.createDownloadManager = function() {
|
||||
return new DownloadManager();
|
||||
};
|
||||
ChromeExternalServices.createPreferences = function() {
|
||||
return new ChromePreferences();
|
||||
};
|
||||
PDFViewerApplication.externalServices = ChromeExternalServices;
|
||||
|
||||
export {
|
||||
|
@ -13,11 +13,9 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {
|
||||
createObjectURL, PDFDataRangeTransport, shadow
|
||||
} from './pdfjs';
|
||||
import { createObjectURL, PDFDataRangeTransport, shadow } from './pdfjs';
|
||||
import { BasePreferences } from './preferences';
|
||||
import { PDFViewerApplication } from './app';
|
||||
import { Preferences } from './preferences';
|
||||
|
||||
if (typeof PDFJSDev === 'undefined' ||
|
||||
!PDFJSDev.test('FIREFOX || MOZCENTRAL')) {
|
||||
@ -127,20 +125,22 @@ var DownloadManager = (function DownloadManagerClosure() {
|
||||
return DownloadManager;
|
||||
})();
|
||||
|
||||
Preferences._writeToStorage = function (prefObj) {
|
||||
return new Promise(function (resolve) {
|
||||
FirefoxCom.request('setPreferences', prefObj, resolve);
|
||||
});
|
||||
};
|
||||
|
||||
Preferences._readFromStorage = function (prefObj) {
|
||||
return new Promise(function (resolve) {
|
||||
FirefoxCom.request('getPreferences', prefObj, function (prefStr) {
|
||||
var readPrefs = JSON.parse(prefStr);
|
||||
resolve(readPrefs);
|
||||
class FirefoxPreferences extends BasePreferences {
|
||||
_writeToStorage(prefObj) {
|
||||
return new Promise(function(resolve) {
|
||||
FirefoxCom.request('setPreferences', prefObj, resolve);
|
||||
});
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
_readFromStorage(prefObj) {
|
||||
return new Promise(function(resolve) {
|
||||
FirefoxCom.request('getPreferences', prefObj, function (prefStr) {
|
||||
var readPrefs = JSON.parse(prefStr);
|
||||
resolve(readPrefs);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
(function listenFindEvents() {
|
||||
var events = [
|
||||
@ -247,6 +247,10 @@ PDFViewerApplication.externalServices = {
|
||||
return new DownloadManager();
|
||||
},
|
||||
|
||||
createPreferences() {
|
||||
return new FirefoxPreferences();
|
||||
},
|
||||
|
||||
get supportsIntegratedFind() {
|
||||
var support = FirefoxCom.requestSync('supportsIntegratedFind');
|
||||
return shadow(this, 'supportsIntegratedFind', support);
|
||||
|
@ -14,6 +14,7 @@
|
||||
*/
|
||||
|
||||
import { DefaultExternalServices, PDFViewerApplication } from './app';
|
||||
import { BasePreferences } from './preferences';
|
||||
import { DownloadManager } from './download_manager';
|
||||
|
||||
if (typeof PDFJSDev !== 'undefined' && !PDFJSDev.test('GENERIC')) {
|
||||
@ -23,10 +24,29 @@ if (typeof PDFJSDev !== 'undefined' && !PDFJSDev.test('GENERIC')) {
|
||||
|
||||
var GenericCom = {};
|
||||
|
||||
class GenericPreferences extends BasePreferences {
|
||||
_writeToStorage(prefObj) {
|
||||
return new Promise(function(resolve) {
|
||||
localStorage.setItem('pdfjs.preferences', JSON.stringify(prefObj));
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
|
||||
_readFromStorage(prefObj) {
|
||||
return new Promise(function(resolve) {
|
||||
var readPrefs = JSON.parse(localStorage.getItem('pdfjs.preferences'));
|
||||
resolve(readPrefs);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
var GenericExternalServices = Object.create(DefaultExternalServices);
|
||||
GenericExternalServices.createDownloadManager = function () {
|
||||
GenericExternalServices.createDownloadManager = function() {
|
||||
return new DownloadManager();
|
||||
};
|
||||
GenericExternalServices.createPreferences = function() {
|
||||
return new GenericPreferences();
|
||||
};
|
||||
PDFViewerApplication.externalServices = GenericExternalServices;
|
||||
|
||||
export {
|
||||
|
@ -15,7 +15,6 @@
|
||||
|
||||
import { GrabToPan } from './grab_to_pan';
|
||||
import { localized } from './ui_utils';
|
||||
import { Preferences } from './preferences';
|
||||
|
||||
/**
|
||||
* @typedef {Object} HandToolOptions
|
||||
@ -34,6 +33,7 @@ var HandTool = (function HandToolClosure() {
|
||||
function HandTool(options) {
|
||||
this.container = options.container;
|
||||
this.eventBus = options.eventBus;
|
||||
var preferences = options.preferences;
|
||||
|
||||
this.wasActive = false;
|
||||
|
||||
@ -46,12 +46,12 @@ var HandTool = (function HandToolClosure() {
|
||||
|
||||
this.eventBus.on('togglehandtool', this.toggle.bind(this));
|
||||
|
||||
Promise.all([localized, Preferences.get('enableHandToolOnLoad')]).then(
|
||||
function resolved(values) {
|
||||
if (values[1] === true) {
|
||||
this.handTool.activate();
|
||||
}
|
||||
}.bind(this)).catch(function rejected(reason) { });
|
||||
Promise.all([localized,
|
||||
preferences.get('enableHandToolOnLoad')]).then((values) => {
|
||||
if (values[1] === true) {
|
||||
this.handTool.activate();
|
||||
}
|
||||
}).catch(function rejected(reason) { });
|
||||
|
||||
this.eventBus.on('presentationmodechanged', function (e) {
|
||||
if (e.switchInProgress) {
|
||||
|
@ -27,7 +27,7 @@ function getDefaultPreferences() {
|
||||
try {
|
||||
resolve(JSON.parse(xhr.responseText));
|
||||
} catch (e) {
|
||||
console.error('Unable to load default preferences: ' + e);
|
||||
console.error(`Unable to load default preferences: ${e}`);
|
||||
resolve({});
|
||||
}
|
||||
};
|
||||
@ -49,24 +49,18 @@ function cloneObj(obj) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Preferences - Utility for storing persistent settings.
|
||||
* BasePreferences - Abstract base class for storing persistent settings.
|
||||
* Used for settings that should be applied to all opened documents,
|
||||
* or every time the viewer is loaded.
|
||||
*/
|
||||
var Preferences = {
|
||||
prefs: null,
|
||||
isInitializedPromiseResolved: false,
|
||||
initializedPromise: null,
|
||||
|
||||
/**
|
||||
* Initialize and fetch the current preference values from storage.
|
||||
* @return {Promise} A promise that is resolved when the preferences
|
||||
* have been initialized.
|
||||
*/
|
||||
initialize: function preferencesInitialize() {
|
||||
return this.initializedPromise = getDefaultPreferences().then(
|
||||
function (defaults) {
|
||||
class BasePreferences {
|
||||
constructor() {
|
||||
if (this.constructor === BasePreferences) {
|
||||
throw new Error('Cannot initialize BasePreferences.');
|
||||
}
|
||||
this.prefs = null;
|
||||
|
||||
this._initializedPromise = getDefaultPreferences().then((defaults) => {
|
||||
Object.defineProperty(this, 'defaults', {
|
||||
value: Object.freeze(defaults),
|
||||
writable: false,
|
||||
@ -76,62 +70,59 @@ var Preferences = {
|
||||
|
||||
this.prefs = cloneObj(defaults);
|
||||
return this._readFromStorage(defaults);
|
||||
}.bind(this)).then(function(prefObj) {
|
||||
this.isInitializedPromiseResolved = true;
|
||||
}).then((prefObj) => {
|
||||
if (prefObj) {
|
||||
this.prefs = prefObj;
|
||||
}
|
||||
}.bind(this));
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Stub function for writing preferences to storage.
|
||||
* NOTE: This should be overridden by a build-specific function defined below.
|
||||
* @param {Object} prefObj The preferences that should be written to storage.
|
||||
* @return {Promise} A promise that is resolved when the preference values
|
||||
* have been written.
|
||||
*/
|
||||
_writeToStorage: function preferences_writeToStorage(prefObj) {
|
||||
return Promise.resolve();
|
||||
},
|
||||
_writeToStorage(prefObj) {
|
||||
return Promise.reject(new Error('Not implemented: _writeToStorage'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Stub function for reading preferences from storage.
|
||||
* NOTE: This should be overridden by a build-specific function defined below.
|
||||
* @param {Object} prefObj The preferences that should be read from storage.
|
||||
* @return {Promise} A promise that is resolved with an {Object} containing
|
||||
* the preferences that have been read.
|
||||
*/
|
||||
_readFromStorage: function preferences_readFromStorage(prefObj) {
|
||||
return Promise.resolve();
|
||||
},
|
||||
_readFromStorage(prefObj) {
|
||||
return Promise.reject(new Error('Not implemented: _readFromStorage'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset the preferences to their default values and update storage.
|
||||
* @return {Promise} A promise that is resolved when the preference values
|
||||
* have been reset.
|
||||
*/
|
||||
reset: function preferencesReset() {
|
||||
return this.initializedPromise.then(function() {
|
||||
reset() {
|
||||
return this._initializedPromise.then(() => {
|
||||
this.prefs = cloneObj(this.defaults);
|
||||
return this._writeToStorage(this.defaults);
|
||||
}.bind(this));
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace the current preference values with the ones from storage.
|
||||
* @return {Promise} A promise that is resolved when the preference values
|
||||
* have been updated.
|
||||
*/
|
||||
reload: function preferencesReload() {
|
||||
return this.initializedPromise.then(function () {
|
||||
this._readFromStorage(this.defaults).then(function(prefObj) {
|
||||
if (prefObj) {
|
||||
this.prefs = prefObj;
|
||||
}
|
||||
}.bind(this));
|
||||
}.bind(this));
|
||||
},
|
||||
reload() {
|
||||
return this._initializedPromise.then(() => {
|
||||
return this._readFromStorage(this.defaults);
|
||||
}).then((prefObj) => {
|
||||
if (prefObj) {
|
||||
this.prefs = prefObj;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value of a preference.
|
||||
@ -140,12 +131,12 @@ var Preferences = {
|
||||
* @return {Promise} A promise that is resolved when the value has been set,
|
||||
* provided that the preference exists and the types match.
|
||||
*/
|
||||
set: function preferencesSet(name, value) {
|
||||
return this.initializedPromise.then(function () {
|
||||
set(name, value) {
|
||||
return this._initializedPromise.then(() => {
|
||||
if (this.defaults[name] === undefined) {
|
||||
throw new Error('preferencesSet: \'' + name + '\' is undefined.');
|
||||
throw new Error(`Set preference: "${name}" is undefined.`);
|
||||
} else if (value === undefined) {
|
||||
throw new Error('preferencesSet: no value is specified.');
|
||||
throw new Error('Set preference: no value is specified.');
|
||||
}
|
||||
var valueType = typeof value;
|
||||
var defaultType = typeof this.defaults[name];
|
||||
@ -154,19 +145,18 @@ var Preferences = {
|
||||
if (valueType === 'number' && defaultType === 'string') {
|
||||
value = value.toString();
|
||||
} else {
|
||||
throw new Error('Preferences_set: \'' + value + '\' is a \"' +
|
||||
valueType + '\", expected \"' + defaultType + '\".');
|
||||
throw new Error(`Set preference: "${value}" is a ${valueType}, ` +
|
||||
`expected a ${defaultType}.`);
|
||||
}
|
||||
} else {
|
||||
if (valueType === 'number' && (value | 0) !== value) {
|
||||
throw new Error('Preferences_set: \'' + value +
|
||||
'\' must be an \"integer\".');
|
||||
throw new Error(`Set preference: "${value}" must be an integer.`);
|
||||
}
|
||||
}
|
||||
this.prefs[name] = value;
|
||||
return this._writeToStorage(this.prefs);
|
||||
}.bind(this));
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value of a preference.
|
||||
@ -174,12 +164,12 @@ var Preferences = {
|
||||
* @return {Promise} A promise that is resolved with a {boolean|number|string}
|
||||
* containing the value of the preference.
|
||||
*/
|
||||
get: function preferencesGet(name) {
|
||||
return this.initializedPromise.then(function () {
|
||||
get(name) {
|
||||
return this._initializedPromise.then(() => {
|
||||
var defaultValue = this.defaults[name];
|
||||
|
||||
if (defaultValue === undefined) {
|
||||
throw new Error('preferencesGet: \'' + name + '\' is undefined.');
|
||||
throw new Error(`Get preference: "${name}" is undefined.`);
|
||||
} else {
|
||||
var prefValue = this.prefs[name];
|
||||
|
||||
@ -188,27 +178,10 @@ var Preferences = {
|
||||
}
|
||||
}
|
||||
return defaultValue;
|
||||
}.bind(this));
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
if (typeof PDFJSDev === 'undefined' ||
|
||||
!PDFJSDev.test('FIREFOX || MOZCENTRAL || CHROME')) {
|
||||
Preferences._writeToStorage = function (prefObj) {
|
||||
return new Promise(function (resolve) {
|
||||
localStorage.setItem('pdfjs.preferences', JSON.stringify(prefObj));
|
||||
resolve();
|
||||
});
|
||||
};
|
||||
|
||||
Preferences._readFromStorage = function (prefObj) {
|
||||
return new Promise(function (resolve) {
|
||||
var readPrefs = JSON.parse(localStorage.getItem('pdfjs.preferences'));
|
||||
resolve(readPrefs);
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
export {
|
||||
Preferences,
|
||||
BasePreferences,
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user