mirror of
https://github.com/kkapsner/CanvasBlocker
synced 2025-07-03 03:56:26 +02:00
Added navigator protection
This commit is contained in:
parent
479ee74903
commit
e56df7160f
23 changed files with 711 additions and 1 deletions
237
options/navigator.js
Normal file
237
options/navigator.js
Normal file
|
@ -0,0 +1,237 @@
|
|||
/* 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 navigator = require("./navigator");
|
||||
|
||||
const title = document.createElement("h1");
|
||||
title.className = "title";
|
||||
title.textContent = browser.i18n.getMessage("navigatorSettings_title");
|
||||
document.body.appendChild(title);
|
||||
|
||||
document.querySelector("head title").textContent = title.textContent;
|
||||
|
||||
const description = document.createElement("div");
|
||||
description.className = "description";
|
||||
description.textContent = browser.i18n.getMessage("navigatorSettings_description");
|
||||
document.body.appendChild(description);
|
||||
|
||||
function presetSection(title, presets){
|
||||
const container = document.createElement("div");
|
||||
container.className = "presetSection";
|
||||
|
||||
const titleNode = document.createElement("h2");
|
||||
titleNode.className = "title";
|
||||
titleNode.textContent = browser.i18n.getMessage("navigatorSettings_presetSection." + title);
|
||||
container.appendChild(titleNode);
|
||||
|
||||
const presetsList = document.createElement("ul");
|
||||
presetsList.className = "presets";
|
||||
container.appendChild(presetsList);
|
||||
|
||||
Object.keys(presets).forEach(function(presetName){
|
||||
const li = document.createElement("li");
|
||||
li.className = "preset " + presetName;
|
||||
presetsList.appendChild(li);
|
||||
|
||||
const button = document.createElement("button");
|
||||
button.className = "button";
|
||||
button.textContent = presetName;
|
||||
li.appendChild(button);
|
||||
|
||||
const presetProperties = presets[presetName];
|
||||
function checkActive(currentProperties){
|
||||
if (Object.keys(presetProperties).every(function(property){
|
||||
return currentProperties[property] === presetProperties[property];
|
||||
})){
|
||||
li.classList.add("active");
|
||||
}
|
||||
else {
|
||||
li.classList.remove("active");
|
||||
}
|
||||
}
|
||||
settings.on("navigatorDetails", function({newValue}){
|
||||
checkActive(newValue);
|
||||
});
|
||||
settings.onloaded(function(){
|
||||
checkActive(settings.navigatorDetails);
|
||||
});
|
||||
|
||||
button.addEventListener("click", function(){
|
||||
const data = settings.navigatorDetails;
|
||||
Object.keys(presetProperties).forEach(function(property){
|
||||
if (presetProperties[property] === undefined){
|
||||
delete data[property];
|
||||
}
|
||||
else {
|
||||
data[property] = presetProperties[property];
|
||||
}
|
||||
});
|
||||
settings.navigatorDetails = data;
|
||||
});
|
||||
});
|
||||
|
||||
return container;
|
||||
}
|
||||
|
||||
|
||||
const osPresets = {
|
||||
Windows: {
|
||||
windowManager: "Windows",
|
||||
platform: "Win32",
|
||||
platformDetails: "Windows NT 10.0; Win64; x64",
|
||||
oscpu: "{platformDetails}"
|
||||
},
|
||||
Linux: {
|
||||
windowManager: "X11",
|
||||
platform: "Linux x86_64",
|
||||
platformDetails: "X11; Linux x86_64",
|
||||
oscpu: "{platform}"
|
||||
},
|
||||
"Mac OS X": {
|
||||
windowManager: "Macintosh",
|
||||
platform: "MacIntel",
|
||||
platformDetails: "Macintosh; {oscpu}",
|
||||
oscpu: "Intel Mac OS X 10.14.3"
|
||||
}
|
||||
};
|
||||
|
||||
const browserPresets = {
|
||||
Edge: {
|
||||
chromeVersion: "71.0.3578.98",
|
||||
edgeVersion: "17.17134",
|
||||
firefoxVersion: undefined,
|
||||
operaVersion: undefined,
|
||||
safariVersion: undefined,
|
||||
|
||||
appVersion: "5.0 ({platformDetails}) AppleWebKit/537.36 (KHTML, like Gecko) " +
|
||||
"Chrome/{chromeVersion} Safari/537.36 Edge/{edgeVersion}",
|
||||
productSub: "20030107",
|
||||
userAgent: "Mozilla/{appVersion}",
|
||||
vendor: undefined,
|
||||
},
|
||||
Opera: {
|
||||
chromeVersion: "71.0.3578.98",
|
||||
edgeVersion: undefined,
|
||||
firefoxVersion: undefined,
|
||||
operaVersion: "58.0.3135.65",
|
||||
safariVersion: undefined,
|
||||
|
||||
appVersion: "5.0 ({platformDetails}) AppleWebKit/537.36 (KHTML, like Gecko) " +
|
||||
"Chrome/{chromeVersion} Safari/537.36 OPR/{operaVersion}",
|
||||
productSub: "20030107",
|
||||
userAgent: "Mozilla/{appVersion}",
|
||||
vendor: "Google Inc.",
|
||||
},
|
||||
Chrome: {
|
||||
chromeVersion: "71.0.3578.98",
|
||||
edgeVersion: undefined,
|
||||
firefoxVersion: undefined,
|
||||
operaVersion: undefined,
|
||||
safariVersion: undefined,
|
||||
|
||||
appVersion: "5.0 ({platformDetails}) AppleWebKit/537.36 (KHTML, like Gecko) " +
|
||||
"Chrome/{chromeVersion} Safari/537.36",
|
||||
productSub: "20030107",
|
||||
userAgent: "Mozilla/{appVersion}",
|
||||
vendor: "Google Inc.",
|
||||
},
|
||||
Safari: {
|
||||
chromeVersion: undefined,
|
||||
edgeVersion: undefined,
|
||||
firefoxVersion: undefined,
|
||||
operaVersion: undefined,
|
||||
safariVersion: "12.0.3",
|
||||
|
||||
appVersion: "5.0 ({platformDetails}) AppleWebKit/605.1.15 (KHTML, like Gecko) " +
|
||||
"Version/{safariVersion} Safari/605.1.15",
|
||||
productSub: "20030107",
|
||||
userAgent: "Mozilla/{appVersion}",
|
||||
vendor: "Apple Computer, Inc.",
|
||||
},
|
||||
Firefox: {
|
||||
chromeVersion: undefined,
|
||||
edgeVersion: undefined,
|
||||
firefoxVersion: "{real Firefox version}",
|
||||
operaVersion: undefined,
|
||||
safariVersion: undefined,
|
||||
|
||||
appVersion: "5.0 ({windowManager})",
|
||||
buildID: "20181001000000",
|
||||
productSub: "20100101",
|
||||
userAgent: "Mozilla/5.0 ({platformDetails}; rv:{firefoxVersion}) Gecko/20100101 Firefox/{firefoxVersion}",
|
||||
vendor: undefined,
|
||||
}
|
||||
};
|
||||
|
||||
document.body.appendChild(presetSection("os", osPresets));
|
||||
document.body.appendChild(presetSection("browser", browserPresets));
|
||||
|
||||
const valueTitle = document.createElement("h2");
|
||||
valueTitle.textContent = browser.i18n.getMessage("navigatorSettings_values");
|
||||
document.body.appendChild(valueTitle);
|
||||
|
||||
const valueSection = document.createElement("table");
|
||||
valueSection.className = "values";
|
||||
document.body.appendChild(valueSection);
|
||||
|
||||
function updateValueSection(currentProperties){
|
||||
function createPropertyRow(section, property){
|
||||
const row = document.createElement("tr");
|
||||
|
||||
const name = document.createElement("td");
|
||||
name.textContent = property;
|
||||
row.appendChild(name);
|
||||
|
||||
const value = document.createElement("td");
|
||||
row.appendChild(value);
|
||||
|
||||
const input = document.createElement("input");
|
||||
value.appendChild(input);
|
||||
input.value = currentProperties.hasOwnProperty(property)? currentProperties[property]: "{original value}";
|
||||
input.addEventListener("change", function(){
|
||||
currentProperties[property] = this.value;
|
||||
settings.navigatorDetails = currentProperties;
|
||||
});
|
||||
|
||||
const computedValue = document.createElement("td");
|
||||
computedValue.textContent = navigator.getNavigatorValue(property);
|
||||
row.appendChild(computedValue);
|
||||
|
||||
section.appendChild(row);
|
||||
}
|
||||
|
||||
valueSection.innerHTML = "";
|
||||
let section = document.createElement("tbody");
|
||||
section.className = "helperValues";
|
||||
valueSection.appendChild(section);
|
||||
|
||||
Object.keys(currentProperties).filter(function(property){
|
||||
return navigator.allProperties.indexOf(property) === -1;
|
||||
}).sort().forEach(createPropertyRow.bind(undefined, section));
|
||||
|
||||
section = document.createElement("tbody");
|
||||
section.className = "realValues";
|
||||
valueSection.appendChild(section);
|
||||
|
||||
navigator.allProperties.forEach(createPropertyRow.bind(undefined, section));
|
||||
}
|
||||
|
||||
settings.on("navigatorDetails", function({newValue}){
|
||||
updateValueSection(newValue);
|
||||
});
|
||||
settings.onloaded(function(){
|
||||
updateValueSection(settings.navigatorDetails);
|
||||
});
|
||||
|
||||
const resetButton = document.createElement("button");
|
||||
resetButton.className = "button";
|
||||
resetButton.textContent = browser.i18n.getMessage("navigatorSettings_reset");
|
||||
resetButton.addEventListener("click", function(){
|
||||
settings.navigatorDetails = {};
|
||||
});
|
||||
document.body.appendChild(resetButton);
|
||||
}());
|
Loading…
Add table
Add a link
Reference in a new issue