From 53cdf8347e59af92b4dd6a9cf8299d0923ee3248 Mon Sep 17 00:00:00 2001 From: kkapsner Date: Thu, 7 Feb 2019 00:44:16 +0100 Subject: [PATCH] after reset the hidden settings and expanded views were not reset Fixes #314 --- lib/settingContainers.js | 16 ++++++++++++++++ lib/settings.js | 21 +++++++++++++++++---- releaseNotes.txt | 2 +- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/lib/settingContainers.js b/lib/settingContainers.js index df3875c..30e5eed 100644 --- a/lib/settingContainers.js +++ b/lib/settingContainers.js @@ -99,6 +99,14 @@ listener(value[name]); }); }); + const oldValue = event.oldValue; + Object.keys(oldValue).filter(function(name){ + return !value.hasOwnProperty(name); + }).forEach(function(name){ + (changeListeners[name] || []).forEach(function(listener){ + listener(false); + }); + }); }); settingDefinition.hideAble = false; } @@ -132,6 +140,14 @@ listener(value[name]); }); }); + const oldValue = event.oldValue; + Object.keys(oldValue).filter(function(name){ + return !value.hasOwnProperty(name); + }).forEach(function(name){ + (changeListeners[name] || []).forEach(function(listener){ + listener(false); + }); + }); }); } }; diff --git a/lib/settings.js b/lib/settings.js index 24fc259..803fe79 100644 --- a/lib/settings.js +++ b/lib/settings.js @@ -89,6 +89,19 @@ }; } } + + function getDefaultValue(settingDefinition){ + let defaultValue = settingDefinition.defaultValue; + if ((typeof defaultValue) === "object"){ + if (Array.isArray(defaultValue)){ + return defaultValue.slice(); + } + else { + return Object.create(defaultValue); + } + } + return defaultValue; + } function createSetter(settingDefinition){ if (settingDefinition.dynamic){ @@ -173,7 +186,7 @@ else { const name = settingDefinition.name; let reset = function(){ - settings[name] = settingDefinition.defaultValue; + settings[name] = getDefaultValue(settingDefinition); browser.storage.local.remove(name); }; if (settingDefinition.urlSpecific){ @@ -220,7 +233,7 @@ if (typeof settingDefinition.defaultValue === "function"){ settingDefinition.defaultValue = settingDefinition.defaultValue(); } - settings[name] = settingDefinition.defaultValue; + settings[name] = getDefaultValue(settingDefinition); eventHandler[name] = {}; settingDefinition.on = function on(callback, url){ @@ -320,7 +333,7 @@ if (settingDefinition){ var oldValue = settings[name]; if (newValue === resetSymbol){ - newValue = settingDefinition.defaultValue; + newValue = getDefaultValue(settingDefinition); } settings[name] = newValue; ((eventHandler[name] || {})[defaultSymbol] || []).forEach(function(callback){ @@ -448,7 +461,7 @@ scope.startupReset = function(){ scope.forEach(function(definition){ if (definition.resetOnStartup){ - definition.set(definition.defaultValue); + definition.set(getDefaultValue(definition)); } }); }; diff --git a/releaseNotes.txt b/releaseNotes.txt index 56a5057..d26b70a 100644 --- a/releaseNotes.txt +++ b/releaseNotes.txt @@ -6,7 +6,7 @@ Version 0.5.8: - fixes: - - + - after reset the hidden settings and expanded views were not reset known issues: - if a data URL is blocked the page action button does not appear