mirror of
https://github.com/kkapsner/CanvasBlocker
synced 2024-12-23 13:20:27 +01:00
75 lines
2.2 KiB
JavaScript
75 lines
2.2 KiB
JavaScript
/* 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";
|
|
|
|
const settings = require("../lib/settings");
|
|
const logging = require("../lib/logging");
|
|
const settingsMigration = require("../lib/settingsMigration");
|
|
require("../lib/theme").init();
|
|
const input = document.getElementById("settings");
|
|
settings.onloaded(function(){
|
|
const data = {};
|
|
settings.forEach(function(def){
|
|
data[def.name] = def.get();
|
|
});
|
|
input.value = JSON.stringify(data, null, "\t");
|
|
|
|
input.addEventListener("input", function(){
|
|
try {
|
|
let newSettings = JSON.parse(this.value);
|
|
let isValid = true;
|
|
|
|
while (settingsMigration.transitions.hasOwnProperty(newSettings.storageVersion)){
|
|
let oldVersion = newSettings.storageVersion;
|
|
newSettings = settingsMigration.transitions[newSettings.storageVersion](newSettings);
|
|
if (oldVersion === newSettings.storageVersion){
|
|
break;
|
|
}
|
|
}
|
|
|
|
Object.entries(newSettings).forEach(function(entry){
|
|
const [name, value] = entry;
|
|
const def = settings.getDefinition(name);
|
|
if (!def){
|
|
logging.warning("Setting %s not known.");
|
|
isValid = false;
|
|
}
|
|
else if (def.get() !== value){
|
|
const invalid = def.invalid(value);
|
|
if (invalid){
|
|
isValid = false;
|
|
logging.warning("Invalid setting for %s:", name, value, invalid);
|
|
}
|
|
}
|
|
});
|
|
if (isValid){
|
|
this.classList.remove("invalid");
|
|
Object.entries(newSettings).forEach(function(entry){
|
|
const [name, value] = entry;
|
|
if (settings[name] !== value){
|
|
settings[name] = value;
|
|
}
|
|
});
|
|
}
|
|
else {
|
|
this.classList.add("invalid");
|
|
}
|
|
}
|
|
catch (error){
|
|
logging.warning("Invalid JSON:", error);
|
|
this.classList.add("invalid");
|
|
}
|
|
});
|
|
input.addEventListener("blur", function(){
|
|
if (!this.classList.contains("invalid")){
|
|
const data = {};
|
|
settings.forEach(function(def){
|
|
data[def.name] = def.get();
|
|
});
|
|
input.value = JSON.stringify(data, null, "\t");
|
|
}
|
|
});
|
|
});
|
|
}()); |