From eb0f936cb0a50de7f5bc503ef88aa521b531ab9a Mon Sep 17 00:00:00 2001 From: kkapsner Date: Sun, 24 Sep 2017 00:12:12 +0200 Subject: [PATCH] First steps. --- lib/settings.js | 146 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 lib/settings.js diff --git a/lib/settings.js b/lib/settings.js new file mode 100644 index 0000000..b0212e1 --- /dev/null +++ b/lib/settings.js @@ -0,0 +1,146 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + (function(){ + "use strict"; + + var scope; + if ((typeof exports) !== "undefined"){ + scope = exports; + } + else { + window.scope.settings = {}; + scope = window.scope.settings; + } + + var settingDefinitions = [ + { + name: "logLevel", + defaultValue: 1 + }, + { + name: "whiteList", + defaultValue: "" + }, + { + name: "blackList", + defaultValue: "" + }, + { + name: "blockMode", + defaultValue: "fakeReadout", + options: ["blockReadout", "fakeReadout", "fakeInput", "askReadout", "blockEverything", "block", "ask", "allow", "allowEverything"] + }, + { + name: "minFakeSize", + defaultValue: 1 + }, + { + name: "maxFakeSize", + defaultValue: 0 + }, + { + name: "rng", + defaultValue: "nonPersistent", + options: ["nonPersistent", "constant", "persistent"] + }, + { + name: "useCanvasCache", + defaultValue: true + }, + { + name: "ignoreFrequentColors", + defaultValue: 0 + }, + { + name: "fakeAlphaChannel", + defaultValue: false + }, + { + name: "persistentRndStorage", + defaultValue: "" + }, + { + name: "storePersistentRnd", + defaultValue: false + }, + { + name: "askOnlyOnce", + defaultValue: true + }, + { + name: "showNotifications", + defaultValue: true + }, + { + name: "storeImageForInspection", + defaultValue: false + }, + { + name: "notificationDisplayTime", + defaultValue: 30 + }, + { + name: "ignoreList", + defaultValue: "" + }, + { + name: "showCallingFile", + defaultValue: false + }, + { + name: "showCompleteCallingStack", + defaultValue: false + }, + { + name: "enableStackList", + defaultValue: false + }, + { + name: "stackList", + defaultValue: "" + }, + { + name: "displayAdvancedSettings", + defaultValue: false + }, + { + name: "isStillDefault", + defaultValue: true + } + ]; + + var settings = {}; + window.settings = {}; + + settingDefinitions.forEach(function(settingDefinition){ + var name = settingDefinition.name; + settings[name] = settingDefinition.defaultValue; + Object.defineProperty( + window.settings, + { + name: name, + get: function(){ + return settings[name] + }, + set: function(newValue){ + if ((typeof newValue) === (typeof settingDefinition.defaultValue)){ + if ( + !settingDefinition.options || + settingDefinition.options.includes(newValue) + ){ + settings[name] = newValue; + + } + } + } + } + ); + }); + + scope.forEach = function forEachSetting(...args){ + settingDefinitions.map(function(settingDefinition){ + return Object.create(settingDefinition); + }).forEach(...args); + } +}()); \ No newline at end of file