preferences.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. /* Copyright 2017 Mozilla Foundation
  2. *
  3. * Licensed under the Apache License, Version 2.0 (the "License");
  4. * you may not use this file except in compliance with the License.
  5. * You may obtain a copy of the License at
  6. *
  7. * http://www.apache.org/licenses/LICENSE-2.0
  8. *
  9. * Unless required by applicable law or agreed to in writing, software
  10. * distributed under the License is distributed on an "AS IS" BASIS,
  11. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. * See the License for the specific language governing permissions and
  13. * limitations under the License.
  14. */
  15. "use strict";
  16. Object.defineProperty(exports, "__esModule", {
  17. value: true
  18. });
  19. var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
  20. var defaultPreferences = null;
  21. function getDefaultPreferences() {
  22. if (!defaultPreferences) {
  23. defaultPreferences = Promise.resolve({
  24. "showPreviousViewOnLoad": true,
  25. "defaultZoomValue": "",
  26. "sidebarViewOnLoad": 0,
  27. "enableHandToolOnLoad": false,
  28. "enableWebGL": false,
  29. "pdfBugEnabled": false,
  30. "disableRange": false,
  31. "disableStream": false,
  32. "disableAutoFetch": false,
  33. "disableFontFace": false,
  34. "disableTextLayer": false,
  35. "useOnlyCssZoom": false,
  36. "externalLinkTarget": 0,
  37. "enhanceTextSelection": false,
  38. "renderer": "canvas",
  39. "renderInteractiveForms": false,
  40. "enablePrintAutoRotate": false,
  41. "disablePageLabels": false
  42. });
  43. }
  44. return defaultPreferences;
  45. }
  46. function cloneObj(obj) {
  47. var result = {};
  48. for (var i in obj) {
  49. if (Object.prototype.hasOwnProperty.call(obj, i)) {
  50. result[i] = obj[i];
  51. }
  52. }
  53. return result;
  54. }
  55. var Preferences = {
  56. prefs: null,
  57. isInitializedPromiseResolved: false,
  58. initializedPromise: null,
  59. initialize: function preferencesInitialize() {
  60. return this.initializedPromise = getDefaultPreferences().then(function (defaults) {
  61. Object.defineProperty(this, 'defaults', {
  62. value: Object.freeze(defaults),
  63. writable: false,
  64. enumerable: true,
  65. configurable: false
  66. });
  67. this.prefs = cloneObj(defaults);
  68. return this._readFromStorage(defaults);
  69. }.bind(this)).then(function (prefObj) {
  70. this.isInitializedPromiseResolved = true;
  71. if (prefObj) {
  72. this.prefs = prefObj;
  73. }
  74. }.bind(this));
  75. },
  76. _writeToStorage: function preferences_writeToStorage(prefObj) {
  77. return Promise.resolve();
  78. },
  79. _readFromStorage: function preferences_readFromStorage(prefObj) {
  80. return Promise.resolve();
  81. },
  82. reset: function preferencesReset() {
  83. return this.initializedPromise.then(function () {
  84. this.prefs = cloneObj(this.defaults);
  85. return this._writeToStorage(this.defaults);
  86. }.bind(this));
  87. },
  88. reload: function preferencesReload() {
  89. return this.initializedPromise.then(function () {
  90. this._readFromStorage(this.defaults).then(function (prefObj) {
  91. if (prefObj) {
  92. this.prefs = prefObj;
  93. }
  94. }.bind(this));
  95. }.bind(this));
  96. },
  97. set: function preferencesSet(name, value) {
  98. return this.initializedPromise.then(function () {
  99. if (this.defaults[name] === undefined) {
  100. throw new Error('preferencesSet: \'' + name + '\' is undefined.');
  101. } else if (value === undefined) {
  102. throw new Error('preferencesSet: no value is specified.');
  103. }
  104. var valueType = typeof value === "undefined" ? "undefined" : _typeof(value);
  105. var defaultType = _typeof(this.defaults[name]);
  106. if (valueType !== defaultType) {
  107. if (valueType === 'number' && defaultType === 'string') {
  108. value = value.toString();
  109. } else {
  110. throw new Error('Preferences_set: \'' + value + '\' is a \"' + valueType + '\", expected \"' + defaultType + '\".');
  111. }
  112. } else {
  113. if (valueType === 'number' && (value | 0) !== value) {
  114. throw new Error('Preferences_set: \'' + value + '\' must be an \"integer\".');
  115. }
  116. }
  117. this.prefs[name] = value;
  118. return this._writeToStorage(this.prefs);
  119. }.bind(this));
  120. },
  121. get: function preferencesGet(name) {
  122. return this.initializedPromise.then(function () {
  123. var defaultValue = this.defaults[name];
  124. if (defaultValue === undefined) {
  125. throw new Error('preferencesGet: \'' + name + '\' is undefined.');
  126. } else {
  127. var prefValue = this.prefs[name];
  128. if (prefValue !== undefined) {
  129. return prefValue;
  130. }
  131. }
  132. return defaultValue;
  133. }.bind(this));
  134. }
  135. };
  136. {
  137. Preferences._writeToStorage = function (prefObj) {
  138. return new Promise(function (resolve) {
  139. localStorage.setItem('pdfjs.preferences', JSON.stringify(prefObj));
  140. resolve();
  141. });
  142. };
  143. Preferences._readFromStorage = function (prefObj) {
  144. return new Promise(function (resolve) {
  145. var readPrefs = JSON.parse(localStorage.getItem('pdfjs.preferences'));
  146. resolve(readPrefs);
  147. });
  148. };
  149. }
  150. exports.Preferences = Preferences;