mirror of
https://github.com/kkapsner/CanvasBlocker
synced 2025-07-04 04:26:35 +02:00
Added URL specific settings
For blockMode and showNotifications. Fixes #148.
This commit is contained in:
parent
78a0ccc243
commit
01780da9f5
10 changed files with 618 additions and 78 deletions
|
@ -1,6 +1,7 @@
|
|||
.settings {
|
||||
width: 100%;
|
||||
border-spacing: 0;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
.settings.displayDescriptions {
|
||||
table-layout: fixed;
|
||||
|
@ -70,4 +71,45 @@ input[type=""], input[type="text"], input[type="number"], select {
|
|||
}
|
||||
*.multiple4 {
|
||||
width: 25% !important;
|
||||
}
|
||||
|
||||
.urlValues {
|
||||
padding-right: 1em;
|
||||
position: relative;
|
||||
}
|
||||
.urlValues.collapsed table {
|
||||
display: none;
|
||||
}
|
||||
.urlValues.expanded table {
|
||||
display: block;
|
||||
margin: 0.5em auto;
|
||||
}
|
||||
.urlValues table caption {
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.urlValues table td {
|
||||
vertical-align: middle;
|
||||
}
|
||||
.urlValues table .reset, .urlValues table .add, .urlValues table .url {
|
||||
cursor: pointer;
|
||||
}
|
||||
.urlValues .collapser {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
text-align: center;
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
cursor: pointer;
|
||||
}
|
||||
.urlValues.collapsed .collapser::after {
|
||||
content: "\25B6";
|
||||
}
|
||||
.urlValues.expanded .collapser::after {
|
||||
content: "\25BC";
|
||||
}
|
||||
.urlValues .notSpecifiedForUrl {
|
||||
opacity: 0.5;
|
||||
}
|
|
@ -66,12 +66,11 @@
|
|||
input.value = value;
|
||||
return input;
|
||||
},
|
||||
updateCallback: function(input, setting){
|
||||
input.value = setting.get();
|
||||
updateCallback: function(input, value){
|
||||
input.value = value;
|
||||
return input.value;
|
||||
},
|
||||
changeCallback: function(input, setting){
|
||||
setting.set(parseFloat(input.value));
|
||||
getValue: function(input){
|
||||
return parseFloat(input.value);
|
||||
}
|
||||
},
|
||||
|
@ -81,12 +80,11 @@
|
|||
input.value = value;
|
||||
return input;
|
||||
},
|
||||
updateCallback: function(input, setting){
|
||||
input.value = setting.get();
|
||||
updateCallback: function(input, value){
|
||||
input.value = value;
|
||||
return input.value;
|
||||
},
|
||||
changeCallback: function(input, setting){
|
||||
setting.set(input.value);
|
||||
getValue: function(input){
|
||||
return input.value;
|
||||
}
|
||||
},
|
||||
|
@ -97,38 +95,110 @@
|
|||
input.style.display = "inline";
|
||||
return input;
|
||||
},
|
||||
updateCallback: function(input, setting){
|
||||
input.checked = setting.get();
|
||||
updateCallback: function(input, value){
|
||||
input.checked = value;
|
||||
return input.checked;
|
||||
},
|
||||
changeCallback: function(input, setting){
|
||||
setting.set(input.checked);
|
||||
getValue: function(input){
|
||||
return input.checked;
|
||||
}
|
||||
}
|
||||
},
|
||||
object: false
|
||||
};
|
||||
|
||||
function createInput(setting){
|
||||
function createInput(setting, url = ""){
|
||||
var type = inputTypes[typeof setting.defaultValue];
|
||||
var input;
|
||||
if (setting.options){
|
||||
input = createSelect(setting);
|
||||
}
|
||||
else {
|
||||
input = document.createElement("input");
|
||||
if (type){
|
||||
input = document.createElement("input");
|
||||
type.input(input, setting.defaultValue);
|
||||
}
|
||||
}
|
||||
if (type){
|
||||
setting.on(function(){type.updateCallback(input, setting);});
|
||||
setting.on(function(){type.updateCallback(input, setting.get(url));}, url);
|
||||
input.addEventListener("change", function(){
|
||||
var value = type.changeCallback(input, setting);
|
||||
var value = type.getValue(input);
|
||||
setting.set(value, url);
|
||||
logging.message("changed setting", setting.name, ":", value);
|
||||
|
||||
});
|
||||
}
|
||||
return input;
|
||||
if (setting.urlSpecific && url === ""){
|
||||
let container = document.createElement("div");
|
||||
container.className = "urlValues collapsed";
|
||||
container.appendChild(input);
|
||||
var collapser = document.createElement("span");
|
||||
collapser.classList.add("collapser");
|
||||
container.appendChild(collapser);
|
||||
collapser.addEventListener("click", function(){
|
||||
container.classList.toggle("collapsed");
|
||||
container.classList.toggle("expanded");
|
||||
});
|
||||
let urlTable = document.createElement("table");
|
||||
let caption = document.createElement("caption");
|
||||
caption.textContent = browser.i18n.getMessage(setting.urlContainer.name + "_title");
|
||||
urlTable.appendChild(caption);
|
||||
let body = document.createElement("tbody");
|
||||
urlTable.appendChild(body);
|
||||
let foot = document.createElement("tfoot");
|
||||
let footRow = document.createElement("tr");
|
||||
let footCell = document.createElement("td");
|
||||
footCell.colSpan = 3;
|
||||
let footPlus = document.createElement("span");
|
||||
footPlus.classList.add("add");
|
||||
footPlus.textContent = "+";
|
||||
footPlus.addEventListener("click", function(){
|
||||
var url = prompt(browser.i18n.getMessage("inputURL")).trim();
|
||||
if (url){
|
||||
setting.set(setting.get(url), url);
|
||||
}
|
||||
});
|
||||
footCell.appendChild(footPlus);
|
||||
footRow.appendChild(footCell);
|
||||
foot.appendChild(footRow);
|
||||
urlTable.appendChild(foot);
|
||||
container.appendChild(urlTable);
|
||||
|
||||
setting.urlContainer.on(function({newValue}){
|
||||
body.innerHTML = "";
|
||||
newValue.forEach(function(entry){
|
||||
let row = document.createElement("tr");
|
||||
let urlCell = document.createElement("td");
|
||||
urlCell.classList.add("url");
|
||||
urlCell.addEventListener("click", function(){
|
||||
var url = prompt(browser.i18n.getMessage("inputURL"), entry.url).trim();
|
||||
if (url){
|
||||
entry.url = url;
|
||||
setting.urlContainer.refresh();
|
||||
}
|
||||
});
|
||||
urlCell.textContent = entry.url;
|
||||
row.appendChild(urlCell);
|
||||
let input = createInput(setting, entry.url);
|
||||
type.updateCallback(input, setting.get(entry.url));
|
||||
if (!entry.hasOwnProperty(setting.name)){
|
||||
input.classList.add("notSpecifiedForUrl");
|
||||
}
|
||||
let inputCell = document.createElement("td");
|
||||
inputCell.appendChild(input);
|
||||
row.appendChild(inputCell);
|
||||
let clearCell = document.createElement("td");
|
||||
clearCell.className = "reset";
|
||||
clearCell.textContent = "\xD7";
|
||||
clearCell.addEventListener("click", function(){
|
||||
setting.reset(entry.url);
|
||||
});
|
||||
row.appendChild(clearCell);
|
||||
body.appendChild(row);
|
||||
});
|
||||
});
|
||||
return container;
|
||||
}
|
||||
return input || document.createElement("span");
|
||||
}
|
||||
|
||||
function createButton(setting){
|
||||
|
@ -158,7 +228,7 @@
|
|||
interaction = createInput(setting);
|
||||
}
|
||||
|
||||
interaction.className = "setting";
|
||||
interaction.classList.add("setting");
|
||||
interaction.dataset.storageName = setting.name;
|
||||
interaction.dataset.storageType = typeof setting.defaultValue;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue