Fixed some minor bugs, rewrote some bits of the popup

This commit is contained in:
Tamius Han 2018-06-27 23:55:37 +02:00
parent c5debb40a7
commit ea86721321
12 changed files with 374 additions and 135 deletions

View File

@ -21,8 +21,8 @@ Debug = {
debugDetection: true debugDetection: true
}, },
debugCanvas: { debugCanvas: {
enabled: true, enabled: false,
guardLine: true guardLine: false
} }
} }

View File

@ -20,7 +20,7 @@ var ExtensionConf = {
timer_error: 3000, timer_error: 3000,
timer_minimumTimeout: 5, // but regardless of above, we wait this many msec before retriggering timer_minimumTimeout: 5, // but regardless of above, we wait this many msec before retriggering
autoDisable: { // settings for automatically disabling the extension autoDisable: { // settings for automatically disabling the extension
maxExecutionTime: 15, // if execution time of main autodetect loop exceeds this many milliseconds, maxExecutionTime: 6000, // if execution time of main autodetect loop exceeds this many milliseconds,
// we disable it. // we disable it.
consecutiveTimeoutCount: 5 // we only do it if it happens this many consecutive times consecutiveTimeoutCount: 5 // we only do it if it happens this many consecutive times
}, },
@ -152,5 +152,40 @@ var ExtensionConf = {
//#endregion //#endregion
}, },
modKeys: ["ctrlKey", "shiftKey", "altKey"] modKeys: ["ctrlKey", "shiftKey", "altKey"]
},
// -----------------------------------------
// ::: SITE CONFIGURATION :::
// -----------------------------------------
// Nastavitve za posamezno stran
// Config for a given page:
//
// <hostname> : {
// status: <option> // should extension work on this site?
// arStatus: <option> // should we do autodetection on this site?
// statusEmbedded: <option> // reserved for future... maybe
// }
//
// Veljavne vrednosti za možnosti
// Valid values for options:
//
// status, arStatus, statusEmbedded:
//
// * enabled — always allow
// * default — allow if default is to allow, block if default is to block
// * disabled — never allow
//
sites: {
"www.youtube.com" : {
status: "enabled", // should extension work on this site?
arStatus: "default", // should we enable autodetection
statusEmbedded: "enabled", // should extension work for this site when embedded on other sites?
override: true // ignore value localStorage in favour of this
},
"www.netflix.com" : {
status: "enabled",
arStatus: BrowserDetect.firefox ? "default" : "disabled",
statusEmbedded: "enabled",
override: true
},
} }
} }

View File

@ -63,8 +63,8 @@ var _se_init = async function(isSlave){
var _se_patchUserSettings = function(saved, extDefaults){ var _se_patchUserSettings = function(saved, extDefaults){
for(var k in extDefaults){ for(var k in extDefaults){
if(extDefaults[k] != null && typeof extDefaults[k] === 'object' && extDefaults[k].constructor === Object){ if(extDefaults[k] != null && typeof extDefaults[k] === 'object' && extDefaults[k].constructor === Object){
if(typeof saved[k] !== 'object' || saved[k].constructor !== Object) if(typeof saved[k] !== 'object' || saved[k].constructor !== Object || extDefaults[k].override === true)
continue; continue; // if user's settings are wrong or if override flag is set, we keep value in extDefaults
_se_patchUserSettings(saved[k], extDefaults[k]); _se_patchUserSettings(saved[k], extDefaults[k]);
} }
@ -105,3 +105,60 @@ var Settings = {
save: _se_save, save: _se_save,
reload: _se_reload, reload: _se_reload,
} }
// -----------------------------------------
// Nastavitve za posamezno stran
// Config for a given page:
//
// <hostname> : {
// status: <option> // should extension work on this site?
// arStatus: <option> // should we do autodetection on this site?
// statusEmbedded: <option> // reserved for future... maybe
// }
//
// Veljavne vrednosti za možnosti
// Valid values for options:
//
// status, arStatus, statusEmbedded:
//
// * enabled — always allow
// * default — allow if default is to allow, block if default is to block
// * disabled — never allow
//
canStartExtension = function(site) {
if(site === undefined) {
site = window.location.hostname;
}
if (ExtensionConf.sites[site] === undefined) {
return ExtensionConf.arDetect.mode === "blacklist"; // site not defined, this does default option
}
if (ExtensionConf.arDetect.mode === "blacklist") {
return ExtensionConf.sites[site].status !== "disabled";
} else if (ExtensionConf.arDetect.mode === "whitelist" ) {
return ExtensionConf.sites[site].status === "enabled";
} else {
return false;
}
}
canStartAutoAr = function(site) {
if(site === undefined) {
site = window.location.hostname;
}
if (ExtensionConf.sites[site] === undefined) {
return ExtensionConf.arDetect.mode === "blacklist"; // site not defined, this does default option
}
if (ExtensionConf.arDetect.mode === "blacklist") {
return ExtensionConf.sites[site].arStatus !== "disabled";
} else if (ExtensionConf.arDetect.mode === "whitelist" ) {
return ExtensionConf.sites[site].arStatus === "enabled";
} else {
return false;
}
}

View File

@ -2,24 +2,7 @@ if(Debug.debug){
console.log("Loading: SitesConf.js"); console.log("Loading: SitesConf.js");
} }
// Nastavitve za posamezno stran
// Config for a given page:
//
// <hostname> : {
// status: <option> // should extension work on this site?
// arStatus: <option> // should we do autodetection on this site?
// statusEmbedded: <option> // should we do autodetection on this site?
// }
//
// Veljavne vrednosti za možnosti
// Valid values for options:
//
// status, arStatus, statusEmbedded:
//
// * whitelisted — always allow
// * follow-global — allow if default is to allow, block if default is to block
// * blacklisted — never allow
//
var _sc_sites = { var _sc_sites = {
"www.youtube.com" : { "www.youtube.com" : {

View File

@ -27,6 +27,7 @@ class CommsClient {
} else if (message.cmd === "set-config") { } else if (message.cmd === "set-config") {
this.hasSettings = true; this.hasSettings = true;
ExtensionConf = message.conf; ExtensionConf = message.conf;
// this.pageInfo.reset();
} else if (message.cmd === "set-stretch") { } else if (message.cmd === "set-stretch") {
this.pageInfo.setStretchMode(StretchMode[message.mode]); this.pageInfo.setStretchMode(StretchMode[message.mode]);
} else if (message.cmd === "autoar-start") { } else if (message.cmd === "autoar-start") {
@ -44,6 +45,11 @@ class CommsClient {
} else if (message.cmd === "reload-settings") { } else if (message.cmd === "reload-settings") {
ExtensionConf = message.newConf; ExtensionConf = message.newConf;
this.pageInfo.reset(); this.pageInfo.reset();
if(ExtensionConf.arDetect.mode === "disabled") {
this.pageInfo.stopArDetection();
} else {
this.pageInfo.startArDetection();
}
} }
} }
@ -137,6 +143,10 @@ class CommsServer {
} }
} }
async getCurrentTabUrl() {
}
sendToAll(message){ sendToAll(message){
for(p of this.ports){ for(p of this.ports){
for(frame in p){ for(frame in p){
@ -216,21 +226,21 @@ class CommsServer {
} }
if (message.cmd === 'get-config') { if (message.cmd === 'get-config') {
port.postMessage({cmd: "set-config", conf: ExtensionConf}) port.postMessage({cmd: "set-config", conf: ExtensionConf, site: this.server.currentSite})
} else if (message.cmd === 'set-stretch') { } else if (message.cmd === 'set-stretch') {
this.sendToActive(message); this.sendToActive(message);
} else if (message.cmd === 'set-ar') { } else if (message.cmd === 'set-ar') {
this.sendToActive(message); this.sendToActive(message);
} else if (message.cmd === 'autoar-start') { } else if (message.cmd === 'autoar-start') {
this.sendToActive(message); this.sendToActive(message);
} else if (message.cmd === "autoar-enable") { } else if (message.cmd === "autoar-enable") { // LEGACY - can be removed prolly?
ExtensionConf.arDetect.mode = "blacklist"; ExtensionConf.arDetect.mode = "blacklist";
Settings.save(ExtensionConf); Settings.save(ExtensionConf);
this.sendToAll({cmd: "reload-settings", sender: "uwbg"}) this.sendToAll({cmd: "reload-settings", sender: "uwbg"})
if(Debug.debug){ if(Debug.debug){
console.log("[uw-bg] autoar set to enabled (blacklist). evidenz:", ExtensionConf); console.log("[uw-bg] autoar set to enabled (blacklist). evidenz:", ExtensionConf);
} }
} else if (message.cmd === "autoar-disable") { } else if (message.cmd === "autoar-disable") { // LEGACY - can be removed prolly?
ExtensionConf.arDetect.mode = "disabled"; ExtensionConf.arDetect.mode = "disabled";
if(message.reason){ if(message.reason){
ExtensionConf.arDetect.disabledReason = message.reason; ExtensionConf.arDetect.disabledReason = message.reason;
@ -251,6 +261,22 @@ class CommsServer {
ExtensionConf.arDetect.timer_playing = timeout; ExtensionConf.arDetect.timer_playing = timeout;
Settings.save(ExtensionConf); Settings.save(ExtensionConf);
this.sendToAll({cmd: 'reload-settings', newConf: ExtensionConf}); this.sendToAll({cmd: 'reload-settings', newConf: ExtensionConf});
} else if (message.cmd === "set-autoar-defaults") {
ExtensionConf.arDetect.mode = message.mode;
Settings.save(ExtensionConf);
this.sendToAll({cmd: "reload-settings", sender: "uwbg"})
} else if (message.cmd === "set-autoar-for-site") {
ExtensionConf.sites[this.server.currentSite].arStatus = message.mode;
Settings.save(ExtensionConf);
this.sendToAll({cmd: "reload-settings", sender: "uwbg"});
} else if (message.cmd === "set-extension-defaults") {
ExtensionConf.mode = message.mode;
Settings.save(ExtensionConf);
this.sendToAll({cmd: "reload-settings", sender: "uwbg"})
} else if (message.cmd === "set-extension-for-site") {
ExtensionConf.sites[this.server.currentSite].status = message.mode;
Settings.save(ExtensionConf);
this.sendToAll({cmd: "reload-settings", sender: "uwbg"});
} }
} }
@ -302,7 +328,7 @@ class CommsServer {
} }
if(message.cmd === 'get-config') { if(message.cmd === 'get-config') {
sendResponse({extensionConf: JSON.stringify(ExtensionConf)}); sendResponse({extensionConf: JSON.stringify(ExtensionConf), site: getCurrentTabUrl()});
// return true; // return true;
} else if (message.cmd === "autoar-enable") { } else if (message.cmd === "autoar-enable") {
ExtensionConf.arDetect.mode = "blacklist"; ExtensionConf.arDetect.mode = "blacklist";

View File

@ -178,7 +178,7 @@ class EdgeDetect{
if(Debug.debugCanvas.enabled) { if(Debug.debugCanvas.enabled) {
this._imageTest_dbg(image, sampleRow_color + sampleStart, loopEnd, sample.top, edgeCandidatesTop) this._imageTest_dbg(image, sampleRow_color + sampleStart, loopEnd, sample.top, edgeCandidatesTop)
} else { } else {
this._imageTest(image, start, end, sample.top, edgeCandidatesTop) this._imageTest(image, sampleRow_color + sampleStart, loopEnd, sample.top, edgeCandidatesTop)
} }
} }
@ -220,7 +220,7 @@ class EdgeDetect{
if(Debug.debugCanvas.enabled) { if(Debug.debugCanvas.enabled) {
this._imageTest_dbg(image, sampleRow_color + sampleStart, loopEnd, sample.bottom, edgeCandidatesBottom); this._imageTest_dbg(image, sampleRow_color + sampleStart, loopEnd, sample.bottom, edgeCandidatesBottom);
} else { } else {
this._imageTest(image, start, end, sample.bottom, edgeCandidatesBottom); this._imageTest(image, sampleRow_color + sampleStart, loopEnd, sample.bottom, edgeCandidatesBottom);
} }
} }
@ -510,7 +510,7 @@ class EdgeDetect{
col: col, col: col,
top: (i / this.conf.canvasImageDataRowLength) - 1 top: (i / this.conf.canvasImageDataRowLength) - 1
}); });
colsIn.splice(cols_a.indexOf(col), 1); colsIn.splice(colsIn.indexOf(col), 1);
} }
} }
if(colsIn.length < this.colsTreshold) if(colsIn.length < this.colsTreshold)
@ -577,7 +577,7 @@ class EdgeDetect{
} }
_blackbarTest(image, start, end){ _blackbarTest(image, start, end){
for(var i = sampleRow_black + sampleStart; i < loopEnd; i += 4){ for(var i = start; i < end; i += 4){
if( image[i ] > this.blackbarTreshold || if( image[i ] > this.blackbarTreshold ||
image[i+1] > this.blackbarTreshold || image[i+1] > this.blackbarTreshold ||
image[i+2] > this.blackbarTreshold ){ image[i+2] > this.blackbarTreshold ){
@ -612,7 +612,7 @@ class EdgeDetect{
++detections; ++detections;
} }
} }
if(detections >= detectionTreshold){ if(detections >= this.detectionTreshold){
if(edgeCandidates[sampleOffset] != undefined) if(edgeCandidates[sampleOffset] != undefined)
edgeCandidates[sampleOffset].count++; edgeCandidates[sampleOffset].count++;
else{ else{

View File

@ -27,7 +27,7 @@ class ArDetector {
this.debugCanvas.destroy(); this.debugCanvas.destroy();
} }
setup(cwidth, cheight){ setup(cwidth, cheight, forceStart){
this.guardLine = new GuardLine(this); this.guardLine = new GuardLine(this);
this.edgeDetector = new EdgeDetect(this); this.edgeDetector = new EdgeDetect(this);
@ -141,7 +141,9 @@ class ArDetector {
this.canvasImageDataRowLength = cwidth << 2; this.canvasImageDataRowLength = cwidth << 2;
this.noLetterboxCanvasReset = false; this.noLetterboxCanvasReset = false;
this.start(); if(forceStart || canStartAutoAr() ) {
this.start();
}
} }
catch(ex){ catch(ex){
console.log(ex); console.log(ex);

View File

@ -105,7 +105,7 @@ class Stretcher {
} else { } else {
// NEEDS CHECKING // NEEDS CHECKING
// player > video > actual — double pillarbox // player > video > actual — double pillarbox
stretchFactors.xFactor = playerAr / actualAr; stretchFactors.xFactor = actualAr / playerAr;
stretchFactors.yFactor = 1; stretchFactors.yFactor = 1;
if(Debug.debug){ if(Debug.debug){

View File

@ -5,34 +5,81 @@ var BgVars = {
} }
class UWServer { class UWServer {
constructor() { constructor() {
this.ports = []; this.ports = [];
this.arIsActive = true;
this.hasVideos = false;
this.currentSite = "";
this.setup(); this.setup();
} }
async setup() { async setup() {
await Settings.init(); await Settings.init();
this.comms = new CommsServer(this); this.comms = new CommsServer(this);
var ths = this;
if(BrowserDetect.firefox) {
browser.tabs.onActivated.addListener((m) => ths.onTabSwitched(m));
} else if (BrowserDetect.chrome) {
chrome.tabs.onActivated.addListener((m) => ths.onTabSwitched(m));
}
} }
async _promisifyTabsGet(browserObj, tabId){
return new Promise( (resolve, reject) => {
browserObj.tabs.get(tabId, (tab) => resolve(tab));
});
}
extractHostname(url){
var hostname;
// extract hostname
if (url.indexOf("://") > -1) { //find & remove protocol (http, ftp, etc.) and get hostname
hostname = url.split('/')[2];
}
else {
hostname = url.split('/')[0];
}
hostname = hostname.split(':')[0]; //find & remove port number
hostname = hostname.split('?')[0]; //find & remove "?"
return hostname;
}
async onTabSwitched(activeInfo){
this.hasVideos = false;
if(Debug.debug)
console.log("[uw-bg::onTabSwitched] TAB CHANGED, GETTING INFO FROM MAIN TAB");
try {
var tabId = activeInfo.tabId; // just for readability
var tab;
if (BrowserDetect.firefox) {
var tab = await browser.tabs.get(tabId);
} else if (BrowserDetect.chrome) {
var tab = await this._promisifyTabsGet(chrome, tabId);
}
this.currentSite = this.extractHostname(tab.url);
} catch(e) {
console.log(e);
}
console.log("TAB SWITCHED!", this.currentSite)
//TODO: change extension icon based on whether there's any videos on current page
}
} }
var server = new UWServer(); var server = new UWServer();
// function extractHostname(url){
// // extract hostname
// if (url.indexOf("://") > -1) { //find & remove protocol (http, ftp, etc.) and get hostname
// hostname = url.split('/')[2];
// }
// else {
// hostname = url.split('/')[0];
// }
// hostname = hostname.split(':')[0]; //find & remove port number
// hostname = hostname.split('?')[0]; //find & remove "?"
// return hostname;
// }
// async function main(){ // async function main(){
// if(Debug.debug) // if(Debug.debug)

View File

@ -23,36 +23,31 @@ async function init(){
comms = new CommsClient('content-client-port'); comms = new CommsClient('content-client-port');
// load settings // load settings
// var isSlave = true;
// await Settings.init(isSlave);
var settingsLoaded = await comms.requestSettings(); var settingsLoaded = await comms.requestSettings();
if(!settingsLoaded){ if(!settingsLoaded){
console.log("[uw::main] failed to get settings (settingsLoaded=",settingsLoaded,") Waiting for settings the old fashioned way"); if(Debug.debug) {
console.log("[uw::main] failed to get settings (settingsLoaded=",settingsLoaded,") Waiting for settings the old fashioned way");
}
comms.requestSettings_fallback(); comms.requestSettings_fallback();
await comms.waitForSettings(); await comms.waitForSettings();
console.log("[uw::main] settings loaded."); if(Debug.debug){
console.log("[uw::main] settings loaded.");
}
} }
// await Settings.init();
// za sporočilca poslušamo v vsakem primeru, tudi če je razširitev na spletnem mestu onemogočena
// we listen for messages in any case, even if extension is disabled on current site.
// browser.runtime.onMessage.addListener(receiveMessage);
// await SitesConf.init();
// če je trenutno mesto onemogočeno, potem zaključimo na tem mestu
// if current site is disabled, we quit here
// if(! SitesConf.isEnabled(window.location.hostname)){
// if(Debug.debug)
// console.log("[uw:main] | site", window.location.hostname, "is blacklisted.");
// return;
// }
if(Debug.debug) if(Debug.debug)
console.log("[uw::main] configuration should be loaded now"); console.log("[uw::main] configuration should be loaded now");
// če smo razširitev onemogočili v nastavitvah, ne naredimo ničesar
// If extension is soft-disabled, don't do shit
if(! canStartExtension()){
if(Debug.debug) {
console.log("[uw::init] EXTENSION DISABLED, THEREFORE WONT BE STARTED")
}
return;
}
pageInfo = new PageInfo(); pageInfo = new PageInfo();
comms.setPageInfo(pageInfo); comms.setPageInfo(pageInfo);

View File

@ -20,16 +20,24 @@ MenuTab.cssHacks = document.getElementById("_menu_hacks");
MenuTab.about = document.getElementById("_menu_about"); MenuTab.about = document.getElementById("_menu_about");
MenuTab.autoAr = document.getElementById("_menu_autoar"); MenuTab.autoAr = document.getElementById("_menu_autoar");
var ArPanel = {} var ExtPanel = {};
ExtPanel.siteOptions = {};
ExtPanel.siteOptions.disabled = document.getElementById("_ext_site_options_blacklist");
ExtPanel.siteOptions.enabled = document.getElementById("_ext_site_options_whitelist");
ExtPanel.siteOptions.default = document.getElementById("_ext_site_options_default");
var AutoArPanel = {};
AutoArPanel.siteOptions = {};
AutoArPanel.siteOptions.disabled = document.getElementById("_ext_site_options_blacklist");
AutoArPanel.siteOptions.enabled = document.getElementById("_ext_site_options_whitelist");
AutoArPanel.siteOptions.default = document.getElementById("_ext_site_options_default");
var ArPanel = {};
ArPanel.alignment = {}; ArPanel.alignment = {};
ArPanel.alignment.left = document.getElementById("_align_left"); ArPanel.alignment.left = document.getElementById("_align_left");
ArPanel.alignment.center = document.getElementById("_align_center"); ArPanel.alignment.center = document.getElementById("_align_center");
ArPanel.alignment.right = document.getElementById("_align_right"); ArPanel.alignment.right = document.getElementById("_align_right");
ArPanel.autoar = {}; ArPanel.autoar = {};
ArPanel.autoar.enable = document.getElementById("_autoar_enable");
ArPanel.autoar.disable = document.getElementById("_autoar_disable");
ArPanel.autoar.enable_tmp = document.getElementById("_autoar_enable_tmp");
ArPanel.autoar.disable_tmp = document.getElementById("_autoar_disable_tmp");
var selectedMenu = "arSettings"; var selectedMenu = "arSettings";
@ -44,7 +52,7 @@ port.onMessage.addListener( (m,p) => processReceivedMessage(m,p));
async function processReceivedMessage(message, port){ async function processReceivedMessage(message, port){
if(message.cmd === 'set-config'){ if(message.cmd === 'set-config'){
this.loadConfig(message.conf); this.loadConfig(message.conf, message.site);
} }
} }
@ -70,17 +78,46 @@ function stringToKeyCombo(key_in){
return keys_out; return keys_out;
} }
function loadConfig(extensionConf){ function loadConfig(extensionConf, site){
if(Debug.debug) if(Debug.debug)
console.log("[popup.js::loadConfig] loading config. conf object:", extensionConf); console.log("[popup.js::loadConfig] loading config. conf object:", extensionConf, "\n\n\n\n\n\n\n\n-------------------------------------");
_extensionConf = extensionConf; _extensionConf = extensionConf;
// ----------------------
document.getElementById("_checkbox_autoArEnabled").checked = extensionConf.arDetect.mode == "blacklist"; //#region extension-basics - SET BASIC EXTENSION OPTIONS
if(Debug.debug)
console.log("Extension mode?", extensionConf.extensionMode, "| site & site options:", site, ",", (site && extensionConf.sites[site]) ? extensionConf.sites[site].status : "fucky wucky?");
document.getElementById("_checkbox_ext-enabled").checked = extensionConf.extensionMode !== "disabled";
document.getElementById("_checkbox_ext-whitelist").checked = extensionConf.extensionMode === "whitelist";
for(var button in ExtPanel.siteOptions) {
ExtPanel.siteOptions[button].classList.remove("selected");
}
if(site && extensionConf.sites[site]) {
ExtPanel.siteOptions[extensionConf.sites[site].arStatus].classList.add("selected");
}
//#endregion extension-basics
//
// ------------
//#region autoar - SET AUTOAR OPTIONS
if(Debug.debug)
console.log("Autodetect mode?", extensionConf.arDetect.mode, "| site & site options:", site, ",", (site && extensionConf.sites[site]) ? extensionConf.sites[site].arStatus : "fucky wucky?" );
document.getElementById("_checkbox_autoArEnabled").checked = extensionConf.arDetect.mode !== "disabled";
document.getElementById("_checkbox_autoar-whitelist").checked = extensionConf.arDetect.mode === "whitelist";
document.getElementById("_autoAr_disabled_reason").textContent = extensionConf.arDetect.DisabledReason; document.getElementById("_autoAr_disabled_reason").textContent = extensionConf.arDetect.DisabledReason;
document.getElementById("_input_autoAr_timer").value = extensionConf.arDetect.timer_playing; document.getElementById("_input_autoAr_timer").value = extensionConf.arDetect.timer_playing;
for(var button in AutoArPanel.siteOptions) {
AutoArPanel.siteOptions[button].classList.remove("selected");
}
if(site && extensionConf.sites[site]) {
AutoArPanel.siteOptions[extensionConf.sites[site].arStatus].classList.add("selected");
}
//#endregion
// process video alignment: // process video alignment:
if(extensionConf.miscFullscreenSettings.videoFloat){ if(extensionConf.miscFullscreenSettings.videoFloat){
for(var button in ArPanel.alignment) for(var button in ArPanel.alignment)
@ -135,9 +172,6 @@ function loadConfig(extensionConf){
} }
} }
// process aspect ratio settings
showArctlButtons();
if(Debug.debug) if(Debug.debug)
console.log("[popup.js::loadConfig] config loaded"); console.log("[popup.js::loadConfig] config loaded");
@ -235,6 +269,15 @@ function toggleSite(option){
Comms.sendToBackgroundScript({cmd:"enable-for-site", option:option}); Comms.sendToBackgroundScript({cmd:"enable-for-site", option:option});
} }
function getMode(isEnabled, whitelistOnly) {
if(isEnabled) {
return whitelistOnly ? "whitelist" : "blacklist"
} else {
return "disabled";
}
}
document.addEventListener("click", (e) => { document.addEventListener("click", (e) => {
@ -270,7 +313,43 @@ document.addEventListener("click", (e) => {
// don't send commands // don't send commands
return; return;
} }
if(e.target.classList.contains("_ext")) {
var command = {};
if(e.target.classList.contains("_ext_enabled")){
var extStatus = document.getElementById("_checkbox_ext-enabled").checked;
var whitelist = document.getElementById("_checkbox_ext-whitelist").checked;
// if extension is set to disabled, we also disable 'whitelist only' checkbox
document.getElementById("_checkbox_ext-whitelist").disabled = !extStatus;
return {
cmd: "set-extension-defaults",
mode: getMode(extStatus, whitelist),
sender: "popup",
receiver: "uwbg"
};
} else if (e.target.classList.contains("_ext_whitelist-only")) {
var extStatus = document.getElementById("_checkbox_ext-enabled").checked;
var whitelist = document.getElementById("_checkbox_ext-whitelist").checked;
return {
cmd: "set-extension-defaults",
mode: getMode(extStatus, whitelist),
sender: "popup",
receiver: "uwbg"
};
} else if (e.target.classList.contains("_ext_site_options")) {
command.cmd = "set-extension-for-site";
if(e.target.classList.contains("_blacklist")){
command.mode = "disabled";
} else if(e.target.classList.contains("_whitelist")) {
command.mode = "enabled";
} else {
command.mode = "default";
}
return command;
}
}
if(e.target.classList.contains("_changeAr")){ if(e.target.classList.contains("_changeAr")){
if(e.target.classList.contains("_ar_auto")){ if(e.target.classList.contains("_ar_auto")){
command.cmd = "autoar-start"; command.cmd = "autoar-start";
@ -330,33 +409,32 @@ document.addEventListener("click", (e) => {
return command; return command;
} }
if(e.target.classList.contains("_autoAr")){ if(e.target.classList.contains("_autoAr")){
// var command = {};
// if(e.target.classList.contains("_autoar_temp-disable")){
// command = {cmd: "stop-autoar", sender: "popup", receiver: "uwbg"};
// }
// else if(e.target.classList.contains("_autoar_disable")){
// command = {cmd: "disable-autoar", sender: "popup", receiver: "uwbg"};
// }
// else if(e.target.classList.contains("_autoar_enable")){
// command = {cmd: "enable-autoar", sender: "popup", receiver: "uwbg"};
// }
// else{
// command = {cmd: "force-ar", newAr: "auto", sender: "popup", receiver: "uwbg"};
// }
// _arctl_onclick(command);
// return command;
console.log("......");
var command = {}; var command = {};
if(e.target.classList.contains("_autoAr_enabled")){ if(e.target.classList.contains("_autoAr_enabled")){
var arStatus = document.getElementById("_checkbox_autoArEnabled").checked; var arStatus = document.getElementById("_checkbox_autoArEnabled").checked;
var whitelist = document.getElementById("_checkbox_autoar-whitelist").checked;
// this event fires before the checkbox is checked, therefore arStatus is opposite of what it should be
if(! arStatus){ // if autoar is set to disabled, we also disable 'whitelist only' checkbox
return {cmd: "autoar-disable", sender: "popup", receiver: "uwbg"}; document.getElementById("_checkbox_autoar-whitelist").disabled = !arStatus;
} else {
return {cmd: "autoar-enable", sender: "popup", receiver: "uwbg"}; return {
} cmd: "set-autoar-defaults",
} else if(e.target.classList.contains("_save_autoAr_frequency")) { mode: getMode(arStatus, whitelist),
sender: "popup",
receiver: "uwbg"
};
} else if (e.target.classList.contains("_autoAr_whitelist-only")) {
var arStatus = document.getElementById("_checkbox_autoArEnabled").checked;
var whitelist = document.getElementById("_checkbox_autoar-whitelist").checked;
return {
cmd: "set-autoar-mode",
mode: getMode(arStatus, whitelist),
sender: "popup",
receiver: "uwbg"
};
} else if (e.target.classList.contains("_save_autoAr_frequency")) {
var value = parseInt(document.getElementById("_input_autoAr_frequency").value.trim()); var value = parseInt(document.getElementById("_input_autoAr_frequency").value.trim());
if(! isNaN(value)){ if(! isNaN(value)){
@ -365,6 +443,16 @@ document.addEventListener("click", (e) => {
Comms.sendToBackgroundScript(command); Comms.sendToBackgroundScript(command);
} }
return; return;
} else if (e.target.classList.contains("_ar_site_options")) {
command.cmd = "set-autoar-for-site";
if(e.target.classList.contains("_blacklist")){
command.mode = "disabled";
} else if(e.target.classList.contains("_whitelist")) {
command.mode = "enabled";
} else {
command.mode = "default";
}
return command;
} }
} }
@ -376,7 +464,7 @@ document.addEventListener("click", (e) => {
command.cmd = "force-video-float", command.cmd = "force-video-float",
command.newFloat = "left" command.newFloat = "left"
console.log(".................\n\n\n..........\n\n >>command<< \n\n\n\n ",command,"\n\n\n.........\n\n\n................................"); // console.log(".................\n\n\n..........\n\n >>command<< \n\n\n\n ",command,"\n\n\n.........\n\n\n................................");
return command; return command;
} }
@ -391,8 +479,7 @@ document.addEventListener("click", (e) => {
return command; return command;
} }
} }
if(e.target.classList.contains("extensionEnabledOnCurrentSite")){ // legacy? can be removed?
if(e.target.classList.contains("extensionEnabledOnCurrentSite")){
toggleSite(document.extensionEnabledOnCurrentSite.mode.value); toggleSite(document.extensionEnabledOnCurrentSite.mode.value);
} }

View File

@ -208,32 +208,39 @@
</div> </div>
<div id="settings-for-current-site" class="suboption hidden"> <div id="settings-for-current-site" class="suboption hidden">
<!-- <p class="current-site-status" id="current-site-blacklisted">This site is currently blacklisted.</p> --> <div class="warn">Some settings will only apply after reload. Settings don't apply to videos embedded from other sites.</div>
<!-- <p class="current-site-status" id="current-site-whitelist-only">Extension is set to only work on sites that have been whitelisted.</p> --> <p>
<p>Allow this extension to run on this site? <small><br/>NOTE: changes take effect after reload!</small></p> <input type="checkbox" id="_checkbox_ext-enabled" class="_ext _ext_enabled"> Enable this extension<br/>
<form action="" name="extensionEnabledOnCurrentSite"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
<input type="radio" class="extensionEnabledOnCurrentSite" name="mode" id="extensionEnabledCurrentSite_followGlobal" value="follow-global" > Follow default rules (currently: <span id="current-site-status-global-status"></span>)<br/> <input type="checkbox" id="_checkbox_ext-whitelist" class="_ext _ext_whitelist-only"> Only on whitelisted sites
<input type="radio" class="extensionEnabledOnCurrentSite" name="mode" id="extensionEnabledCurrentSite_whitelisted" value="whitelisted" > Allow (whitelist this site) <br/> </p>
<input type="radio" class="extensionEnabledOnCurrentSite" name="mode" id="extensionEnabledCurrentSite_blacklisted" value="blacklisted" > Deny (blacklist this site)<br/>
</form> <div class="row">
<small>NOTE: this settings <b>don't</b> apply to videos embedded from other sites. This option takes effect after page reload.</small> <span class="label">Options for this site:</span>
<div class="button-row">
<a id="_ext_site_options_blacklist" class="button _ext _ext_site_options _blacklist">Blacklist</a>
<a id="_ext_site_options_default" class="button _ext _ext_site_options _default" >Default</a>
<a id="_ext_site_options_whitelist" class="button _ext _ext_site_options _whitelist">Whitelist</a>
</div>
</div>
</div> </div>
<div id="autoar-basic-settings" class="suboption hidden"> <div id="autoar-basic-settings" class="suboption hidden">
<p><input type="checkbox" id="_checkbox_autoArEnabled" class="_autoAr_enabled _autoAr"> Enable automatic aspect ratio detection?<br/><small class="color_warn" id="_autoAr_disabled_reason"></small></p> <p><small class="color_warn" id="_autoAr_disabled_reason"></small><br/>
<p>Check every <input id="_input_autoAr_timer" class="_autoAr_timer _autoAr" type="number" min="5" max="10000"> ms — <span class="button _save_autoAr_frequency _autoAr">Save</span></p> <input type="checkbox" id="_checkbox_autoArEnabled" class="_autoAr _autoAr_enabled"> Enable automatic aspect ratio detection<br/>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
<!-- <div class="warning"><p>NOTE: increasing the frequency can result in <i>very</i> high RAM usage and slow performance.</p></div> --> <input type="checkbox" id="_checkbox_autoar-whitelist" class="_autoAr _autoAr_whitelist-only"> Only on whitelisted sites
<p> </p>
<b>Stretch video while using automatic detection (todo)</b> <p>Check every <input id="_input_autoAr_timer" class="_autoAr _autoAr_timer" type="number" min="5" max="10000"> ms — <span class="button _save_autoAr_frequency _autoAr">Save</span></p>
<br/>
<input type="radio" id="_checkbox_arStretch" name="arStretchMode" class="_autoAr_ _autoAr"> No, I'm a civilized person<br/>
<input type="radio" id="_checkbox_arStretch" name="arStretchMode" class="_autoAr_removeThinBorders _autoAr"> Stretch to remove thin borders<br/>
<input type="radio" id="_checkbox_arStretch" name="arStretchMode" class="_autoAr_removeThinBorders _autoAr"> Always stretch in full screen<br/>
<input type="radio" id="_checkbox_arStretch" name="arStretchMode" class="_autoAr_removeThinBorders _autoAr"> Always stretch, even when not in full screen
</p>
<div class="row">
<span class="label">Options for this site:</span>
<div class="button-row">
<a id="_ar_site_options_blacklist" class="button _autoAr _ar_site_options _blacklist">Blacklist</a>
<a id="_ar_site_options_default" class="button _autoAr _ar_site_options _default" >Default</a>
<a id="_ar_site_options_whitelist" class="button _autoAr _ar_site_options _whitelist">Whitelist</a>
</div>
</div>
</div> </div>
<div id="aspect-ratio-settings" class="suboption hidden"> <div id="aspect-ratio-settings" class="suboption hidden">