| /** |
| * @licstart The following is the entire license notice for the |
| * Javascript code in this page |
| * |
| * Copyright 2020 Mozilla Foundation |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| * @licend The above is the entire license notice for the |
| * Javascript code in this page |
| */ |
| "use strict"; |
| |
| Object.defineProperty(exports, "__esModule", { |
| value: true |
| }); |
| exports.BasePreferences = void 0; |
| |
| var _app_options = require("./app_options.js"); |
| |
| let defaultPreferences = null; |
| |
| function getDefaultPreferences() { |
| if (!defaultPreferences) { |
| defaultPreferences = Promise.resolve({ |
| "cursorToolOnLoad": 0, |
| "defaultZoomValue": "", |
| "disablePageLabels": false, |
| "enablePermissions": false, |
| "enablePrintAutoRotate": false, |
| "enableWebGL": false, |
| "externalLinkTarget": 0, |
| "historyUpdateUrl": false, |
| "ignoreDestinationZoom": false, |
| "pdfBugEnabled": false, |
| "renderer": "canvas", |
| "renderInteractiveForms": true, |
| "sidebarViewOnLoad": -1, |
| "scrollModeOnLoad": -1, |
| "spreadModeOnLoad": -1, |
| "textLayerMode": 1, |
| "useOnlyCssZoom": false, |
| "viewOnLoad": 0, |
| "disableAutoFetch": false, |
| "disableFontFace": false, |
| "disableRange": false, |
| "disableStream": false |
| }); |
| } |
| |
| return defaultPreferences; |
| } |
| |
| 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, |
| enumerable: true, |
| configurable: false |
| }); |
| this.prefs = Object.assign(Object.create(null), defaults); |
| return this._readFromStorage(defaults); |
| }).then(prefs => { |
| if (!prefs) { |
| return; |
| } |
| |
| for (const name in prefs) { |
| const defaultValue = this.defaults[name], |
| prefValue = prefs[name]; |
| |
| if (defaultValue === undefined || typeof prefValue !== typeof defaultValue) { |
| continue; |
| } |
| |
| this.prefs[name] = prefValue; |
| } |
| }); |
| } |
| |
| async _writeToStorage(prefObj) { |
| throw new Error("Not implemented: _writeToStorage"); |
| } |
| |
| async _readFromStorage(prefObj) { |
| throw new Error("Not implemented: _readFromStorage"); |
| } |
| |
| async reset() { |
| await this._initializedPromise; |
| this.prefs = Object.assign(Object.create(null), this.defaults); |
| return this._writeToStorage(this.defaults); |
| } |
| |
| async set(name, value) { |
| await this._initializedPromise; |
| const defaultValue = this.defaults[name]; |
| |
| if (defaultValue === undefined) { |
| throw new Error(`Set preference: "${name}" is undefined.`); |
| } else if (value === undefined) { |
| throw new Error("Set preference: no value is specified."); |
| } |
| |
| const valueType = typeof value; |
| const defaultType = typeof defaultValue; |
| |
| if (valueType !== defaultType) { |
| if (valueType === "number" && defaultType === "string") { |
| value = value.toString(); |
| } else { |
| throw new Error(`Set preference: "${value}" is a ${valueType}, ` + `expected a ${defaultType}.`); |
| } |
| } else { |
| if (valueType === "number" && !Number.isInteger(value)) { |
| throw new Error(`Set preference: "${value}" must be an integer.`); |
| } |
| } |
| |
| this.prefs[name] = value; |
| return this._writeToStorage(this.prefs); |
| } |
| |
| async get(name) { |
| await this._initializedPromise; |
| const defaultValue = this.defaults[name]; |
| |
| if (defaultValue === undefined) { |
| throw new Error(`Get preference: "${name}" is undefined.`); |
| } else { |
| const prefValue = this.prefs[name]; |
| |
| if (prefValue !== undefined) { |
| return prefValue; |
| } |
| } |
| |
| return defaultValue; |
| } |
| |
| async getAll() { |
| await this._initializedPromise; |
| return Object.assign(Object.create(null), this.defaults, this.prefs); |
| } |
| |
| } |
| |
| exports.BasePreferences = BasePreferences; |