diff --git a/web/app_options.js b/web/app_options.js new file mode 100644 index 000000000..4325d22df --- /dev/null +++ b/web/app_options.js @@ -0,0 +1,70 @@ +/* Copyright 2018 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. + */ + +const OptionKind = { + VIEWER: 'viewer', + API: 'api', + WORKER: 'worker', +}; + +/** + * PLEASE NOTE: To avoid introducing unnecessary dependencies, we specify the + * values below *explicitly* rather than relying on imported types; + * compare with the format of `default_preferences.json`. + */ +const defaultOptions = { +}; + +const userOptions = Object.create(null); + +class AppOptions { + constructor() { + throw new Error('Cannot initialize AppOptions.'); + } + + static get(name) { + let defaultOption = defaultOptions[name], userOption = userOptions[name]; + if (userOption !== undefined) { + return userOption; + } + return (defaultOption !== undefined ? defaultOption.value : undefined); + } + + static getAll(kind = null) { + let options = Object.create(null); + for (let name in defaultOptions) { + let defaultOption = defaultOptions[name], userOption = userOptions[name]; + if (kind && defaultOption.kind !== kind) { + continue; + } + options[name] = (userOption !== undefined ? + userOption : defaultOption.value); + } + return options; + } + + static set(name, value) { + userOptions[name] = value; + } + + static remove(name) { + delete userOptions[name]; + } +} + +export { + AppOptions, + OptionKind, +}; diff --git a/web/viewer.js b/web/viewer.js index ba680ec65..ecd7bc6cf 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -35,9 +35,10 @@ if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('CHROME')) { })(); } -let pdfjsWebApp; +let pdfjsWebApp, pdfjsWebAppOptions; if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('PRODUCTION')) { pdfjsWebApp = require('./app.js'); + pdfjsWebAppOptions = require('./app_options.js'); } if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('FIREFOX || MOZCENTRAL')) { @@ -180,14 +181,17 @@ function webViewerLoad() { if (typeof PDFJSDev === 'undefined' || !PDFJSDev.test('PRODUCTION')) { Promise.all([ SystemJS.import('pdfjs-web/app'), + SystemJS.import('pdfjs-web/app_options'), SystemJS.import('pdfjs-web/genericcom'), SystemJS.import('pdfjs-web/pdf_print_service'), - ]).then(function([app, ...otherModules]) { + ]).then(function([app, appOptions, ...otherModules]) { window.PDFViewerApplication = app.PDFViewerApplication; + window.PDFViewerApplicationOptions = appOptions.AppOptions; app.PDFViewerApplication.run(config); }); } else { window.PDFViewerApplication = pdfjsWebApp.PDFViewerApplication; + window.PDFViewerApplicationOptions = pdfjsWebAppOptions.AppOptions; pdfjsWebApp.PDFViewerApplication.run(config); } }