1
0
Fork 0
mirror of https://github.com/kkapsner/CanvasBlocker synced 2025-07-04 04:26:35 +02:00

Added export and import for settings

This commit is contained in:
kkapsner 2017-11-14 01:07:27 +01:00
parent 41d9b7073f
commit d531abb2de
10 changed files with 149 additions and 9 deletions

13
options/export.css Normal file
View file

@ -0,0 +1,13 @@
html, body {
height: 100%;
padding: 0;
margin: 0;
}
#settings {
width: 100%;
box-sizing: border-box;
height: 95%;
}
#settings.invalid {
background-color: pink;
}

16
options/export.html Normal file
View file

@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<title>CanvasBlocker Export Settings</title>
<link href="export.css" rel="stylesheet" type="text/css">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<textarea id="settings"></textarea>
<script src="../lib/require.js"></script>
<script src="../lib/settingDefinitions.js"></script>
<script src="../lib/settings.js"></script>
<script src="../lib/logging.js"></script>
<script src="export.js"></script>
</body>
</html>

57
options/export.js Normal file
View file

@ -0,0 +1,57 @@
/* 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("./settings");
const logging = require("./logging");
const input = document.getElementById("settings");
settings.onloaded(function(){
var data = {};
settings.forEach(function(def){
data[def.name] = def.get();
});
input.value = JSON.stringify(data, null, "\t");
input.addEventListener("input", function(){
try {
var newSettings = JSON.parse(this.value);
var isValid = true;
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 (e){
logging.warning("Invalid JSON:", e);
this.classList.add("invalid");
}
});
});
}());

View file

@ -22,6 +22,10 @@
settings.persistentRndStorage = "";
logging.notice("send message to main script");
browser.runtime.sendMessage({"canvasBlocker-clear-domain-rnd": true});
},
exportSettings: function(){
logging.verbose("open settings export");
window.open("export.html", "_blank");
}
};

View file

@ -257,6 +257,12 @@
"displayDependencies": {
"displayAdvancedSettings": [true]
}
},
{
"name": "exportSettings",
"displayDependencies": {
"displayAdvancedSettings": [true]
}
}
];