From 5df66124b27d0e5c5c209b7dfbbf6afccce47819 Mon Sep 17 00:00:00 2001 From: magnus Date: Wed, 15 Dec 2021 10:15:53 -0600 Subject: [PATCH 01/24] Visually seperate the two, but don't logically --- options.js | 123 ++++++++++++++++++++++++++++------------------------- 1 file changed, 64 insertions(+), 59 deletions(-) diff --git a/options.js b/options.js index e1b8b95f..098de6c7 100644 --- a/options.js +++ b/options.js @@ -27,67 +27,14 @@ var tcDefaults = { var keyBindings = []; -var keyCodeAliases = { - 0: "null", - null: "null", - undefined: "null", - 32: "Space", - 37: "Left", - 38: "Up", - 39: "Right", - 40: "Down", - 96: "Num 0", - 97: "Num 1", - 98: "Num 2", - 99: "Num 3", - 100: "Num 4", - 101: "Num 5", - 102: "Num 6", - 103: "Num 7", - 104: "Num 8", - 105: "Num 9", - 106: "Num *", - 107: "Num +", - 109: "Num -", - 110: "Num .", - 111: "Num /", - 112: "F1", - 113: "F2", - 114: "F3", - 115: "F4", - 116: "F5", - 117: "F6", - 118: "F7", - 119: "F8", - 120: "F9", - 121: "F10", - 122: "F11", - 123: "F12", - 186: ";", - 188: "<", - 189: "-", - 187: "+", - 190: ">", - 191: "/", - 192: "~", - 219: "[", - 220: "\\", - 221: "]", - 222: "'", - 59: ";", - 61: "+", - 173: "-", -}; - function recordKeyPress(e) { if ( (e.keyCode >= 48 && e.keyCode <= 57) || // Numbers 0-9 (e.keyCode >= 65 && e.keyCode <= 90) || // Letters A-Z keyCodeAliases[e.keyCode] // Other character keys ) { - e.target.value = - keyCodeAliases[e.keyCode] || String.fromCharCode(e.keyCode); - e.target.keyCode = e.keyCode; + e.target.value = getKeyCodeValue(e); + e.target.key = e.key; e.preventDefault(); e.stopPropagation(); @@ -97,12 +44,12 @@ function recordKeyPress(e) { } else if (e.keyCode === 27) { // When esc clicked, clear input e.target.value = "null"; - e.target.keyCode = null; + e.target.key = null; } } function inputFilterNumbersOnly(e) { - var char = String.fromCharCode(e.keyCode); + var char = e.key; if (!/[\d\.]$/.test(char) || !/^\d+(\.\d*)?$/.test(e.target.value + char)) { e.preventDefault(); e.stopPropagation(); @@ -114,8 +61,7 @@ function inputFocus(e) { } function inputBlur(e) { - e.target.value = - keyCodeAliases[e.target.keyCode] || String.fromCharCode(e.target.keyCode); + e.target.value = getKeyCodeValue(e); } function updateShortcutInputText(inputId, keyCode) { @@ -387,3 +333,62 @@ document.addEventListener("DOMContentLoaded", function () { }); }); }); + +function getKeyCodeValue(e) { + if (e.keyCode >= 65 && e.keyCode <= 90) { // Letters A-Z may be capital or lowercase + return e.key; + } + return keyCodeAliases[e.keyCode] || String.fromCharCode(e.keyCode); +} + +const keyCodeAliases = { + 0: "null", + null: "null", + undefined: "null", + 32: "Space", + 37: "Left", + 38: "Up", + 39: "Right", + 40: "Down", + 96: "Num 0", + 97: "Num 1", + 98: "Num 2", + 99: "Num 3", + 100: "Num 4", + 101: "Num 5", + 102: "Num 6", + 103: "Num 7", + 104: "Num 8", + 105: "Num 9", + 106: "Num *", + 107: "Num +", + 109: "Num -", + 110: "Num .", + 111: "Num /", + 112: "F1", + 113: "F2", + 114: "F3", + 115: "F4", + 116: "F5", + 117: "F6", + 118: "F7", + 119: "F8", + 120: "F9", + 121: "F10", + 122: "F11", + 123: "F12", + 186: ";", + 188: "<", + 189: "-", + 187: "+", + 190: ">", + 191: "/", + 192: "~", + 219: "[", + 220: "\\", + 221: "]", + 222: "'", + 59: ";", + 61: "+", + 173: "-", +}; From 8e137c240525140d8e6ddaaeadcbf38ccbebfa4b Mon Sep 17 00:00:00 2001 From: magnus Date: Wed, 15 Dec 2021 10:54:39 -0600 Subject: [PATCH 02/24] Stash before I test whether I made all necessary changes --- inject.js | 43 +++++++++++++++++++------------------ options.js | 62 ++++++++++++++++++++++++------------------------------ 2 files changed, 50 insertions(+), 55 deletions(-) diff --git a/inject.js b/inject.js index 79f4e583..623d3f95 100644 --- a/inject.js +++ b/inject.js @@ -6,7 +6,7 @@ var tc = { enabled: true, // default enabled speeds: {}, // empty object to hold speed for each source - displayKeyCode: 86, // default: V + displayKey: "v", // default: V rememberSpeed: false, // default: false forceLastSavedSpeed: false, //default: false audioBoolean: false, // default: false @@ -57,6 +57,7 @@ function log(message, level) { } } +// TODO this has duplicated values from options.js, figure out how to only define information once chrome.storage.sync.get(tc.settings, function (storage) { tc.settings.keyBindings = storage.keyBindings; // Array if (storage.keyBindings.length == 0) { @@ -64,52 +65,52 @@ chrome.storage.sync.get(tc.settings, function (storage) { // UPDATE tc.settings.keyBindings.push({ action: "slower", - key: Number(storage.slowerKeyCode) || 83, + key: String(storage.slowerKey) || "s" value: Number(storage.speedStep) || 0.1, force: false, predefined: true - }); // default S + }); tc.settings.keyBindings.push({ action: "faster", - key: Number(storage.fasterKeyCode) || 68, + key: String(storage.fasterKey) || "d", value: Number(storage.speedStep) || 0.1, force: false, predefined: true - }); // default: D + }); tc.settings.keyBindings.push({ action: "rewind", - key: Number(storage.rewindKeyCode) || 90, + key: String(storage.rewindKey) || "z", value: Number(storage.rewindTime) || 10, force: false, predefined: true - }); // default: Z + }); tc.settings.keyBindings.push({ action: "advance", - key: Number(storage.advanceKeyCode) || 88, + key: String(storage.advanceKey) || "x", value: Number(storage.advanceTime) || 10, force: false, predefined: true - }); // default: X + }); tc.settings.keyBindings.push({ action: "reset", - key: Number(storage.resetKeyCode) || 82, + key: String(storage.resetKey) || "r", value: 1.0, force: false, predefined: true - }); // default: R + }); tc.settings.keyBindings.push({ action: "fast", - key: Number(storage.fastKeyCode) || 71, + key: String(storage.fastKey) || "g", value: Number(storage.fastSpeed) || 1.8, force: false, predefined: true - }); // default: G + }); tc.settings.version = "0.5.3"; chrome.storage.sync.set({ keyBindings: tc.settings.keyBindings, version: tc.settings.version, - displayKeyCode: tc.settings.displayKeyCode, + displayKey: tc.settings.displayKey, rememberSpeed: tc.settings.rememberSpeed, forceLastSavedSpeed: tc.settings.forceLastSavedSpeed, audioBoolean: tc.settings.audioBoolean, @@ -120,7 +121,7 @@ chrome.storage.sync.get(tc.settings, function (storage) { }); } tc.settings.lastSpeed = Number(storage.lastSpeed); - tc.settings.displayKeyCode = Number(storage.displayKeyCode); + tc.settings.displayKey = String(storage.displayKey); tc.settings.rememberSpeed = Boolean(storage.rememberSpeed); tc.settings.forceLastSavedSpeed = Boolean(storage.forceLastSavedSpeed); tc.settings.audioBoolean = Boolean(storage.audioBoolean); @@ -135,11 +136,11 @@ chrome.storage.sync.get(tc.settings, function (storage) { ) { tc.settings.keyBindings.push({ action: "display", - key: Number(storage.displayKeyCode) || 86, + key: String(storage.displayKey) || "v", value: 0, force: false, predefined: true - }); // default V + }); } initializeWhenReady(document); @@ -556,8 +557,8 @@ function initializeNow(document) { doc.addEventListener( "keydown", function (event) { - var keyCode = event.keyCode; - log("Processing keydown event: " + keyCode, 6); + let key = event.key; + log("Processing keydown event: " + key, 6); // Ignore if following modifier is active. if ( @@ -569,7 +570,7 @@ function initializeNow(document) { event.getModifierState("Hyper") || event.getModifierState("OS") ) { - log("Keydown event ignored due to active modifier: " + keyCode, 5); + log("Keydown event ignored due to active modifier: " + key, 5); return; } @@ -587,7 +588,7 @@ function initializeNow(document) { return false; } - var item = tc.settings.keyBindings.find((item) => item.key === keyCode); + let item = tc.settings.keyBindings.find((item) => item.key === key); if (item) { runAction(item.action, item.value); if (item.force === "true") { diff --git a/options.js b/options.js index 098de6c7..b1f868e9 100644 --- a/options.js +++ b/options.js @@ -2,7 +2,7 @@ var regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm; var tcDefaults = { speed: 1.0, // default: - displayKeyCode: 86, // default: V + displayKey: "v", // default: V rememberSpeed: false, // default: false audioBoolean: false, // default: false startHidden: false, // default: false @@ -10,13 +10,13 @@ var tcDefaults = { enabled: true, // default enabled controllerOpacity: 0.3, // default: 0.3 keyBindings: [ - { action: "display", key: 86, value: 0, force: false, predefined: true }, // V - { action: "slower", key: 83, value: 0.1, force: false, predefined: true }, // S - { action: "faster", key: 68, value: 0.1, force: false, predefined: true }, // D - { action: "rewind", key: 90, value: 10, force: false, predefined: true }, // Z - { action: "advance", key: 88, value: 10, force: false, predefined: true }, // X - { action: "reset", key: 82, value: 1, force: false, predefined: true }, // R - { action: "fast", key: 71, value: 1.8, force: false, predefined: true } // G + { action: "display", key: "v", value: 0, force: false, predefined: true }, + { action: "slower", key: "s", value: 0.1, force: false, predefined: true }, + { action: "faster", key: "d", value: 0.1, force: false, predefined: true }, + { action: "rewind", key: "z", value: 10, force: false, predefined: true }, + { action: "advance", key: "x", value: 10, force: false, predefined: true }, + { action: "reset", key: "r", value: 1, force: false, predefined: true }, + { action: "fast", key: "g", value: 1.8, force: false, predefined: true } ], blacklist: `www.instagram.com twitter.com @@ -35,16 +35,18 @@ function recordKeyPress(e) { ) { e.target.value = getKeyCodeValue(e); e.target.key = e.key; + e.target.keyCode = e.keyCode; e.preventDefault(); e.stopPropagation(); } else if (e.keyCode === 8) { - // Clear input when backspace pressed + // Clear input when backspace pressed, but keep the keycode the same e.target.value = ""; } else if (e.keyCode === 27) { - // When esc clicked, clear input + // When esc clicked, clear input and unbind the key e.target.value = "null"; e.target.key = null; + e.target.keyCode = null; } } @@ -64,22 +66,16 @@ function inputBlur(e) { e.target.value = getKeyCodeValue(e); } -function updateShortcutInputText(inputId, keyCode) { - document.getElementById(inputId).value = - keyCodeAliases[keyCode] || String.fromCharCode(keyCode); - document.getElementById(inputId).keyCode = keyCode; -} - function updateCustomShortcutInputText(inputItem, keyCode) { inputItem.value = keyCodeAliases[keyCode] || String.fromCharCode(keyCode); inputItem.keyCode = keyCode; } -// List of custom actions for which customValue should be disabled -var customActionsNoValues = ["pause", "muted", "mark", "jump", "display"]; +// List of custom actions for which there is no numeric argument +const customActionsNoValues = ["pause", "muted", "mark", "jump", "display"]; function add_shortcut() { - var html = ` @@ -111,7 +107,7 @@ function add_shortcut() { function createKeyBindings(item) { const action = item.querySelector(".customDo").value; - const key = item.querySelector(".customKey").keyCode; + const key = item.querySelector(".customKey").key; const value = Number(item.querySelector(".customValue").value); const force = item.querySelector(".customForce").value; const predefined = !!item.id; //item.id ? true : false; @@ -127,8 +123,7 @@ function createKeyBindings(item) { // Validates settings before saving function validate() { - var valid = true; - var status = document.getElementById("status"); + let status = document.getElementById("status"); document .getElementById("blacklist") .value.split("\n") @@ -140,12 +135,11 @@ function validate() { } catch (err) { status.textContent = "Error: Invalid blacklist regex: " + match + ". Unable to save"; - valid = false; - return; + return false; } } }); - return valid; + return true; } // Saves options to chrome.storage @@ -158,13 +152,13 @@ function save_options() { createKeyBindings(item) ); // Remove added shortcuts - var rememberSpeed = document.getElementById("rememberSpeed").checked; - var forceLastSavedSpeed = document.getElementById("forceLastSavedSpeed").checked; - var audioBoolean = document.getElementById("audioBoolean").checked; - var enabled = document.getElementById("enabled").checked; - var startHidden = document.getElementById("startHidden").checked; - var controllerOpacity = document.getElementById("controllerOpacity").value; - var blacklist = document.getElementById("blacklist").value; + let rememberSpeed = document.getElementById("rememberSpeed").checked; + let forceLastSavedSpeed = document.getElementById("forceLastSavedSpeed").checked; + let audioBoolean = document.getElementById("audioBoolean").checked; + let enabled = document.getElementById("enabled").checked; + let startHidden = document.getElementById("startHidden").checked; + let controllerOpacity = document.getElementById("controllerOpacity").value; + let blacklist = document.getElementById("blacklist").value; chrome.storage.sync.remove([ "resetSpeed", @@ -192,7 +186,7 @@ function save_options() { }, function () { // Update status to let user know options were saved. - var status = document.getElementById("status"); + let status = document.getElementById("status"); status.textContent = "Options saved"; setTimeout(function () { status.textContent = ""; @@ -229,7 +223,7 @@ function restore_options() { //do predefined ones because their value needed for overlay // document.querySelector("#" + item["action"] + " .customDo").value = item["action"]; if (item["action"] == "display" && typeof item["key"] === "undefined") { - item["key"] = storage.displayKeyCode || tcDefaults.displayKeyCode; // V + item["key"] = storage.displayKey || tcDefaults.displayKey; } if (customActionsNoValues.includes(item["action"])) From 6f88156b29b3fe753db06aa77fd36ffdc226885a Mon Sep 17 00:00:00 2001 From: magnus Date: Wed, 15 Dec 2021 11:16:44 -0600 Subject: [PATCH 03/24] Still not working, can't figure out how to log either --- inject.js | 1 + options.js | 49 ++++++++++++++++++++++++++----------------------- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/inject.js b/inject.js index 623d3f95..1b959e96 100644 --- a/inject.js +++ b/inject.js @@ -38,6 +38,7 @@ var tc = { */ function log(message, level) { verbosity = tc.settings.logLevel; + verbosity = 6; //TODO if (typeof level === "undefined") { level = tc.settings.defaultLogLevel; } diff --git a/options.js b/options.js index b1f868e9..8ab1ff63 100644 --- a/options.js +++ b/options.js @@ -1,14 +1,15 @@ var regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm; +// The default values for each setting var tcDefaults = { - speed: 1.0, // default: - displayKey: "v", // default: V - rememberSpeed: false, // default: false - audioBoolean: false, // default: false - startHidden: false, // default: false - forceLastSavedSpeed: false, //default: false - enabled: true, // default enabled - controllerOpacity: 0.3, // default: 0.3 + speed: 1.0, // default speed + displayKey: "v", // is this used? + rememberSpeed: false, + audioBoolean: false, + startHidden: false, + forceLastSavedSpeed: false, + enabled: true, + controllerOpacity: 0.3, keyBindings: [ { action: "display", key: "v", value: 0, force: false, predefined: true }, { action: "slower", key: "s", value: 0.1, force: false, predefined: true }, @@ -33,7 +34,7 @@ function recordKeyPress(e) { (e.keyCode >= 65 && e.keyCode <= 90) || // Letters A-Z keyCodeAliases[e.keyCode] // Other character keys ) { - e.target.value = getKeyCodeValue(e); + e.target.value = getKeyCodeName(e); e.target.key = e.key; e.target.keyCode = e.keyCode; @@ -51,8 +52,8 @@ function recordKeyPress(e) { } function inputFilterNumbersOnly(e) { - var char = e.key; - if (!/[\d\.]$/.test(char) || !/^\d+(\.\d*)?$/.test(e.target.value + char)) { + var chr = e.key; + if (!/[\d\.]$/.test(chr) || !/^\d+(\.\d*)?$/.test(e.target.value + chr)) { e.preventDefault(); e.stopPropagation(); } @@ -63,12 +64,12 @@ function inputFocus(e) { } function inputBlur(e) { - e.target.value = getKeyCodeValue(e); + e.target.value = getKeyCodeName(e); } -function updateCustomShortcutInputText(inputItem, keyCode) { - inputItem.value = keyCodeAliases[keyCode] || String.fromCharCode(keyCode); - inputItem.keyCode = keyCode; +function updateCustomShortcutInputText(inputItem, key) { + inputItem.value = key; + inputItem.key = key; } // List of custom actions for which there is no numeric argument @@ -166,12 +167,12 @@ function save_options() { "fastSpeed", "rewindTime", "advanceTime", - "resetKeyCode", - "slowerKeyCode", - "fasterKeyCode", - "rewindKeyCode", - "advanceKeyCode", - "fastKeyCode" + "resetKey", + "slowerKey", + "fasterKey", + "rewindKey", + "advanceKey", + "fastKey" ]); chrome.storage.sync.set( { @@ -328,13 +329,15 @@ document.addEventListener("DOMContentLoaded", function () { }); }); -function getKeyCodeValue(e) { - if (e.keyCode >= 65 && e.keyCode <= 90) { // Letters A-Z may be capital or lowercase +function getKeyCodeName(e) { + // Letters A-Z may be capital or lowercase + if (e.keyCode >= 65 && e.keyCode <= 90) { return e.key; } return keyCodeAliases[e.keyCode] || String.fromCharCode(e.keyCode); } +// May be a prettier name than e.key const keyCodeAliases = { 0: "null", null: "null", From 8282783cc9fb297fcd467e6c7f927fa4a8e12aaf Mon Sep 17 00:00:00 2001 From: magnus Date: Wed, 15 Dec 2021 13:46:30 -0600 Subject: [PATCH 04/24] Working if you manually set options --- inject.js | 35 ++++++++++++++++------------------- options.js | 2 +- 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/inject.js b/inject.js index 1b959e96..62e399c5 100644 --- a/inject.js +++ b/inject.js @@ -16,7 +16,6 @@ var tc = { blacklist: `\ www.instagram.com twitter.com - vine.co imgur.com teams.microsoft.com `.replace(regStrip, ""), @@ -38,7 +37,7 @@ var tc = { */ function log(message, level) { verbosity = tc.settings.logLevel; - verbosity = 6; //TODO + verbosity = 6; //TODO if (typeof level === "undefined") { level = tc.settings.defaultLogLevel; } @@ -66,7 +65,7 @@ chrome.storage.sync.get(tc.settings, function (storage) { // UPDATE tc.settings.keyBindings.push({ action: "slower", - key: String(storage.slowerKey) || "s" + key: String(storage.slowerKey) || "s", value: Number(storage.speedStep) || 0.1, force: false, predefined: true @@ -156,9 +155,8 @@ function getKeyBindings(action, what = "value") { } function setKeyBindings(action, value) { - tc.settings.keyBindings.find((item) => item.action === action)[ - "value" - ] = value; + tc.settings.keyBindings.find((item) => item.action === action)["value"] = + value; } function defineVideoController() { @@ -346,22 +344,23 @@ function defineVideoController() { var fragment = document.createDocumentFragment(); fragment.appendChild(wrapper); - switch (true) { - case location.hostname == "www.amazon.com": - case location.hostname == "www.reddit.com": + switch (location.hostname) { + case "www.amazon.com": + case "www.reddit.com": case /hbogo\./.test(location.hostname): // insert before parent to bypass overlay this.parent.parentElement.insertBefore(fragment, this.parent); break; - case location.hostname == "www.facebook.com": + case "www.facebook.com": // this is a monstrosity but new FB design does not have *any* // semantic handles for us to traverse the tree, and deep nesting // that we need to bubble up from to get controller to stack correctly - let p = this.parent.parentElement.parentElement.parentElement - .parentElement.parentElement.parentElement.parentElement; + let p = + this.parent.parentElement.parentElement.parentElement.parentElement + .parentElement.parentElement.parentElement; p.insertBefore(fragment, p.firstChild); break; - case location.hostname == "tv.apple.com": + case "tv.apple.com": // insert after parent for correct stacking context this.parent.getRootNode().querySelector(".scrim").prepend(fragment); default: @@ -428,8 +427,7 @@ function setupListener() { function updateSpeedFromEvent(video) { // It's possible to get a rate change on a VIDEO/AUDIO that doesn't have // a video controller attached to it. If we do, ignore it. - if (!video.vsc) - return; + if (!video.vsc) return; var speedIndicator = video.vsc.speedIndicator; var src = video.currentSrc; var speed = Number(video.playbackRate.toFixed(2)); @@ -483,7 +481,7 @@ function initializeWhenReady(document) { if (isBlacklisted()) { return; } - window.addEventListener('load', () => { + window.addEventListener("load", () => { initializeNow(window.document); }); if (document) { @@ -589,7 +587,7 @@ function initializeNow(document) { return false; } - let item = tc.settings.keyBindings.find((item) => item.key === key); + var item = tc.settings.keyBindings.find((item) => item.key === key); if (item) { runAction(item.action, item.value); if (item.force === "true") { @@ -655,8 +653,7 @@ function initializeNow(document) { (x) => x.tagName == "VIDEO" )[0]; if (node) { - if (node.vsc) - node.vsc.remove(); + if (node.vsc) node.vsc.remove(); checkForVideo(node, node.parentNode || mutation.target, true); } } diff --git a/options.js b/options.js index 8ab1ff63..2d98c6a4 100644 --- a/options.js +++ b/options.js @@ -2,7 +2,7 @@ var regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm; // The default values for each setting var tcDefaults = { - speed: 1.0, // default speed + speed: 1.0, // default speed to play videos displayKey: "v", // is this used? rememberSpeed: false, audioBoolean: false, From 25892c92a0b970d1f6e30b1dd865241f3e7c2006 Mon Sep 17 00:00:00 2001 From: magnus Date: Wed, 15 Dec 2021 14:23:47 -0600 Subject: [PATCH 05/24] Appears to be working? --- inject.js | 39 ++++++++++++++++++++++----------------- options.js | 30 ++++++++++++++++++------------ 2 files changed, 40 insertions(+), 29 deletions(-) diff --git a/inject.js b/inject.js index 62e399c5..b724bdab 100644 --- a/inject.js +++ b/inject.js @@ -1,5 +1,3 @@ -var regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm; - var tc = { settings: { lastSpeed: 1.0, // default 1x @@ -37,24 +35,31 @@ var tc = { */ function log(message, level) { verbosity = tc.settings.logLevel; - verbosity = 6; //TODO - if (typeof level === "undefined") { - level = tc.settings.defaultLogLevel; - } + let to_print = ""; if (verbosity >= level) { - if (level === 2) { - console.log("ERROR:" + message); - } else if (level === 3) { - console.log("WARNING:" + message); - } else if (level === 4) { - console.log("INFO:" + message); - } else if (level === 5) { - console.log("DEBUG:" + message); - } else if (level === 6) { - console.log("DEBUG (VERBOSE):" + message); - console.trace(); + switch (level) { + case 2: + to_print = "ERROR: "; + break; + case 3: + to_print = "WARNING: "; + break; + case 4: + to_print = "INFO: "; + break; + case 5: + to_print = "DEBUG: "; + break; + case 6: + to_print = "VERBOSE DEBUG: "; + console.trace(); + break; + default: + console.log("ALERT: Please report how you got this to VideoSpeed"); + console.trace(); } } + console.log("Videospeed: " + to_print + message); } // TODO this has duplicated values from options.js, figure out how to only define information once diff --git a/options.js b/options.js index 2d98c6a4..503d5232 100644 --- a/options.js +++ b/options.js @@ -20,10 +20,10 @@ var tcDefaults = { { action: "fast", key: "g", value: 1.8, force: false, predefined: true } ], blacklist: `www.instagram.com - twitter.com - imgur.com - teams.microsoft.com - `.replace(regStrip, "") +twitter.com +imgur.com +teams.microsoft.com +` }; var keyBindings = []; @@ -136,7 +136,7 @@ function validate() { } catch (err) { status.textContent = "Error: Invalid blacklist regex: " + match + ". Unable to save"; - return false; + return false; } } }); @@ -154,7 +154,9 @@ function save_options() { ); // Remove added shortcuts let rememberSpeed = document.getElementById("rememberSpeed").checked; - let forceLastSavedSpeed = document.getElementById("forceLastSavedSpeed").checked; + let forceLastSavedSpeed = document.getElementById( + "forceLastSavedSpeed" + ).checked; let audioBoolean = document.getElementById("audioBoolean").checked; let enabled = document.getElementById("enabled").checked; let startHidden = document.getElementById("startHidden").checked; @@ -200,7 +202,8 @@ function save_options() { function restore_options() { chrome.storage.sync.get(tcDefaults, function (storage) { document.getElementById("rememberSpeed").checked = storage.rememberSpeed; - document.getElementById("forceLastSavedSpeed").checked = storage.forceLastSavedSpeed; + document.getElementById("forceLastSavedSpeed").checked = + storage.forceLastSavedSpeed; document.getElementById("audioBoolean").checked = storage.audioBoolean; document.getElementById("enabled").checked = storage.enabled; document.getElementById("startHidden").checked = storage.startHidden; @@ -217,7 +220,7 @@ function restore_options() { predefined: true }); } - + for (let i in storage.keyBindings) { var item = storage.keyBindings[i]; if (item.predefined) { @@ -294,7 +297,10 @@ document.addEventListener("DOMContentLoaded", function () { .addEventListener("click", show_experimental); function eventCaller(event, className, funcName) { - if (!event.target.classList || !event.target.classList.contains(className)) { + if ( + !event.target.classList || + !event.target.classList.contains(className) + ) { return; } funcName(event); @@ -385,7 +391,7 @@ const keyCodeAliases = { 220: "\\", 221: "]", 222: "'", - 59: ";", - 61: "+", - 173: "-", + 59: ";", + 61: "+", + 173: "-" }; From 2fdadc192a6ee27e2c4091d38f9a3626a1221af5 Mon Sep 17 00:00:00 2001 From: magnus Date: Wed, 15 Dec 2021 18:34:27 -0600 Subject: [PATCH 06/24] Actually working now. There is no migration for user's old settings --- inject.js | 63 +++++++++++++++++++++++++++++++----------------------- options.js | 5 ++--- 2 files changed, 38 insertions(+), 30 deletions(-) diff --git a/inject.js b/inject.js index b724bdab..35cb56f3 100644 --- a/inject.js +++ b/inject.js @@ -12,11 +12,11 @@ var tc = { controllerOpacity: 0.3, // default: 0.3 keyBindings: [], blacklist: `\ - www.instagram.com - twitter.com - imgur.com - teams.microsoft.com - `.replace(regStrip, ""), +www.instagram.com +twitter.com +imgur.com +teams.microsoft.com +`, defaultLogLevel: 4, logLevel: 3 }, @@ -58,58 +58,78 @@ function log(message, level) { console.log("ALERT: Please report how you got this to VideoSpeed"); console.trace(); } + console.log("Videospeed: " + to_print + message); + } +} + +// Needed because you cannot || with "undefined". Only used in the next function +function storageToString(stored_key, default_key) { + if (stored_key) { + return String(stored_key); + } else { + return default_key; } - console.log("Videospeed: " + to_print + message); } // TODO this has duplicated values from options.js, figure out how to only define information once +const regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm; chrome.storage.sync.get(tc.settings, function (storage) { tc.settings.keyBindings = storage.keyBindings; // Array + + console.log(storage); + + // The first time the extension runs... if (storage.keyBindings.length == 0) { - // if first initialization of 0.5.3 - // UPDATE tc.settings.keyBindings.push({ action: "slower", - key: String(storage.slowerKey) || "s", + key: storageToString(storage.slowerKey, "s"), value: Number(storage.speedStep) || 0.1, force: false, predefined: true }); tc.settings.keyBindings.push({ action: "faster", - key: String(storage.fasterKey) || "d", + key: storageToString(storage.fasterKey, "d"), value: Number(storage.speedStep) || 0.1, force: false, predefined: true }); tc.settings.keyBindings.push({ action: "rewind", - key: String(storage.rewindKey) || "z", + key: storageToString(storage.rewindKey, "z"), value: Number(storage.rewindTime) || 10, force: false, predefined: true }); tc.settings.keyBindings.push({ action: "advance", - key: String(storage.advanceKey) || "x", + key: storageToString(storage.advanceKey, "x"), value: Number(storage.advanceTime) || 10, force: false, predefined: true }); tc.settings.keyBindings.push({ action: "reset", - key: String(storage.resetKey) || "r", + key: storageToString(storage.resetKey, "r"), value: 1.0, force: false, predefined: true }); tc.settings.keyBindings.push({ action: "fast", - key: String(storage.fastKey) || "g", + key: storageToString(storage.fastKey, "g"), value: Number(storage.fastSpeed) || 1.8, force: false, predefined: true }); + // Remove migration from version 0.5.2 + tc.settings.keyBindings.push({ + action: "display", + key: storageToString(storage.displayKey, "v"), + value: 0, + force: false, + predefined: true + }); tc.settings.version = "0.5.3"; chrome.storage.sync.set({ @@ -135,19 +155,6 @@ chrome.storage.sync.get(tc.settings, function (storage) { tc.settings.controllerOpacity = Number(storage.controllerOpacity); tc.settings.blacklist = String(storage.blacklist); - // ensure that there is a "display" binding (for upgrades from versions that had it as a separate binding) - if ( - tc.settings.keyBindings.filter((x) => x.action == "display").length == 0 - ) { - tc.settings.keyBindings.push({ - action: "display", - key: String(storage.displayKey) || "v", - value: 0, - force: false, - predefined: true - }); - } - initializeWhenReady(document); }); @@ -502,6 +509,7 @@ function initializeWhenReady(document) { } log("End initializeWhenReady", 5); } + function inIframe() { try { return window.self !== window.top; @@ -509,6 +517,7 @@ function inIframe() { return true; } } + function getShadow(parent) { let result = []; function getChild(parent) { diff --git a/options.js b/options.js index 503d5232..2463b37e 100644 --- a/options.js +++ b/options.js @@ -1,5 +1,3 @@ -var regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm; - // The default values for each setting var tcDefaults = { speed: 1.0, // default speed to play videos @@ -125,6 +123,7 @@ function createKeyBindings(item) { // Validates settings before saving function validate() { let status = document.getElementById("status"); + const regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm; document .getElementById("blacklist") .value.split("\n") @@ -185,7 +184,7 @@ function save_options() { startHidden: startHidden, controllerOpacity: controllerOpacity, keyBindings: keyBindings, - blacklist: blacklist.replace(regStrip, "") + blacklist: blacklist }, function () { // Update status to let user know options were saved. From 2c127b8d33f12fb182f3c47fd9df739f65383280 Mon Sep 17 00:00:00 2001 From: magnus Date: Wed, 15 Dec 2021 19:16:09 -0600 Subject: [PATCH 07/24] In the progress of refactoring common code to a constants file --- constants.js | 28 +++++++++++++++++ inject.js | 85 ++++++++++++++++++++-------------------------------- options.js | 63 +++++++++++++++++--------------------- 3 files changed, 89 insertions(+), 87 deletions(-) create mode 100644 constants.js diff --git a/constants.js b/constants.js new file mode 100644 index 00000000..a378985d --- /dev/null +++ b/constants.js @@ -0,0 +1,28 @@ +// Strips out whitespace before a line, I think +export const regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm; + +// The default values for each setting +export const tcDefaults = { + speed: 1.0, // default speed to play videos + displayKey: "v", // is this used? + rememberSpeed: false, + audioBoolean: false, + startHidden: false, + forceLastSavedSpeed: false, + enabled: true, + controllerOpacity: 0.3, + keyBindings: [ + { action: "display", key: "v", value: 0, force: false, predefined: true }, + { action: "slower", key: "s", value: 0.1, force: false, predefined: true }, + { action: "faster", key: "d", value: 0.1, force: false, predefined: true }, + { action: "rewind", key: "z", value: 10, force: false, predefined: true }, + { action: "advance", key: "x", value: 10, force: false, predefined: true }, + { action: "reset", key: "r", value: 1, force: false, predefined: true }, + { action: "fast", key: "g", value: 1.8, force: false, predefined: true } + ], + blacklist: `www.instagram.com + twitter.com + imgur.com + teams.microsoft.com + ` + }; \ No newline at end of file diff --git a/inject.js b/inject.js index 35cb56f3..49ce1965 100644 --- a/inject.js +++ b/inject.js @@ -1,3 +1,33 @@ +//import * as constants from "./constants.js"; +// Strips out whitespace before a line, I think +const regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm; + +// The default values for each setting +const tcDefaults = { + speed: 1.0, // default speed to play videos + displayKey: "v", // is this used? + rememberSpeed: false, + audioBoolean: false, + startHidden: false, + forceLastSavedSpeed: false, + enabled: true, + controllerOpacity: 0.3, + keyBindings: [ + { action: "display", key: "v", value: 0, force: false, predefined: true }, + { action: "slower", key: "s", value: 0.1, force: false, predefined: true }, + { action: "faster", key: "d", value: 0.1, force: false, predefined: true }, + { action: "rewind", key: "z", value: 10, force: false, predefined: true }, + { action: "advance", key: "x", value: 10, force: false, predefined: true }, + { action: "reset", key: "r", value: 1, force: false, predefined: true }, + { action: "fast", key: "g", value: 1.8, force: false, predefined: true } + ], + blacklist: `www.instagram.com + twitter.com + imgur.com + teams.microsoft.com + ` + }; + var tc = { settings: { lastSpeed: 1.0, // default 1x @@ -71,8 +101,6 @@ function storageToString(stored_key, default_key) { } } -// TODO this has duplicated values from options.js, figure out how to only define information once -const regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm; chrome.storage.sync.get(tc.settings, function (storage) { tc.settings.keyBindings = storage.keyBindings; // Array @@ -80,56 +108,9 @@ chrome.storage.sync.get(tc.settings, function (storage) { // The first time the extension runs... if (storage.keyBindings.length == 0) { - tc.settings.keyBindings.push({ - action: "slower", - key: storageToString(storage.slowerKey, "s"), - value: Number(storage.speedStep) || 0.1, - force: false, - predefined: true - }); - tc.settings.keyBindings.push({ - action: "faster", - key: storageToString(storage.fasterKey, "d"), - value: Number(storage.speedStep) || 0.1, - force: false, - predefined: true - }); - tc.settings.keyBindings.push({ - action: "rewind", - key: storageToString(storage.rewindKey, "z"), - value: Number(storage.rewindTime) || 10, - force: false, - predefined: true - }); - tc.settings.keyBindings.push({ - action: "advance", - key: storageToString(storage.advanceKey, "x"), - value: Number(storage.advanceTime) || 10, - force: false, - predefined: true - }); - tc.settings.keyBindings.push({ - action: "reset", - key: storageToString(storage.resetKey, "r"), - value: 1.0, - force: false, - predefined: true - }); - tc.settings.keyBindings.push({ - action: "fast", - key: storageToString(storage.fastKey, "g"), - value: Number(storage.fastSpeed) || 1.8, - force: false, - predefined: true - }); - // Remove migration from version 0.5.2 - tc.settings.keyBindings.push({ - action: "display", - key: storageToString(storage.displayKey, "v"), - value: 0, - force: false, - predefined: true - }); + tc.settings.keyBindings = tcDefaults.keyBindings; + + // Removed migration from version 0.5.2 to 0.5.3 tc.settings.version = "0.5.3"; chrome.storage.sync.set({ diff --git a/options.js b/options.js index 2463b37e..7c3b806f 100644 --- a/options.js +++ b/options.js @@ -1,28 +1,32 @@ +//import * as constants from "./constants.js"; +// Strips out whitespace before a line, I think +const regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm; + // The default values for each setting -var tcDefaults = { - speed: 1.0, // default speed to play videos - displayKey: "v", // is this used? - rememberSpeed: false, - audioBoolean: false, - startHidden: false, - forceLastSavedSpeed: false, - enabled: true, - controllerOpacity: 0.3, - keyBindings: [ - { action: "display", key: "v", value: 0, force: false, predefined: true }, - { action: "slower", key: "s", value: 0.1, force: false, predefined: true }, - { action: "faster", key: "d", value: 0.1, force: false, predefined: true }, - { action: "rewind", key: "z", value: 10, force: false, predefined: true }, - { action: "advance", key: "x", value: 10, force: false, predefined: true }, - { action: "reset", key: "r", value: 1, force: false, predefined: true }, - { action: "fast", key: "g", value: 1.8, force: false, predefined: true } - ], - blacklist: `www.instagram.com -twitter.com -imgur.com -teams.microsoft.com -` -}; +const tcDefaults = { + speed: 1.0, // default speed to play videos + displayKey: "v", // is this used? + rememberSpeed: false, + audioBoolean: false, + startHidden: false, + forceLastSavedSpeed: false, + enabled: true, + controllerOpacity: 0.3, + keyBindings: [ + { action: "display", key: "v", value: 0, force: false, predefined: true }, + { action: "slower", key: "s", value: 0.1, force: false, predefined: true }, + { action: "faster", key: "d", value: 0.1, force: false, predefined: true }, + { action: "rewind", key: "z", value: 10, force: false, predefined: true }, + { action: "advance", key: "x", value: 10, force: false, predefined: true }, + { action: "reset", key: "r", value: 1, force: false, predefined: true }, + { action: "fast", key: "g", value: 1.8, force: false, predefined: true } + ], + blacklist: `www.instagram.com + twitter.com + imgur.com + teams.microsoft.com + ` + }; var keyBindings = []; @@ -123,7 +127,6 @@ function createKeyBindings(item) { // Validates settings before saving function validate() { let status = document.getElementById("status"); - const regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm; document .getElementById("blacklist") .value.split("\n") @@ -209,16 +212,6 @@ function restore_options() { document.getElementById("controllerOpacity").value = storage.controllerOpacity; document.getElementById("blacklist").value = storage.blacklist; - - // ensure that there is a "display" binding for upgrades from versions that had it as a separate binding - if (storage.keyBindings.filter((x) => x.action == "display").length == 0) { - storage.keyBindings.push({ - action: "display", - value: 0, - force: false, - predefined: true - }); - } for (let i in storage.keyBindings) { var item = storage.keyBindings[i]; From 3d167407cc2becf81484e2b82c828385e364faa9 Mon Sep 17 00:00:00 2001 From: magnus Date: Wed, 15 Dec 2021 20:48:09 -0600 Subject: [PATCH 08/24] Modularity is not possible it seems --- inject.js | 3 ++- options.js | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/inject.js b/inject.js index 49ce1965..133a82bb 100644 --- a/inject.js +++ b/inject.js @@ -1,4 +1,5 @@ -//import * as constants from "./constants.js"; +// Firefox is a bad browser, except all the rest - this import is not possible +//import {regStrip, tcDefaults} from "./constants.js"; // Strips out whitespace before a line, I think const regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm; diff --git a/options.js b/options.js index 7c3b806f..d217f1ea 100644 --- a/options.js +++ b/options.js @@ -1,4 +1,5 @@ -//import * as constants from "./constants.js"; +// Firefox is a bad browser, except for all the rest - this import is not possible. +//import {regStrip, tcDefaults} as constants from "./constants.js"; // Strips out whitespace before a line, I think const regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm; From 163b9fc3a8e485a7dff70d3772faf35fb75f516f Mon Sep 17 00:00:00 2001 From: magnus Date: Wed, 15 Dec 2021 21:03:37 -0600 Subject: [PATCH 09/24] Improve comments, collapse the imports, add TODOs for things I still want to address before this is merged. --- constants.js | 40 +++++++++++++++++++++------------------- inject.js | 37 ++++++++----------------------------- options.js | 32 +++++--------------------------- 3 files changed, 34 insertions(+), 75 deletions(-) diff --git a/constants.js b/constants.js index a378985d..8615daf6 100644 --- a/constants.js +++ b/constants.js @@ -3,26 +3,28 @@ export const regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm; // The default values for each setting export const tcDefaults = { - speed: 1.0, // default speed to play videos - displayKey: "v", // is this used? - rememberSpeed: false, - audioBoolean: false, - startHidden: false, - forceLastSavedSpeed: false, - enabled: true, - controllerOpacity: 0.3, - keyBindings: [ - { action: "display", key: "v", value: 0, force: false, predefined: true }, - { action: "slower", key: "s", value: 0.1, force: false, predefined: true }, - { action: "faster", key: "d", value: 0.1, force: false, predefined: true }, - { action: "rewind", key: "z", value: 10, force: false, predefined: true }, - { action: "advance", key: "x", value: 10, force: false, predefined: true }, - { action: "reset", key: "r", value: 1, force: false, predefined: true }, - { action: "fast", key: "g", value: 1.8, force: false, predefined: true } - ], - blacklist: `www.instagram.com + // The default speed videos should play with + speed: 1.0, + //TODO is this value used? I don't see why it should be needed, can probably be refactored out? + displayKey: "v", + rememberSpeed: false, + audioBoolean: false, + startHidden: false, + forceLastSavedSpeed: false, + enabled: true, + controllerOpacity: 0.3, + keyBindings: [ + { action: "display", key: "v", value: 0, force: false, predefined: true }, + { action: "slower", key: "s", value: 0.1, force: false, predefined: true }, + { action: "faster", key: "d", value: 0.1, force: false, predefined: true }, + { action: "rewind", key: "z", value: 10, force: false, predefined: true }, + { action: "advance", key: "x", value: 10, force: false, predefined: true }, + { action: "reset", key: "r", value: 1, force: false, predefined: true }, + { action: "fast", key: "g", value: 1.8, force: false, predefined: true } + ], + blacklist: `www.instagram.com twitter.com imgur.com teams.microsoft.com ` - }; \ No newline at end of file +}; diff --git a/inject.js b/inject.js index 133a82bb..45659c33 100644 --- a/inject.js +++ b/inject.js @@ -1,34 +1,13 @@ // Firefox is a bad browser, except all the rest - this import is not possible //import {regStrip, tcDefaults} from "./constants.js"; -// Strips out whitespace before a line, I think const regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm; +const tcDefaults = { speed: 1.0, displayKey: "v", rememberSpeed: false, audioBoolean: false, startHidden: false, forceLastSavedSpeed: false, enabled: true, controllerOpacity: 0.3, keyBindings: [ { action: "display", key: "v", value: 0, force: false, predefined: true }, { action: "slower", key: "s", value: 0.1, force: false, predefined: true }, { action: "faster", key: "d", value: 0.1, force: false, predefined: true }, { action: "rewind", key: "z", value: 10, force: false, predefined: true }, { action: "advance", key: "x", value: 10, force: false, predefined: true }, { action: "reset", key: "r", value: 1, force: false, predefined: true }, { action: "fast", key: "g", value: 1.8, force: false, predefined: true } ], blacklist: `www.instagram.com +twitter.com +imgur.com +teams.microsoft.com +` }; -// The default values for each setting -const tcDefaults = { - speed: 1.0, // default speed to play videos - displayKey: "v", // is this used? - rememberSpeed: false, - audioBoolean: false, - startHidden: false, - forceLastSavedSpeed: false, - enabled: true, - controllerOpacity: 0.3, - keyBindings: [ - { action: "display", key: "v", value: 0, force: false, predefined: true }, - { action: "slower", key: "s", value: 0.1, force: false, predefined: true }, - { action: "faster", key: "d", value: 0.1, force: false, predefined: true }, - { action: "rewind", key: "z", value: 10, force: false, predefined: true }, - { action: "advance", key: "x", value: 10, force: false, predefined: true }, - { action: "reset", key: "r", value: 1, force: false, predefined: true }, - { action: "fast", key: "g", value: 1.8, force: false, predefined: true } - ], - blacklist: `www.instagram.com - twitter.com - imgur.com - teams.microsoft.com - ` - }; - +//TODO parts of this this may be able to be refactored out by using tcDefaults var tc = { settings: { lastSpeed: 1.0, // default 1x @@ -93,7 +72,7 @@ function log(message, level) { } } -// Needed because you cannot || with "undefined". Only used in the next function +// Needed because you cannot || with "undefined". Only used in the next lambda function function storageToString(stored_key, default_key) { if (stored_key) { return String(stored_key); @@ -111,7 +90,7 @@ chrome.storage.sync.get(tc.settings, function (storage) { if (storage.keyBindings.length == 0) { tc.settings.keyBindings = tcDefaults.keyBindings; - // Removed migration from version 0.5.2 to 0.5.3 + //TODO what does this do? tc.settings.version = "0.5.3"; chrome.storage.sync.set({ diff --git a/options.js b/options.js index d217f1ea..355d0577 100644 --- a/options.js +++ b/options.js @@ -1,33 +1,11 @@ // Firefox is a bad browser, except for all the rest - this import is not possible. //import {regStrip, tcDefaults} as constants from "./constants.js"; -// Strips out whitespace before a line, I think const regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm; - -// The default values for each setting -const tcDefaults = { - speed: 1.0, // default speed to play videos - displayKey: "v", // is this used? - rememberSpeed: false, - audioBoolean: false, - startHidden: false, - forceLastSavedSpeed: false, - enabled: true, - controllerOpacity: 0.3, - keyBindings: [ - { action: "display", key: "v", value: 0, force: false, predefined: true }, - { action: "slower", key: "s", value: 0.1, force: false, predefined: true }, - { action: "faster", key: "d", value: 0.1, force: false, predefined: true }, - { action: "rewind", key: "z", value: 10, force: false, predefined: true }, - { action: "advance", key: "x", value: 10, force: false, predefined: true }, - { action: "reset", key: "r", value: 1, force: false, predefined: true }, - { action: "fast", key: "g", value: 1.8, force: false, predefined: true } - ], - blacklist: `www.instagram.com - twitter.com - imgur.com - teams.microsoft.com - ` - }; +const tcDefaults = { speed: 1.0, displayKey: "v", rememberSpeed: false, audioBoolean: false, startHidden: false, forceLastSavedSpeed: false, enabled: true, controllerOpacity: 0.3, keyBindings: [ { action: "display", key: "v", value: 0, force: false, predefined: true }, { action: "slower", key: "s", value: 0.1, force: false, predefined: true }, { action: "faster", key: "d", value: 0.1, force: false, predefined: true }, { action: "rewind", key: "z", value: 10, force: false, predefined: true }, { action: "advance", key: "x", value: 10, force: false, predefined: true }, { action: "reset", key: "r", value: 1, force: false, predefined: true }, { action: "fast", key: "g", value: 1.8, force: false, predefined: true } ], blacklist: `www.instagram.com +twitter.com +imgur.com +teams.microsoft.com +` }; var keyBindings = []; From 576144403933e1288e5fa54123cd6ec975d7d871 Mon Sep 17 00:00:00 2001 From: magnus Date: Wed, 15 Dec 2021 21:12:00 -0600 Subject: [PATCH 10/24] ignore directory that the official tool `web-ext` creates for builds --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 46868679..ee162646 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ local # IntelliJ IDEA .idea/ node_modules + +web-ext-artifacts From 7611b58e9ccdd54271c698c2c5f656bf3a48e387 Mon Sep 17 00:00:00 2001 From: magnus Date: Wed, 15 Dec 2021 21:16:49 -0600 Subject: [PATCH 11/24] Add another TODO where one should be --- .gitignore | 2 +- constants.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index ee162646..0453c462 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,4 @@ local .idea/ node_modules -web-ext-artifacts +web-ext-artifacts/ diff --git a/constants.js b/constants.js index 8615daf6..569aafb3 100644 --- a/constants.js +++ b/constants.js @@ -1,3 +1,4 @@ +//TODO verify accuracy of and fix this comment // Strips out whitespace before a line, I think export const regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm; From 0efef9711eb0f3cf341da0b134fd6dfe2b47c6ac Mon Sep 17 00:00:00 2001 From: magnus Date: Wed, 15 Dec 2021 21:18:40 -0600 Subject: [PATCH 12/24] Remove nothing-comments that don't actually give any information about the code they are documenting --- inject.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/inject.js b/inject.js index 45659c33..5209873a 100644 --- a/inject.js +++ b/inject.js @@ -11,15 +11,15 @@ teams.microsoft.com var tc = { settings: { lastSpeed: 1.0, // default 1x - enabled: true, // default enabled + enabled: true, speeds: {}, // empty object to hold speed for each source - displayKey: "v", // default: V - rememberSpeed: false, // default: false - forceLastSavedSpeed: false, //default: false - audioBoolean: false, // default: false - startHidden: false, // default: false - controllerOpacity: 0.3, // default: 0.3 + displayKey: "v", + rememberSpeed: false, + forceLastSavedSpeed: false, + audioBoolean: false, + startHidden: false, + controllerOpacity: 0.3, keyBindings: [], blacklist: `\ www.instagram.com From e995630c4fff036627e8160231570099a09aa7fa Mon Sep 17 00:00:00 2001 From: magnus Date: Wed, 15 Dec 2021 21:24:37 -0600 Subject: [PATCH 13/24] remove whitespace on a newline --- options.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/options.js b/options.js index 355d0577..28c91b37 100644 --- a/options.js +++ b/options.js @@ -191,7 +191,7 @@ function restore_options() { document.getElementById("controllerOpacity").value = storage.controllerOpacity; document.getElementById("blacklist").value = storage.blacklist; - + for (let i in storage.keyBindings) { var item = storage.keyBindings[i]; if (item.predefined) { From f685d20f479442de7b007f9841372cf98f803885 Mon Sep 17 00:00:00 2001 From: magnus Date: Thu, 16 Dec 2021 08:33:33 -0600 Subject: [PATCH 14/24] Use imports as they should be if they worked --- inject.js | 8 +------- options.js | 8 +------- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/inject.js b/inject.js index 5209873a..3d4bd09a 100644 --- a/inject.js +++ b/inject.js @@ -1,11 +1,5 @@ // Firefox is a bad browser, except all the rest - this import is not possible -//import {regStrip, tcDefaults} from "./constants.js"; -const regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm; -const tcDefaults = { speed: 1.0, displayKey: "v", rememberSpeed: false, audioBoolean: false, startHidden: false, forceLastSavedSpeed: false, enabled: true, controllerOpacity: 0.3, keyBindings: [ { action: "display", key: "v", value: 0, force: false, predefined: true }, { action: "slower", key: "s", value: 0.1, force: false, predefined: true }, { action: "faster", key: "d", value: 0.1, force: false, predefined: true }, { action: "rewind", key: "z", value: 10, force: false, predefined: true }, { action: "advance", key: "x", value: 10, force: false, predefined: true }, { action: "reset", key: "r", value: 1, force: false, predefined: true }, { action: "fast", key: "g", value: 1.8, force: false, predefined: true } ], blacklist: `www.instagram.com -twitter.com -imgur.com -teams.microsoft.com -` }; +import {regStrip, tcDefaults} from "./constants.js"; //TODO parts of this this may be able to be refactored out by using tcDefaults var tc = { diff --git a/options.js b/options.js index 28c91b37..9c8c61f4 100644 --- a/options.js +++ b/options.js @@ -1,11 +1,5 @@ // Firefox is a bad browser, except for all the rest - this import is not possible. -//import {regStrip, tcDefaults} as constants from "./constants.js"; -const regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm; -const tcDefaults = { speed: 1.0, displayKey: "v", rememberSpeed: false, audioBoolean: false, startHidden: false, forceLastSavedSpeed: false, enabled: true, controllerOpacity: 0.3, keyBindings: [ { action: "display", key: "v", value: 0, force: false, predefined: true }, { action: "slower", key: "s", value: 0.1, force: false, predefined: true }, { action: "faster", key: "d", value: 0.1, force: false, predefined: true }, { action: "rewind", key: "z", value: 10, force: false, predefined: true }, { action: "advance", key: "x", value: 10, force: false, predefined: true }, { action: "reset", key: "r", value: 1, force: false, predefined: true }, { action: "fast", key: "g", value: 1.8, force: false, predefined: true } ], blacklist: `www.instagram.com -twitter.com -imgur.com -teams.microsoft.com -` }; +import {regStrip, tcDefaults} as constants from "./constants.js"; var keyBindings = []; From 9a9b17a132123d31f89800bac4d54491def567c9 Mon Sep 17 00:00:00 2001 From: magnus Date: Thu, 16 Dec 2021 08:45:26 -0600 Subject: [PATCH 15/24] This is needed in script tags, might have been part of what I was doing wrong, but still doesn't work --- options.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/options.html b/options.html index 242c326f..974f0b01 100644 --- a/options.html +++ b/options.html @@ -3,7 +3,7 @@ Video Speed Controller: Options - +
From ef51c92de09554932e845b0dbdd1ef599323ea3c Mon Sep 17 00:00:00 2001 From: magnus Date: Thu, 16 Dec 2021 08:51:42 -0600 Subject: [PATCH 16/24] Fix options.js and now it works there --- options.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/options.js b/options.js index 9c8c61f4..2ee7b6b8 100644 --- a/options.js +++ b/options.js @@ -1,5 +1,5 @@ // Firefox is a bad browser, except for all the rest - this import is not possible. -import {regStrip, tcDefaults} as constants from "./constants.js"; +import {regStrip, tcDefaults} from "./constants.js"; var keyBindings = []; From 2c24494c7c2533617c0f282bdd88cb9139ae4a7d Mon Sep 17 00:00:00 2001 From: magnus Date: Thu, 16 Dec 2021 09:01:04 -0600 Subject: [PATCH 17/24] Readd inject's duplication of constants.js code --- constants.js | 8 ++++---- inject.js | 8 +++++++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/constants.js b/constants.js index 569aafb3..06683b9d 100644 --- a/constants.js +++ b/constants.js @@ -24,8 +24,8 @@ export const tcDefaults = { { action: "fast", key: "g", value: 1.8, force: false, predefined: true } ], blacklist: `www.instagram.com - twitter.com - imgur.com - teams.microsoft.com - ` +twitter.com +imgur.com +teams.microsoft.com +` }; diff --git a/inject.js b/inject.js index 3d4bd09a..0b79bb00 100644 --- a/inject.js +++ b/inject.js @@ -1,5 +1,11 @@ // Firefox is a bad browser, except all the rest - this import is not possible -import {regStrip, tcDefaults} from "./constants.js"; +//import {regStrip, tcDefaults} from "./constants.js"; +export const regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm; +export const tcDefaults = { speed: 1.0, displayKey: "v", rememberSpeed: false, audioBoolean: false, startHidden: false, forceLastSavedSpeed: false, enabled: true, controllerOpacity: 0.3, keyBindings: [ { action: "display", key: "v", value: 0, force: false, predefined: true }, { action: "slower", key: "s", value: 0.1, force: false, predefined: true }, { action: "faster", key: "d", value: 0.1, force: false, predefined: true }, { action: "rewind", key: "z", value: 10, force: false, predefined: true }, { action: "advance", key: "x", value: 10, force: false, predefined: true }, { action: "reset", key: "r", value: 1, force: false, predefined: true }, { action: "fast", key: "g", value: 1.8, force: false, predefined: true } ], blacklist: `www.instagram.com +twitter.com +imgur.com +teams.microsoft.com +` }; //TODO parts of this this may be able to be refactored out by using tcDefaults var tc = { From 06b0d6fefa5eed76507e97ca4cc58037cb867bdc Mon Sep 17 00:00:00 2001 From: magnus Date: Thu, 16 Dec 2021 09:06:05 -0600 Subject: [PATCH 18/24] derp --- inject.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inject.js b/inject.js index 0b79bb00..5209873a 100644 --- a/inject.js +++ b/inject.js @@ -1,7 +1,7 @@ // Firefox is a bad browser, except all the rest - this import is not possible //import {regStrip, tcDefaults} from "./constants.js"; -export const regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm; -export const tcDefaults = { speed: 1.0, displayKey: "v", rememberSpeed: false, audioBoolean: false, startHidden: false, forceLastSavedSpeed: false, enabled: true, controllerOpacity: 0.3, keyBindings: [ { action: "display", key: "v", value: 0, force: false, predefined: true }, { action: "slower", key: "s", value: 0.1, force: false, predefined: true }, { action: "faster", key: "d", value: 0.1, force: false, predefined: true }, { action: "rewind", key: "z", value: 10, force: false, predefined: true }, { action: "advance", key: "x", value: 10, force: false, predefined: true }, { action: "reset", key: "r", value: 1, force: false, predefined: true }, { action: "fast", key: "g", value: 1.8, force: false, predefined: true } ], blacklist: `www.instagram.com +const regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm; +const tcDefaults = { speed: 1.0, displayKey: "v", rememberSpeed: false, audioBoolean: false, startHidden: false, forceLastSavedSpeed: false, enabled: true, controllerOpacity: 0.3, keyBindings: [ { action: "display", key: "v", value: 0, force: false, predefined: true }, { action: "slower", key: "s", value: 0.1, force: false, predefined: true }, { action: "faster", key: "d", value: 0.1, force: false, predefined: true }, { action: "rewind", key: "z", value: 10, force: false, predefined: true }, { action: "advance", key: "x", value: 10, force: false, predefined: true }, { action: "reset", key: "r", value: 1, force: false, predefined: true }, { action: "fast", key: "g", value: 1.8, force: false, predefined: true } ], blacklist: `www.instagram.com twitter.com imgur.com teams.microsoft.com From af9002728fd11eb6a103e8a1d53903db64453db8 Mon Sep 17 00:00:00 2001 From: magnus Date: Thu, 16 Dec 2021 09:25:39 -0600 Subject: [PATCH 19/24] Clean up code a bit, revert a dumb change I made in the logging function's behavior --- inject.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inject.js b/inject.js index 5209873a..5f3262e9 100644 --- a/inject.js +++ b/inject.js @@ -21,7 +21,7 @@ var tc = { startHidden: false, controllerOpacity: 0.3, keyBindings: [], - blacklist: `\ + blacklist: ` www.instagram.com twitter.com imgur.com @@ -68,7 +68,7 @@ function log(message, level) { console.log("ALERT: Please report how you got this to VideoSpeed"); console.trace(); } - console.log("Videospeed: " + to_print + message); + console.log(to_print + message); } } From 6415661a5190aee36f3cfe203dc7f1e23571260c Mon Sep 17 00:00:00 2001 From: magnus Date: Thu, 16 Dec 2021 09:27:45 -0600 Subject: [PATCH 20/24] Apply formatter - even though the constants code in inject.js is duplicated and should be essentially hidden, it is dumb to bypass the formatter --- inject.js | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/inject.js b/inject.js index 5f3262e9..7747fb3e 100644 --- a/inject.js +++ b/inject.js @@ -1,11 +1,30 @@ // Firefox is a bad browser, except all the rest - this import is not possible //import {regStrip, tcDefaults} from "./constants.js"; const regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm; -const tcDefaults = { speed: 1.0, displayKey: "v", rememberSpeed: false, audioBoolean: false, startHidden: false, forceLastSavedSpeed: false, enabled: true, controllerOpacity: 0.3, keyBindings: [ { action: "display", key: "v", value: 0, force: false, predefined: true }, { action: "slower", key: "s", value: 0.1, force: false, predefined: true }, { action: "faster", key: "d", value: 0.1, force: false, predefined: true }, { action: "rewind", key: "z", value: 10, force: false, predefined: true }, { action: "advance", key: "x", value: 10, force: false, predefined: true }, { action: "reset", key: "r", value: 1, force: false, predefined: true }, { action: "fast", key: "g", value: 1.8, force: false, predefined: true } ], blacklist: `www.instagram.com +const tcDefaults = { + speed: 1.0, + displayKey: "v", + rememberSpeed: false, + audioBoolean: false, + startHidden: false, + forceLastSavedSpeed: false, + enabled: true, + controllerOpacity: 0.3, + keyBindings: [ + { action: "display", key: "v", value: 0, force: false, predefined: true }, + { action: "slower", key: "s", value: 0.1, force: false, predefined: true }, + { action: "faster", key: "d", value: 0.1, force: false, predefined: true }, + { action: "rewind", key: "z", value: 10, force: false, predefined: true }, + { action: "advance", key: "x", value: 10, force: false, predefined: true }, + { action: "reset", key: "r", value: 1, force: false, predefined: true }, + { action: "fast", key: "g", value: 1.8, force: false, predefined: true } + ], + blacklist: `www.instagram.com twitter.com imgur.com teams.microsoft.com -` }; +` +}; //TODO parts of this this may be able to be refactored out by using tcDefaults var tc = { From 2388f56c23eaed170269513ad0bd44d98406a430 Mon Sep 17 00:00:00 2001 From: magnus Date: Thu, 16 Dec 2021 09:36:38 -0600 Subject: [PATCH 21/24] Realized that backslashes at the start of a multiline string are actually better than keeping the first line right after --- constants.js | 3 ++- inject.js | 5 +++-- options.js | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/constants.js b/constants.js index 06683b9d..86e5f9d1 100644 --- a/constants.js +++ b/constants.js @@ -23,7 +23,8 @@ export const tcDefaults = { { action: "reset", key: "r", value: 1, force: false, predefined: true }, { action: "fast", key: "g", value: 1.8, force: false, predefined: true } ], - blacklist: `www.instagram.com + blacklist: `\ +www.instagram.com twitter.com imgur.com teams.microsoft.com diff --git a/inject.js b/inject.js index 7747fb3e..a92e24d2 100644 --- a/inject.js +++ b/inject.js @@ -19,7 +19,8 @@ const tcDefaults = { { action: "reset", key: "r", value: 1, force: false, predefined: true }, { action: "fast", key: "g", value: 1.8, force: false, predefined: true } ], - blacklist: `www.instagram.com + blacklist: `\ +www.instagram.com twitter.com imgur.com teams.microsoft.com @@ -40,7 +41,7 @@ var tc = { startHidden: false, controllerOpacity: 0.3, keyBindings: [], - blacklist: ` + blacklist: `\ www.instagram.com twitter.com imgur.com diff --git a/options.js b/options.js index 2ee7b6b8..d08b7883 100644 --- a/options.js +++ b/options.js @@ -1,5 +1,5 @@ // Firefox is a bad browser, except for all the rest - this import is not possible. -import {regStrip, tcDefaults} from "./constants.js"; +import { regStrip, tcDefaults } from "./constants.js"; var keyBindings = []; From da40d24691aa88514ccdf1b31ce8069f3418c17e Mon Sep 17 00:00:00 2001 From: magnus Date: Thu, 16 Dec 2021 10:00:15 -0600 Subject: [PATCH 22/24] Revert to switch on true - it is needed for regexes. Fix reddit so its rule matches any reddit --- inject.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/inject.js b/inject.js index a92e24d2..fa6110de 100644 --- a/inject.js +++ b/inject.js @@ -337,14 +337,15 @@ function defineVideoController() { var fragment = document.createDocumentFragment(); fragment.appendChild(wrapper); - switch (location.hostname) { - case "www.amazon.com": - case "www.reddit.com": + // This seemed strange to me at first, but switching on true here allows matching regexes + switch (true) { + case location.hostname == "www.amazon.com": + case /\.*.reddit.com/.test(location.hostname): case /hbogo\./.test(location.hostname): // insert before parent to bypass overlay this.parent.parentElement.insertBefore(fragment, this.parent); break; - case "www.facebook.com": + case location.hostname == "www.facebook.com": // this is a monstrosity but new FB design does not have *any* // semantic handles for us to traverse the tree, and deep nesting // that we need to bubble up from to get controller to stack correctly @@ -353,7 +354,7 @@ function defineVideoController() { .parentElement.parentElement.parentElement; p.insertBefore(fragment, p.firstChild); break; - case "tv.apple.com": + case location.hostname == "tv.apple.com": // insert after parent for correct stacking context this.parent.getRootNode().querySelector(".scrim").prepend(fragment); default: From 9e58e7d1050b194e1e77fb69c5916c03ca9f5f71 Mon Sep 17 00:00:00 2001 From: magnus Date: Thu, 16 Dec 2021 11:47:41 -0600 Subject: [PATCH 23/24] Prepare for configurable sizes, but it is not possible yet; I want to merge with seperate-lower-upper because it changes a lot about settings too --- inject.js | 5 ++++- shadow.css | 15 ++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/inject.js b/inject.js index 79f4e583..2fc49339 100644 --- a/inject.js +++ b/inject.js @@ -293,11 +293,14 @@ function defineVideoController() { var shadowTemplate = `
+ };"> ${speed} diff --git a/shadow.css b/shadow.css index 8cab4a9c..a1b7a44d 100644 --- a/shadow.css +++ b/shadow.css @@ -1,7 +1,6 @@ * { line-height: 1.9em; font-family: sans-serif; - font-size: 13px; } :host(:hover) #controls { @@ -16,9 +15,9 @@ background: black; color: white; - border-radius: 5px; - padding: 5px; - margin: 10px 10px 10px 15px; + border-radius: 0.4em; + padding: 0.4em; + margin: 4px; cursor: default; z-index: 9999999; @@ -61,13 +60,11 @@ button { color: black; background: white; font-weight: bold; - border-radius: 5px; - padding: 3px 6px 3px 6px; - font-size: 14px; - line-height: 14px; + border-radius: 0.4em; + padding: 0.4em 0.55em 0.4em 0.55em; + line-height: 0.5em; border: 1px solid white; font-family: "Lucida Console", Monaco, monospace; - margin-bottom: 2px; } button:focus { From 868e0b78e6d99ca8956daf7ddca93b12d20e342b Mon Sep 17 00:00:00 2001 From: magnus Date: Thu, 16 Dec 2021 11:57:17 -0600 Subject: [PATCH 24/24] Customizable controller size --- constants.js | 1 + inject.js | 7 ++++++- options.html | 4 ++++ options.js | 4 ++++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/constants.js b/constants.js index 86e5f9d1..f7c12624 100644 --- a/constants.js +++ b/constants.js @@ -14,6 +14,7 @@ export const tcDefaults = { forceLastSavedSpeed: false, enabled: true, controllerOpacity: 0.3, + controllerSize: "13px", keyBindings: [ { action: "display", key: "v", value: 0, force: false, predefined: true }, { action: "slower", key: "s", value: 0.1, force: false, predefined: true }, diff --git a/inject.js b/inject.js index b1f6dc71..273da5d9 100644 --- a/inject.js +++ b/inject.js @@ -10,6 +10,7 @@ const tcDefaults = { forceLastSavedSpeed: false, enabled: true, controllerOpacity: 0.3, + controllerSize: "13px", keyBindings: [ { action: "display", key: "v", value: 0, force: false, predefined: true }, { action: "slower", key: "s", value: 0.1, force: false, predefined: true }, @@ -40,6 +41,7 @@ var tc = { audioBoolean: false, startHidden: false, controllerOpacity: 0.3, + controllerSize: "13px", keyBindings: [], blacklist: `\ www.instagram.com @@ -113,6 +115,7 @@ chrome.storage.sync.get(tc.settings, function (storage) { //TODO what does this do? tc.settings.version = "0.5.3"; + //TODO we should refactor tc so we can just call chrome.storage.sync.set(tc.settings) chrome.storage.sync.set({ keyBindings: tc.settings.keyBindings, version: tc.settings.version, @@ -123,6 +126,7 @@ chrome.storage.sync.get(tc.settings, function (storage) { startHidden: tc.settings.startHidden, enabled: tc.settings.enabled, controllerOpacity: tc.settings.controllerOpacity, + controllerSize: tc.settings.controllerSize, blacklist: tc.settings.blacklist.replace(regStrip, "") }); } @@ -134,6 +138,7 @@ chrome.storage.sync.get(tc.settings, function (storage) { tc.settings.enabled = Boolean(storage.enabled); tc.settings.startHidden = Boolean(storage.startHidden); tc.settings.controllerOpacity = Number(storage.controllerOpacity); + tc.settings.controllerSize = String(storage.controllerSize); tc.settings.blacklist = String(storage.blacklist); initializeWhenReady(document); @@ -287,7 +292,7 @@ function defineVideoController() { diff --git a/options.html b/options.html index 974f0b01..11fa38de 100644 --- a/options.html +++ b/options.html @@ -160,6 +160,10 @@

Other

+
+ + +