From 493fb3fc7219131040a369e7bb1f46928192cb3c Mon Sep 17 00:00:00 2001
From: Ajay Ramachandran
Date: Wed, 10 Jul 2019 11:55:09 -0400
Subject: [PATCH 01/23] Changed the way it detects when a page is not YouTube
and prevented lastError.
---
popup.js | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/popup.js b/popup.js
index 3b6d337c..93f60182 100644
--- a/popup.js
+++ b/popup.js
@@ -25,14 +25,6 @@ chrome.storage.local.get(["dontShowNoticeAgain"], function(result) {
}
});
-//if no response comes by this point, give up
-setTimeout(function() {
- if (!isYouTubeTab) {
- document.getElementById("loadingIndicator").innerHTML = "This probably isn't a YouTube tab, or you clicked too early. " +
- "If you know this is a YouTube tab, close this popup and open it again.";
- }
-}, 100);
-
chrome.tabs.query({
active: true,
currentWindow: true
@@ -72,6 +64,13 @@ function loadTabData(tabs) {
}
function infoFound(request) {
+ if(chrome.runtime.lastError) {
+ //This page doesn't have the injected content script, or at least not yet
+ document.getElementById("loadingIndicator").innerHTML = "This probably isn't a YouTube tab, or you clicked too early. " +
+ "If you know this is a YouTube tab, close this popup and open it again.";
+ return;
+ }
+
//if request is undefined, then the page currently being browsed is not YouTube
if (request != undefined) {
//this must be a YouTube video
From 2bef9ed08db6ae3aa297755ae27161acc766946d Mon Sep 17 00:00:00 2001
From: Ajay Ramachandran
Date: Wed, 10 Jul 2019 12:04:30 -0400
Subject: [PATCH 02/23] Made it not load the extension on the YouTube homepage
and channel pages.
---
popup.js | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/popup.js b/popup.js
index 93f60182..5e111661 100644
--- a/popup.js
+++ b/popup.js
@@ -34,6 +34,12 @@ function loadTabData(tabs) {
//set current videoID
currentVideoID = getYouTubeVideoID(tabs[0].url);
+ if (!currentVideoID) {
+ //this isn't a YouTube video then
+ displayNoVideo();
+ return;
+ }
+
//load video times for this video
let sponsorTimeKey = "sponsorTimes" + currentVideoID;
chrome.storage.local.get([sponsorTimeKey], function(result) {
@@ -66,8 +72,7 @@ function loadTabData(tabs) {
function infoFound(request) {
if(chrome.runtime.lastError) {
//This page doesn't have the injected content script, or at least not yet
- document.getElementById("loadingIndicator").innerHTML = "This probably isn't a YouTube tab, or you clicked too early. " +
- "If you know this is a YouTube tab, close this popup and open it again.";
+ displayNoVideo();
return;
}
@@ -215,6 +220,12 @@ function showNoticeAgain() {
document.getElementById("showNoticeAgain").style.display = "none";
}
+//this is not a YouTube video page
+function displayNoVideo() {
+ document.getElementById("loadingIndicator").innerHTML = "This probably isn't a YouTube tab, or you clicked too early. " +
+ "If you know this is a YouTube tab, close this popup and open it again.";
+}
+
//converts time in seconds to minutes:seconds
function getFormattedTime(seconds) {
let minutes = Math.floor(seconds / 60);
From 2e6a61680613d9f7736819bd565387caed7f249c Mon Sep 17 00:00:00 2001
From: Ajay Ramachandran
Date: Wed, 10 Jul 2019 12:20:29 -0400
Subject: [PATCH 03/23] Added nice buttons to the popup
---
popup.css | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
popup.html | 10 +++++---
2 files changed, 78 insertions(+), 5 deletions(-)
diff --git a/popup.css b/popup.css
index 2c0193cd..6d41a2df 100644
--- a/popup.css
+++ b/popup.css
@@ -4,4 +4,75 @@
body {
width: 300px;
-}
\ No newline at end of file
+}
+
+.greenButton {
+ background-color:#44c767;
+ -moz-border-radius:28px;
+ -webkit-border-radius:28px;
+ border-radius:28px;
+ border:1px solid #18ab29;
+ display:inline-block;
+ cursor:pointer;
+ color:#ffffff;
+ font-family:Arial;
+ font-size:16px;
+ padding:8px 37px;
+ text-decoration:none;
+ text-shadow:0px 0px 0px #2f6627;
+}
+.greenButton:hover {
+ background-color:#5cbf2a;
+}
+.greenButton:active {
+ position:relative;
+ top:1px;
+}
+
+.noticeButton {
+ -moz-box-shadow:inset 0px 1px 0px 0px #cf866c;
+ -webkit-box-shadow:inset 0px 1px 0px 0px #cf866c;
+ box-shadow:inset 0px 1px 0px 0px #cf866c;
+ background-color:#d0451b;
+ -moz-border-radius:3px;
+ -webkit-border-radius:3px;
+ border-radius:3px;
+ border:1px solid #942911;
+ display:inline-block;
+ cursor:pointer;
+ color:#ffffff;
+ font-family:Arial;
+ font-size:13px;
+ padding:6px 24px;
+ text-decoration:none;
+ text-shadow:0px 1px 0px #854629;
+}
+.noticeButton:hover {
+ background-color:#bc3315;
+}
+.noticeButton:active {
+ position:relative;
+ top:1px;
+}
+
+.smallButton {
+ background-color:#2dabf9;
+ -moz-border-radius:3px;
+ -webkit-border-radius:3px;
+ border-radius:3px;
+ border:1px solid #2dabf9;
+ display:inline-block;
+ cursor:pointer;
+ color:#ffffff;
+ font-family:Arial;
+ font-size:14px;
+ padding:6px 10px;
+ text-decoration:none;
+}
+.smallButton:hover {
+ background-color:#0688fa;
+}
+.smallButton:active {
+ position:relative;
+ top:1px;
+}
diff --git a/popup.html b/popup.html
index bcbc111a..a5bca650 100644
--- a/popup.html
+++ b/popup.html
@@ -32,7 +32,7 @@
-
+
@@ -43,16 +43,18 @@
- Clear Times
+ Clear Times
+
- Submit Times
+ Submit Times
+
- Show Notice Again
+ Show Notice Again
From 9b1333603799b5e57597794c195c4eb3fda055f5 Mon Sep 17 00:00:00 2001
From: Ajay Ramachandran
Date: Wed, 10 Jul 2019 12:23:49 -0400
Subject: [PATCH 04/23] Made the sponsorships starts button update with the
clear times button.
---
popup.js | 27 +++++++++++++++++++--------
1 file changed, 19 insertions(+), 8 deletions(-)
diff --git a/popup.js b/popup.js
index 5e111661..306308dd 100644
--- a/popup.js
+++ b/popup.js
@@ -129,14 +129,7 @@ chrome.runtime.onMessage.addListener(function (request, sender, callback) {
let sponsorTimeKey = "sponsorTimes" + currentVideoID;
chrome.storage.local.set({[sponsorTimeKey]: sponsorTimes});
- //update startTimeChosen variable
- if (!startTimeChosen) {
- startTimeChosen = true;
- document.getElementById("sponsorStart").innerHTML = "Sponsorship Ends Now";
- } else {
- startTimeChosen = false;
- document.getElementById("sponsorStart").innerHTML = "Sponsorship Starts Now";
- }
+ updateStartTimeChosen();
//display video times on screen
displaySponsorTimes();
@@ -192,6 +185,8 @@ function clearTimes() {
//hide submission section
document.getElementById("submissionSection").style.display = "none";
+
+ resetStartTimeChosen();
}
function submitTimes() {
@@ -220,6 +215,22 @@ function showNoticeAgain() {
document.getElementById("showNoticeAgain").style.display = "none";
}
+function updateStartTimeChosen() {
+ //update startTimeChosen variable
+ if (!startTimeChosen) {
+ startTimeChosen = true;
+ document.getElementById("sponsorStart").innerHTML = "Sponsorship Ends Now";
+ } else {
+ resetStartTimeChosen();
+ }
+}
+
+//set it to false
+function resetStartTimeChosen() {
+ startTimeChosen = false;
+ document.getElementById("sponsorStart").innerHTML = "Sponsorship Starts Now";
+}
+
//this is not a YouTube video page
function displayNoVideo() {
document.getElementById("loadingIndicator").innerHTML = "This probably isn't a YouTube tab, or you clicked too early. " +
From cfcd94d177e6ef783fd5466b8c3709ee446898e6 Mon Sep 17 00:00:00 2001
From: Ajay Ramachandran
Date: Wed, 10 Jul 2019 14:43:14 -0400
Subject: [PATCH 05/23] Made the button's nice on the notice.
---
content.css | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++
content.js | 31 +++++++-----------------
manifest.json | 3 +++
3 files changed, 77 insertions(+), 23 deletions(-)
create mode 100644 content.css
diff --git a/content.css b/content.css
new file mode 100644
index 00000000..670bc4d0
--- /dev/null
+++ b/content.css
@@ -0,0 +1,66 @@
+#sponsorSkipNotice {
+ min-height: 120px;
+ min-width: 400px;
+ background-color: rgba(153, 153, 153, 0.8);
+ position: absolute;
+ z-index: 1;
+}
+
+#sponsorSkipMessage {
+ font-size: 18px;
+ color: #000000;
+ text-align: center;
+ margin-top: 10px;
+}
+
+.sponsorSkipButton {
+ background-color:#44c767;
+ -moz-border-radius:28px;
+ -webkit-border-radius:28px;
+ border-radius:28px;
+ border:1px solid #18ab29;
+ display:inline-block;
+ cursor:pointer;
+ color:#ffffff;
+ font-family:Arial;
+ font-size:16px;
+ padding:8px 15px;
+ text-decoration:none;
+ text-shadow:0px 0px 0px #2f6627;
+
+ margin-top: 5px;
+ margin-right: 15px;
+}
+.sponsorSkipButton:hover {
+ background-color:#5cbf2a;
+}
+.sponsorSkipButton:active {
+ position:relative;
+ top:1px;
+}
+
+.sponsorSkipDontShowButton {
+ -moz-box-shadow:inset 0px 1px 0px 0px #cf866c;
+ -webkit-box-shadow:inset 0px 1px 0px 0px #cf866c;
+ box-shadow:inset 0px 1px 0px 0px #cf866c;
+ background-color:#d0451b;
+ -moz-border-radius:3px;
+ -webkit-border-radius:3px;
+ border-radius:3px;
+ border:1px solid #942911;
+ display:inline-block;
+ cursor:pointer;
+ color:#ffffff;
+ font-family:Arial;
+ font-size:13px;
+ padding:6px 24px;
+ text-decoration:none;
+ text-shadow:0px 1px 0px #854629;
+}
+.sponsorSkipDontShowButton:hover {
+ background-color:#bc3315;
+}
+.sponsorSkipDontShowButton:active {
+ position:relative;
+ top:1px;
+}
\ No newline at end of file
diff --git a/content.js b/content.js
index 0a37e502..b371cc49 100644
--- a/content.js
+++ b/content.js
@@ -132,49 +132,34 @@ function openSkipNotice(){
}
var noticeElement = document.createElement("div");
-
- noticeElement.id = 'sponsorSkipNotice'
- noticeElement.style.minHeight = "100px";
- noticeElement.style.minWidth = "400px";
- noticeElement.style.backgroundColor = "rgba(153, 153, 153, 0.8)";
- noticeElement.style.fontSize = "24px";
- noticeElement.style.position = "absolute"
- noticeElement.style.zIndex = "1";
+ noticeElement.id = "sponsorSkipNotice";
- var noticeMessage = document.createElement("p");
+ var noticeMessage = document.createElement("p");
+ noticeMessage.id = "sponsorSkipMessage";
noticeMessage.innerText = "Hey, you just skipped a sponsor!";
- noticeMessage.style.fontSize = "18px";
- noticeMessage.style.color = "#000000";
- noticeMessage.style.textAlign = "center";
- noticeMessage.style.marginTop = "10px";
var buttonContainer = document.createElement("div");
buttonContainer.setAttribute("align", "center");
var goBackButton = document.createElement("button");
- goBackButton.innerText = "Go back";
- goBackButton.style.fontSize = "13px";
- goBackButton.style.color = "#000000";
- goBackButton.style.marginTop = "5px";
+ goBackButton.innerText = "Go back";
+ goBackButton.className = "sponsorSkipButton";
goBackButton.addEventListener("click", goBackToPreviousTime);
var hideButton = document.createElement("button");
hideButton.innerText = "Hide";
- hideButton.style.fontSize = "13px";
- hideButton.style.color = "#000000";
- hideButton.style.marginTop = "5px";
+ hideButton.className = "sponsorSkipButton";
hideButton.addEventListener("click", closeSkipNotice);
var dontShowAgainButton = document.createElement("button");
dontShowAgainButton.innerText = "Don't Show This Again";
- dontShowAgainButton.style.fontSize = "13px";
- dontShowAgainButton.style.color = "#000000";
- dontShowAgainButton.style.marginTop = "5px";
+ dontShowAgainButton.className = "sponsorSkipDontShowButton";
dontShowAgainButton.addEventListener("click", dontShowNoticeAgain);
buttonContainer.appendChild(goBackButton);
buttonContainer.appendChild(hideButton);
buttonContainer.appendChild(document.createElement("br"));
+ buttonContainer.appendChild(document.createElement("br"));
buttonContainer.appendChild(dontShowAgainButton);
noticeElement.appendChild(noticeMessage);
diff --git a/manifest.json b/manifest.json
index 73259e2f..e576dd08 100644
--- a/manifest.json
+++ b/manifest.json
@@ -10,6 +10,9 @@
"js": [
"content-config.js",
"content.js"
+ ],
+ "css": [
+ "content.css"
]
}
],
From e5f2c5747b31009a8a4334bdb6642e9b165fef94 Mon Sep 17 00:00:00 2001
From: Ajay Ramachandran
Date: Wed, 10 Jul 2019 15:00:48 -0400
Subject: [PATCH 06/23] Added a font and background color.
---
popup.css | 9 +++----
popup.html | 70 ++++++++++++++++++++++++++----------------------------
2 files changed, 39 insertions(+), 40 deletions(-)
diff --git a/popup.css b/popup.css
index 6d41a2df..b48e1904 100644
--- a/popup.css
+++ b/popup.css
@@ -1,9 +1,13 @@
+@import url('https://fonts.googleapis.com/css?family=Source+Sans+Pro&display=swap');
+
* {
- font-family: 'Arial';
+ font-family: 'Source Sans Pro', sans-serif;
}
body {
+ font-size: 14px;
width: 300px;
+ background-color: #d9ffdc;
}
.greenButton {
@@ -15,7 +19,6 @@ body {
display:inline-block;
cursor:pointer;
color:#ffffff;
- font-family:Arial;
font-size:16px;
padding:8px 37px;
text-decoration:none;
@@ -41,7 +44,6 @@ body {
display:inline-block;
cursor:pointer;
color:#ffffff;
- font-family:Arial;
font-size:13px;
padding:6px 24px;
text-decoration:none;
@@ -64,7 +66,6 @@ body {
display:inline-block;
cursor:pointer;
color:#ffffff;
- font-family:Arial;
font-size:14px;
padding:6px 10px;
text-decoration:none;
diff --git a/popup.html b/popup.html
index a5bca650..35809532 100644
--- a/popup.html
+++ b/popup.html
@@ -13,48 +13,46 @@
-
-
-
-
+
+
+
+
-
-
-
-
-
Show Notice Again
+
+
+
+
Show Notice Again
From 42f1d05fe8c9d8fee01ec8afbc551da9f75f3652 Mon Sep 17 00:00:00 2001
From: Ajay Ramachandran
Date: Wed, 10 Jul 2019 15:11:55 -0400
Subject: [PATCH 07/23] Added background color to notice and font.
Also improved the notice's buttons a little.
---
Source+Sans+Pro.css | 56 +++++++++++++++++++++++++++++++++++++++++++++
content.css | 13 +++++++----
content.js | 11 ++++++---
manifest.json | 3 ++-
4 files changed, 74 insertions(+), 9 deletions(-)
create mode 100644 Source+Sans+Pro.css
diff --git a/Source+Sans+Pro.css b/Source+Sans+Pro.css
new file mode 100644
index 00000000..3a00466c
--- /dev/null
+++ b/Source+Sans+Pro.css
@@ -0,0 +1,56 @@
+/* cyrillic-ext */
+@font-face {
+ font-family: 'Source Sans Pro';
+ font-style: normal;
+ font-weight: 400;
+ src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(https://fonts.gstatic.com/s/sourcesanspro/v12/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lqDY.woff2) format('woff2');
+ unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
+}
+/* cyrillic */
+@font-face {
+ font-family: 'Source Sans Pro';
+ font-style: normal;
+ font-weight: 400;
+ src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(https://fonts.gstatic.com/s/sourcesanspro/v12/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lqDY.woff2) format('woff2');
+ unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+}
+/* greek-ext */
+@font-face {
+ font-family: 'Source Sans Pro';
+ font-style: normal;
+ font-weight: 400;
+ src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(https://fonts.gstatic.com/s/sourcesanspro/v12/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lqDY.woff2) format('woff2');
+ unicode-range: U+1F00-1FFF;
+}
+/* greek */
+@font-face {
+ font-family: 'Source Sans Pro';
+ font-style: normal;
+ font-weight: 400;
+ src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(https://fonts.gstatic.com/s/sourcesanspro/v12/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lqDY.woff2) format('woff2');
+ unicode-range: U+0370-03FF;
+}
+/* vietnamese */
+@font-face {
+ font-family: 'Source Sans Pro';
+ font-style: normal;
+ font-weight: 400;
+ src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(https://fonts.gstatic.com/s/sourcesanspro/v12/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lqDY.woff2) format('woff2');
+ unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
+}
+/* latin-ext */
+@font-face {
+ font-family: 'Source Sans Pro';
+ font-style: normal;
+ font-weight: 400;
+ src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(https://fonts.gstatic.com/s/sourcesanspro/v12/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lqDY.woff2) format('woff2');
+ unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Source Sans Pro';
+ font-style: normal;
+ font-weight: 400;
+ src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(https://fonts.gstatic.com/s/sourcesanspro/v12/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7l.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
diff --git a/content.css b/content.css
index 670bc4d0..13bb025b 100644
--- a/content.css
+++ b/content.css
@@ -1,7 +1,11 @@
+.sponsorSkipObject {
+ font-family: 'Source Sans Pro', sans-serif;
+}
+
#sponsorSkipNotice {
min-height: 120px;
min-width: 400px;
- background-color: rgba(153, 153, 153, 0.8);
+ background-color: rgba(217, 255, 220, 0.8);
position: absolute;
z-index: 1;
}
@@ -11,6 +15,7 @@
color: #000000;
text-align: center;
margin-top: 10px;
+ font-weight: bold;
}
.sponsorSkipButton {
@@ -22,9 +27,8 @@
display:inline-block;
cursor:pointer;
color:#ffffff;
- font-family:Arial;
- font-size:16px;
- padding:8px 15px;
+ font-size:14px;
+ padding:4px 15px;
text-decoration:none;
text-shadow:0px 0px 0px #2f6627;
@@ -51,7 +55,6 @@
display:inline-block;
cursor:pointer;
color:#ffffff;
- font-family:Arial;
font-size:13px;
padding:6px 24px;
text-decoration:none;
diff --git a/content.js b/content.js
index b371cc49..df3b4572 100644
--- a/content.js
+++ b/content.js
@@ -108,7 +108,7 @@ function sponsorCheck(sponsorTimes) { // Video skipping
//send out the message saying that a sponsor message was skipped
openSkipNotice();
- setTimeout(closeSkipNotice, 2500);
+ // setTimeout(closeSkipNotice, 2500);
}
lastTime = v.currentTime;
@@ -133,9 +133,11 @@ function openSkipNotice(){
var noticeElement = document.createElement("div");
noticeElement.id = "sponsorSkipNotice";
+ noticeElement.className = "sponsorSkipObject";
var noticeMessage = document.createElement("p");
noticeMessage.id = "sponsorSkipMessage";
+ noticeMessage.className = "sponsorSkipObject";
noticeMessage.innerText = "Hey, you just skipped a sponsor!";
var buttonContainer = document.createElement("div");
@@ -143,16 +145,19 @@ function openSkipNotice(){
var goBackButton = document.createElement("button");
goBackButton.innerText = "Go back";
+ goBackButton.className = "sponsorSkipObject";
goBackButton.className = "sponsorSkipButton";
goBackButton.addEventListener("click", goBackToPreviousTime);
var hideButton = document.createElement("button");
- hideButton.innerText = "Hide";
+ hideButton.innerText = "Hide";
+ hideButton.className = "sponsorSkipObject";
hideButton.className = "sponsorSkipButton";
hideButton.addEventListener("click", closeSkipNotice);
var dontShowAgainButton = document.createElement("button");
- dontShowAgainButton.innerText = "Don't Show This Again";
+ dontShowAgainButton.innerText = "Don't Show This Again";
+ dontShowAgainButton.className = "sponsorSkipObject";
dontShowAgainButton.className = "sponsorSkipDontShowButton";
dontShowAgainButton.addEventListener("click", dontShowNoticeAgain);
diff --git a/manifest.json b/manifest.json
index e576dd08..b97d75aa 100644
--- a/manifest.json
+++ b/manifest.json
@@ -12,7 +12,8 @@
"content.js"
],
"css": [
- "content.css"
+ "content.css",
+ "Source+Sans+Pro.css"
]
}
],
From efd9b925dcd01c231f0423ac9abd8ee3ae6cf16a Mon Sep 17 00:00:00 2001
From: Ajay Ramachandran
Date: Wed, 10 Jul 2019 19:25:29 -0400
Subject: [PATCH 08/23] Made it generate and submit a userID defining this
user.
---
background.js | 44 +++++++++++++++++++++++++++++++++++++-------
content.js | 2 +-
2 files changed, 38 insertions(+), 8 deletions(-)
diff --git a/background.js b/background.js
index 1390b093..44c7542c 100644
--- a/background.js
+++ b/background.js
@@ -1,5 +1,8 @@
var previousVideoID = null
+//the id of this user, randomly generated once per install
+var userID = null;
+
chrome.tabs.onUpdated.addListener( // On tab update
function(tabId, changeInfo, tab) {
if (changeInfo != undefined && changeInfo.url != undefined) {
@@ -16,8 +19,6 @@ chrome.tabs.onUpdated.addListener( // On tab update
}
);
-
-
chrome.runtime.onMessage.addListener(function (request, sender, callback) {
if (request.message == "submitTimes") {
submitTimes(request.videoID);
@@ -42,9 +43,13 @@ function submitTimes(videoID) {
//submit these times
for (let i = 0; i < sponsorTimes.length; i++) {
let xmlhttp = new XMLHttpRequest();
- //submit the sponsorTime
- xmlhttp.open('GET', 'http://localhost/api/postVideoSponsorTimes?videoID=' + videoID + "&startTime=" + sponsorTimes[i][0] + "&endTime=" + sponsorTimes[i][1], true);
- xmlhttp.send();
+
+ let userIDStorage = getUserID(function(userIDStorage) {
+ //submit the sponsorTime
+ xmlhttp.open('GET', 'http://localhost/api/postVideoSponsorTimes?videoID=' + videoID + "&startTime=" + sponsorTimes[i][0] + "&endTime=" + sponsorTimes[i][1]
+ + "&userID=" + userIDStorage, true);
+ xmlhttp.send();
+ });
}
}
});
@@ -72,13 +77,38 @@ function videoIDChange(currentVideoID) {
previousVideoID = currentVideoID;
});
} else {
- console.log(currentVideoID)
previousVideoID = currentVideoID;
}
}
+function getUserID(callback) {
+ if (userID != null) {
+ callback(userID);
+ }
+
+ //if it is not cached yet, grab it from storage
+ chrome.storage.local.get(["userID"], function(result) {
+ let userIDStorage = result.userID;
+ if (userIDStorage != undefined) {
+ userID = userIDStorage;
+ callback(userID);
+ } else {
+ //generate a userID
+ userID = generateUUID();
+
+ //save this UUID
+ chrome.storage.local.set({"userID": userID});
+
+ callback(userID);
+ }
+ });
+}
+
function getYouTubeVideoID(url) { // Return video id or false
var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/;
var match = url.match(regExp);
return (match && match[7].length == 11) ? match[7] : false;
-}
\ No newline at end of file
+}
+
+//uuid generator function from https://gist.github.com/jed/982883
+function generateUUID(a){return a?(a^Math.random()*16>>a/4).toString(16):([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,generateUUID)}
\ No newline at end of file
diff --git a/content.js b/content.js
index df3b4572..6e2d9b84 100644
--- a/content.js
+++ b/content.js
@@ -108,7 +108,7 @@ function sponsorCheck(sponsorTimes) { // Video skipping
//send out the message saying that a sponsor message was skipped
openSkipNotice();
- // setTimeout(closeSkipNotice, 2500);
+ setTimeout(closeSkipNotice, 2500);
}
lastTime = v.currentTime;
From ca4f91f39b1c176fefa359fd34ab268ba56018bc Mon Sep 17 00:00:00 2001
From: Ajay Ramachandran
Date: Thu, 11 Jul 2019 14:00:03 -0400
Subject: [PATCH 09/23] Made time have a zero in front when it is less than 10
seconds.
---
popup.js | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/popup.js b/popup.js
index 306308dd..a322241b 100644
--- a/popup.js
+++ b/popup.js
@@ -241,6 +241,11 @@ function displayNoVideo() {
function getFormattedTime(seconds) {
let minutes = Math.floor(seconds / 60);
let secondsDisplay = Math.round(seconds - minutes * 60);
+ if (secondsDisplay < 10) {
+ //add a zero
+ secondsDisplay = "0" + secondsDisplay;
+ }
+
let formatted = minutes+ ":" + secondsDisplay;
return formatted;
From 370a1d1fb2802b00fdf45a750d22ac5df9d0cc14 Mon Sep 17 00:00:00 2001
From: Ajay Ramachandran
Date: Thu, 11 Jul 2019 16:15:47 -0400
Subject: [PATCH 10/23] Added logo and changed up colours to support logo.
Logo by @munadikieh
---
.gitignore | 3 ++-
README.md | 3 +++
SponsorBlocker144px.png | Bin 0 -> 5374 bytes
background.js | 2 +-
content.css | 18 +++++++++++++-----
content.js | 5 +++++
icons/IconSponsorBlocker16px.png | Bin 0 -> 551 bytes
icons/IconSponsorBlocker256px.png | Bin 0 -> 6891 bytes
icons/IconSponsorBlocker32px.png | Bin 0 -> 1207 bytes
icons/LogoSponsorBlocker128px.png | Bin 0 -> 8357 bytes
icons/LogoSponsorBlocker256px.png | Bin 0 -> 10002 bytes
icons/LogoSponsorBlocker64px.png | Bin 0 -> 4085 bytes
manifest.json | 10 ++++++++++
popup.css | 20 ++++++++++++--------
popup.html | 2 ++
15 files changed, 48 insertions(+), 15 deletions(-)
create mode 100644 SponsorBlocker144px.png
create mode 100644 icons/IconSponsorBlocker16px.png
create mode 100644 icons/IconSponsorBlocker256px.png
create mode 100644 icons/IconSponsorBlocker32px.png
create mode 100644 icons/LogoSponsorBlocker128px.png
create mode 100644 icons/LogoSponsorBlocker256px.png
create mode 100644 icons/LogoSponsorBlocker64px.png
diff --git a/.gitignore b/.gitignore
index 045c879c..a98ca8ff 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
-content-config.js
\ No newline at end of file
+content-config.js
+ignored
\ No newline at end of file
diff --git a/README.md b/README.md
index c9cce414..4da6c78d 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,6 @@
+
+Logo by @munadikieh
+
# SponsorBlocker
SponsorBlocker is an extension that will skip over sponsored segments of YouTube videos. SponsorBlocker is a crowdsourced browser extension that let's anyone submit the start and end time's of sponsored segments of YouTube videos. Once one person submits this information, everyone else with this extension will skip right over the sponsored segment.
diff --git a/SponsorBlocker144px.png b/SponsorBlocker144px.png
new file mode 100644
index 0000000000000000000000000000000000000000..5305dd8db577f6171489164e2f0cd07ee92cf0c1
GIT binary patch
literal 5374
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
literal 0
HcmV?d00001
diff --git a/icons/IconSponsorBlocker256px.png b/icons/IconSponsorBlocker256px.png
new file mode 100644
index 0000000000000000000000000000000000000000..9870f586067b940e42a37a085079a60d4f724279
GIT binary patch
literal 6891
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
literal 0
HcmV?d00001
diff --git a/icons/IconSponsorBlocker32px.png b/icons/IconSponsorBlocker32px.png
new file mode 100644
index 0000000000000000000000000000000000000000..c796bb07e03223182eae4f63b87657698a970864
GIT binary patch
literal 1207
zcmV;o1W5adP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGY{r~_3{sFv%E-?TA02p*dSaefwW^{L9
za%BK;VQFr3E^cLXAT%y9E;jv63FrU-1Sm;FK~z{rwU=vX)ny#V&!%(gSxc;Cb3=O(
zsE$jB>0p=r>H3S7PDLe4ij6{m5-LM~igKoI)
zP+MaMV7J9$D`5_lxG=d1LCW9__yumlMQDdL1YLlB9;#_iLO;3GpLYi74SW50zKmOaLpGaA1F3_M7spN5q?wwe}EqKs<6ZTf?V%|
z)>F3%_!FK6t#GeHz9H8-^z@*BGw=c|4;y-^t23*q@y`tra%qj#!Z{Ui5cK-Y_Zdf6
zz1l35GHYuyn>f*LlLc}uf>)tS1$+tmPoDD`M^FKQ^!A!HH=D)de%lO?YbNNs@vRDI
zhBhX~pi^Pv2m=cU$)n{X;*7{ymWAf26NiG<(J
zL5`%$b&~!oYK(&vjEC)EhX{ieAkq40Z8fW?@cNTuC+K6OoE0iYMI2{Ro6L)0hX~mU
z2;}Hdv(nOtKRI58d2sShatWOepdEve=qq8TG_n3pDHzZA617rC_Q!la(UB@7-!e>^bA
zU1rQMD=&|Z4+61tYI*>Ehv=^l1Y;eebg&H02dBfqa)lV$?37&l|6#@oT{^#Dq&MO^
zhO^MxrgfI{2G0h*w?KPLjfD?kfUujT6lgXRLhZ^J{NBUzIRpIva)U-2D!
zA86%n2!ak3d_F-Jp>?$Xf%f2!J}fwu!U^~S=V9n=LGWx~t35?NyFi=H7#B7-!MPH&
zh;|Z0uj$$#NhYw-QC!J)z**W8T)2A^0z5{bBzz6}j_dZ*8zc;1OjoqUw6&k;kfXvM
zcVYgY5U8BMN6>nWCZP3E(GD6U*I%Xkg`QX^=u$G?x#venG@78F!(UKGUkglkzGbvW
zfDSe~;_GS`cW(I?f-eMZtNKf7NjwX5=hN+Ki8H&uLZV8NeulmTmthzEdsu9-*uTML
V9G>`d6Da@y002ovPDHLkV1hN@GSmP7
literal 0
HcmV?d00001
diff --git a/icons/LogoSponsorBlocker128px.png b/icons/LogoSponsorBlocker128px.png
new file mode 100644
index 0000000000000000000000000000000000000000..dbf305de175a9aed56cd1a35234e30c295ca416c
GIT binary patch
literal 8357
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
L)lsQdvI+Y?r*0l!
literal 0
HcmV?d00001
diff --git a/icons/LogoSponsorBlocker64px.png b/icons/LogoSponsorBlocker64px.png
new file mode 100644
index 0000000000000000000000000000000000000000..933f635c620e60dd558e2510769dc89cf350e85d
GIT binary patch
literal 4085
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
literal 0
HcmV?d00001
diff --git a/manifest.json b/manifest.json
index b97d75aa..80be65d4 100644
--- a/manifest.json
+++ b/manifest.json
@@ -17,6 +17,9 @@
]
}
],
+ "web_accessible_resources": [
+ "icons/LogoSponsorBlocker256px.png"
+ ],
"permissions": [
"tabs",
"storage",
@@ -29,5 +32,12 @@
"background": {
"scripts":["background.js"]
},
+ "icons": {
+ "16": "icons/IconSponsorBlocker16px.png",
+ "32": "icons/IconSponsorBlocker32px.png",
+ "64": "icons/LogoSponsorBlocker64px.png",
+ "128": "icons/LogoSponsorBlocker128px.png",
+ "256": "icons/LogoSponsorBlocker256px.png"
+ },
"manifest_version": 2
}
diff --git a/popup.css b/popup.css
index b48e1904..9d96b3c5 100644
--- a/popup.css
+++ b/popup.css
@@ -4,28 +4,32 @@
font-family: 'Source Sans Pro', sans-serif;
}
+h1 {
+ margin-top: 0px;
+}
+
body {
font-size: 14px;
width: 300px;
- background-color: #d9ffdc;
+ background-color: #ffd9d9;
}
.greenButton {
- background-color:#44c767;
+ background-color:#ec1c1c;
-moz-border-radius:28px;
-webkit-border-radius:28px;
border-radius:28px;
- border:1px solid #18ab29;
+ border:1px solid #d31919;
display:inline-block;
cursor:pointer;
color:#ffffff;
font-size:16px;
padding:8px 37px;
text-decoration:none;
- text-shadow:0px 0px 0px #2f6627;
+ text-shadow:0px 0px 0px #662727;
}
.greenButton:hover {
- background-color:#5cbf2a;
+ background-color:#bf2a2a;
}
.greenButton:active {
position:relative;
@@ -58,11 +62,11 @@ body {
}
.smallButton {
- background-color:#2dabf9;
+ background-color:#f9902d;
-moz-border-radius:3px;
-webkit-border-radius:3px;
border-radius:3px;
- border:1px solid #2dabf9;
+ border:1px solid #f9a72d;
display:inline-block;
cursor:pointer;
color:#ffffff;
@@ -71,7 +75,7 @@ body {
text-decoration:none;
}
.smallButton:hover {
- background-color:#0688fa;
+ background-color:#fa9806;
}
.smallButton:active {
position:relative;
diff --git a/popup.html b/popup.html
index 35809532..54dbeb96 100644
--- a/popup.html
+++ b/popup.html
@@ -6,6 +6,8 @@
+
+
SponsorBlock
From 1ae07773aa95bca3adb8ed303ab704c58b02d06e Mon Sep 17 00:00:00 2001
From: Ajay Ramachandran
Date: Thu, 11 Jul 2019 16:17:30 -0400
Subject: [PATCH 11/23] Update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 4da6c78d..1a90287f 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@

-Logo by @munadikieh
+Logo by [@munadikieh](https://github.com/munadikieh)
# SponsorBlocker
From eb876940b20012264d32055ec6c0638457bc96d0 Mon Sep 17 00:00:00 2001
From: Ajay Ramachandran
Date: Thu, 11 Jul 2019 16:19:28 -0400
Subject: [PATCH 12/23] Removed extra file and moved font css file
---
SponsorBlocker144px.png | Bin 5374 -> 0 bytes
Source+Sans+Pro.css => libs/Source+Sans+Pro.css | 0
manifest.json | 2 +-
popup.css | 2 --
popup.html | 1 +
5 files changed, 2 insertions(+), 3 deletions(-)
delete mode 100644 SponsorBlocker144px.png
rename Source+Sans+Pro.css => libs/Source+Sans+Pro.css (100%)
diff --git a/SponsorBlocker144px.png b/SponsorBlocker144px.png
deleted file mode 100644
index 5305dd8db577f6171489164e2f0cd07ee92cf0c1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 5374
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
Set Page Color Popup
+
From 9abec6bcbaab1dca8b88506e0550513651e4575b Mon Sep 17 00:00:00 2001
From: Ajay Ramachandran
Date: Thu, 11 Jul 2019 18:31:53 -0400
Subject: [PATCH 13/23] Increased margin on logo and increased length of time
of notice.
---
content.css | 1 +
content.js | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/content.css b/content.css
index e03a976f..dfd35ba6 100644
--- a/content.css
+++ b/content.css
@@ -8,6 +8,7 @@
top: 0;
bottom: 0;
margin: auto;
+ margin-left: 10px;
}
#sponsorSkipNotice {
diff --git a/content.js b/content.js
index 674e240c..3e1deb00 100644
--- a/content.js
+++ b/content.js
@@ -108,7 +108,7 @@ function sponsorCheck(sponsorTimes) { // Video skipping
//send out the message saying that a sponsor message was skipped
openSkipNotice();
- setTimeout(closeSkipNotice, 2500);
+ setTimeout(closeSkipNotice, 5000);
}
lastTime = v.currentTime;
From 7ea2c2b974710c4ddbdcdf6a72dcbb32c66725db Mon Sep 17 00:00:00 2001
From: Ajay Ramachandran
Date: Thu, 11 Jul 2019 18:47:03 -0400
Subject: [PATCH 14/23] Added border to notice and increased timeout more, also
added a notice about the timeout.
---
content.css | 13 ++++++++++---
content.js | 14 ++++++++++----
2 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/content.css b/content.css
index dfd35ba6..89cfcdea 100644
--- a/content.css
+++ b/content.css
@@ -12,11 +12,12 @@
}
#sponsorSkipNotice {
- min-height: 120px;
+ min-height: 125px;
min-width: 400px;
background-color: rgba(255, 217, 217, 0.8);
position: absolute;
- z-index: 1;
+ z-index: 1;
+ border: 3px solid rgba(0, 0, 0, 0.8);
}
#sponsorSkipMessage {
@@ -24,7 +25,13 @@
color: #000000;
text-align: center;
margin-top: 10px;
- font-weight: bold;
+ font-weight: bold;
+}
+
+#sponsorSkipInfo {
+ font-size: 10px;
+ color: #000000;
+ text-align: center;
}
.sponsorSkipButton {
diff --git a/content.js b/content.js
index 3e1deb00..a841acba 100644
--- a/content.js
+++ b/content.js
@@ -108,7 +108,7 @@ function sponsorCheck(sponsorTimes) { // Video skipping
//send out the message saying that a sponsor message was skipped
openSkipNotice();
- setTimeout(closeSkipNotice, 5000);
+ setTimeout(closeSkipNotice, 7000);
}
lastTime = v.currentTime;
@@ -139,10 +139,15 @@ function openSkipNotice(){
logoElement.id = "sponsorSkipLogo";
logoElement.src = chrome.extension.getURL("icons/LogoSponsorBlocker256px.png");
- var noticeMessage = document.createElement("p");
+ var noticeMessage = document.createElement("div");
noticeMessage.id = "sponsorSkipMessage";
noticeMessage.className = "sponsorSkipObject";
- noticeMessage.innerText = "Hey, you just skipped a sponsor!";
+ noticeMessage.innerText = "Hey, you just skipped a sponsor!";
+
+ var noticeInfo = document.createElement("p");
+ noticeInfo.id = "sponsorSkipInfo";
+ noticeInfo.className = "sponsorSkipObject";
+ noticeInfo.innerText = "This message will disapear in 7 seconds";
var buttonContainer = document.createElement("div");
buttonContainer.setAttribute("align", "center");
@@ -154,7 +159,7 @@ function openSkipNotice(){
goBackButton.addEventListener("click", goBackToPreviousTime);
var hideButton = document.createElement("button");
- hideButton.innerText = "Hide";
+ hideButton.innerText = "Dismiss";
hideButton.className = "sponsorSkipObject";
hideButton.className = "sponsorSkipButton";
hideButton.addEventListener("click", closeSkipNotice);
@@ -173,6 +178,7 @@ function openSkipNotice(){
noticeElement.appendChild(logoElement);
noticeElement.appendChild(noticeMessage);
+ noticeElement.appendChild(noticeInfo);
noticeElement.appendChild(buttonContainer);
var referenceNode = document.getElementById("info");
From c31efc2059a7b2f483712259a356499dff7a1542 Mon Sep 17 00:00:00 2001
From: Ajay Ramachandran
Date: Thu, 11 Jul 2019 22:35:40 -0400
Subject: [PATCH 15/23] Made submit times not appear when no end time was
specified.
---
popup.html | 2 +-
popup.js | 14 ++++++++++++++
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/popup.html b/popup.html
index b5aeba62..e8292923 100644
--- a/popup.html
+++ b/popup.html
@@ -49,7 +49,7 @@
- Submit Times
+ Submit Times
diff --git a/popup.js b/popup.js
index a322241b..099ffd80 100644
--- a/popup.js
+++ b/popup.js
@@ -56,6 +56,8 @@ function loadTabData(tabs) {
//show submission section
document.getElementById("submissionSection").style.display = "unset";
+
+ showSubmitTimesIfNecessary();
}
});
@@ -136,6 +138,8 @@ chrome.runtime.onMessage.addListener(function (request, sender, callback) {
//show submission section
document.getElementById("submissionSection").style.display = "unset";
+
+ showSubmitTimesIfNecessary();
}
});
@@ -231,6 +235,16 @@ function resetStartTimeChosen() {
document.getElementById("sponsorStart").innerHTML = "Sponsorship Starts Now";
}
+function showSubmitTimesIfNecessary() {
+ //check if an end time has been specified for the latest sponsor time
+ if (sponsorTimes.length > 0 && sponsorTimes[sponsorTimes.length - 1].length > 1) {
+ //show submit times button
+ document.getElementById("submitTimes").style.display = "unset";
+ } else {
+ document.getElementById("submitTimes").style.display = "none";
+ }
+}
+
//this is not a YouTube video page
function displayNoVideo() {
document.getElementById("loadingIndicator").innerHTML = "This probably isn't a YouTube tab, or you clicked too early. " +
From c6cd092c8709f0a39645b806b8ba6508744ec640 Mon Sep 17 00:00:00 2001
From: Ajay Ramachandran
Date: Fri, 12 Jul 2019 10:42:39 -0400
Subject: [PATCH 16/23] Added button on YouTube player and new icons to support
that
---
content.js | 43 +++++++++++++++----
icons/PlayerStartIconSponsorBlocker256px.png | Bin 0 -> 6225 bytes
icons/PlayerStopIconSponsorBlocker256px.png | Bin 0 -> 7317 bytes
manifest.json | 5 ++-
4 files changed, 38 insertions(+), 10 deletions(-)
create mode 100644 icons/PlayerStartIconSponsorBlocker256px.png
create mode 100644 icons/PlayerStopIconSponsorBlocker256px.png
diff --git a/content.js b/content.js
index a841acba..585255c8 100644
--- a/content.js
+++ b/content.js
@@ -124,6 +124,31 @@ function goBackToPreviousTime() {
}
}
+//Adds a sponsorship starts button to the player controls
+function addPlayerControlsButton(){
+ let startSponsorButton = document.createElement("button");
+ startSponsorButton.className = "ytp-button";
+ startSponsorButton.setAttribute("title", "Sponsor Starts Now");
+ startSponsorButton.addEventListener("click", console.log);
+
+ let startSponsorImage = document.createElement("img");
+ startSponsorImage.style.height = "60%";
+ startSponsorImage.style.top = "0";
+ startSponsorImage.style.bottom = "0";
+ startSponsorImage.style.display = "block";
+ startSponsorImage.style.margin = "auto";
+ startSponsorImage.src = chrome.extension.getURL("icons/PlayerStartIconSponsorBlocker256px.png");
+
+ //add the image to the button
+ startSponsorButton.appendChild(startSponsorImage);
+
+ let referenceNode = document.getElementsByClassName("ytp-right-controls")[0];
+
+ referenceNode.prepend(startSponsorButton);
+}
+
+addPlayerControlsButton();
+
//Opens the notice that tells the user that a sponsor was just skipped
function openSkipNotice(){
if (dontShowNotice) {
@@ -131,40 +156,40 @@ function openSkipNotice(){
return;
}
- var noticeElement = document.createElement("div");
+ let noticeElement = document.createElement("div");
noticeElement.id = "sponsorSkipNotice";
noticeElement.className = "sponsorSkipObject";
- var logoElement = document.createElement("img");
+ let logoElement = document.createElement("img");
logoElement.id = "sponsorSkipLogo";
logoElement.src = chrome.extension.getURL("icons/LogoSponsorBlocker256px.png");
- var noticeMessage = document.createElement("div");
+ let noticeMessage = document.createElement("div");
noticeMessage.id = "sponsorSkipMessage";
noticeMessage.className = "sponsorSkipObject";
noticeMessage.innerText = "Hey, you just skipped a sponsor!";
- var noticeInfo = document.createElement("p");
+ let noticeInfo = document.createElement("p");
noticeInfo.id = "sponsorSkipInfo";
noticeInfo.className = "sponsorSkipObject";
noticeInfo.innerText = "This message will disapear in 7 seconds";
- var buttonContainer = document.createElement("div");
+ let buttonContainer = document.createElement("div");
buttonContainer.setAttribute("align", "center");
- var goBackButton = document.createElement("button");
+ let goBackButton = document.createElement("button");
goBackButton.innerText = "Go back";
goBackButton.className = "sponsorSkipObject";
goBackButton.className = "sponsorSkipButton";
goBackButton.addEventListener("click", goBackToPreviousTime);
- var hideButton = document.createElement("button");
+ let hideButton = document.createElement("button");
hideButton.innerText = "Dismiss";
hideButton.className = "sponsorSkipObject";
hideButton.className = "sponsorSkipButton";
hideButton.addEventListener("click", closeSkipNotice);
- var dontShowAgainButton = document.createElement("button");
+ let dontShowAgainButton = document.createElement("button");
dontShowAgainButton.innerText = "Don't Show This Again";
dontShowAgainButton.className = "sponsorSkipObject";
dontShowAgainButton.className = "sponsorSkipDontShowButton";
@@ -181,7 +206,7 @@ function openSkipNotice(){
noticeElement.appendChild(noticeInfo);
noticeElement.appendChild(buttonContainer);
- var referenceNode = document.getElementById("info");
+ let referenceNode = document.getElementById("info");
if (referenceNode == null) {
//old YouTube
referenceNode = document.getElementById("watch-header");
diff --git a/icons/PlayerStartIconSponsorBlocker256px.png b/icons/PlayerStartIconSponsorBlocker256px.png
new file mode 100644
index 0000000000000000000000000000000000000000..3adff0a446a592095f102814361a63d3562c73b4
GIT binary patch
literal 6225
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