mirror of
https://github.com/kkapsner/CanvasBlocker
synced 2025-07-04 12:36:37 +02:00
Added feature to hide settings.
This commit is contained in:
parent
22fda1eac7
commit
720a9bc9a5
11 changed files with 387 additions and 49 deletions
|
@ -18,6 +18,15 @@
|
|||
{name: "url", defaultValue: ""}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "hiddenSettings",
|
||||
hideContainer: true,
|
||||
defaultValue: {}
|
||||
},
|
||||
{
|
||||
name: "displayHiddenSettings",
|
||||
defaultValue: false
|
||||
},
|
||||
{
|
||||
name: "urls",
|
||||
defaultValue: [],
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
eventHandler.all = eventHandler.any;
|
||||
const settings = {};
|
||||
let urlContainer;
|
||||
let hideContainer;
|
||||
|
||||
function isDefinitionInvalid(settingDefinition, newValue){
|
||||
if (newValue === undefined && settingDefinition.optional){
|
||||
|
@ -219,6 +220,28 @@
|
|||
}
|
||||
}
|
||||
|
||||
scope.on = function onSettingsChange(name, callback, url){
|
||||
if (Array.isArray(name)){
|
||||
name.forEach(function(name){
|
||||
onSettingsChange(name, callback, url);
|
||||
});
|
||||
}
|
||||
else {
|
||||
if (eventHandler.hasOwnProperty(name)){
|
||||
if (!url){
|
||||
url = defaultSymbol;
|
||||
}
|
||||
if (!eventHandler[name].hasOwnProperty(url)){
|
||||
eventHandler[name][url] = [];
|
||||
}
|
||||
eventHandler[name][url].push(callback);
|
||||
}
|
||||
else {
|
||||
logging.warning("Unable to register event handler for unknown setting", name);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
settingDefinitions.forEach(function(settingDefinition){
|
||||
if (settingDefinition.urlContainer){
|
||||
urlContainer = settingDefinition;
|
||||
|
@ -255,7 +278,7 @@
|
|||
settingDefinition.set = createSetter(settingDefinition);
|
||||
|
||||
settingDefinition.reset = createResetter(settingDefinition);
|
||||
|
||||
|
||||
if (settingDefinition.urlSpecific){
|
||||
if (!urlContainer){
|
||||
logging.error("Unable to use url specific settings without url-container");
|
||||
|
@ -277,6 +300,41 @@
|
|||
enumerable: true
|
||||
}
|
||||
);
|
||||
|
||||
if (settingDefinition.hideContainer){
|
||||
hideContainer = settingDefinition;
|
||||
let changeListeners = {};
|
||||
settingDefinition.setHideByName = function(name, value){
|
||||
logging.verbose("set hide of", name, "to", value);
|
||||
const hideStore = settingDefinition.get();
|
||||
hideStore[name] = value;
|
||||
settingDefinition.set(hideStore);
|
||||
(changeListeners[name] || []).forEach(function(listener){
|
||||
listener(value);
|
||||
});
|
||||
};
|
||||
settingDefinition.getHideByName = function(name){
|
||||
const hideStore = settingDefinition.get();
|
||||
return hideStore[name] || false;
|
||||
};
|
||||
settingDefinition.onHideChange = function(name, listener){
|
||||
if (!changeListeners[name]){
|
||||
changeListeners[name] = [];
|
||||
}
|
||||
changeListeners[name].push(listener);
|
||||
};
|
||||
settingDefinition.on(function(event){
|
||||
const value = event.newValue;
|
||||
Object.keys(value).forEach(function(name){
|
||||
if (value[name]){
|
||||
(changeListeners[name] || []).forEach(function(listener){
|
||||
listener(true);
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
settingDefinition.hideAble = false;
|
||||
}
|
||||
});
|
||||
|
||||
scope.getDefinition = function(name){
|
||||
|
@ -288,6 +346,13 @@
|
|||
return undefined;
|
||||
}
|
||||
};
|
||||
|
||||
scope.getContainers = function(){
|
||||
return {
|
||||
url: Object.create(urlContainer),
|
||||
hide: Object.create(hideContainer)
|
||||
};
|
||||
};
|
||||
|
||||
scope.set = function(name, ...args){
|
||||
var foundDefinition = definitionsByName[name];
|
||||
|
@ -316,28 +381,6 @@
|
|||
}).forEach(...args);
|
||||
};
|
||||
|
||||
scope.on = function onSettingsChange(name, callback, url){
|
||||
if (Array.isArray(name)){
|
||||
name.forEach(function(name){
|
||||
onSettingsChange(name, callback, url);
|
||||
});
|
||||
}
|
||||
else {
|
||||
if (eventHandler.hasOwnProperty(name)){
|
||||
if (!url){
|
||||
url = defaultSymbol;
|
||||
}
|
||||
if (!eventHandler[name].hasOwnProperty(url)){
|
||||
eventHandler[name][url] = [];
|
||||
}
|
||||
eventHandler[name][url].push(callback);
|
||||
}
|
||||
else {
|
||||
logging.warning("Unable to register event handler for unknown setting", name);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const resetSymbol = Symbol("reset");
|
||||
function changeValue(name, newValue){
|
||||
var settingDefinition = scope.getDefinition(name);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue