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 @@

- +
- + +

- + +

- + 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 @@ 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](icons/LogoSponsorBlocker256px.png) +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 zcmV;WAX?vvP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGY`Tzg~`T;|EsUrXY02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y9E;jv63FrU-AQnkPK~#8N?VSghT}9c)Qz4WP0tq#DH$_4x zbmfDO&>znLY#h8q9zJtF{gp@Fk8r!2{sYoSzD3 zSY8aT32-jV+RRWm%bhsin&Vh|iGGw4IARzMnFOc8bKo!GBk-TF4!!A4a*Yq*Gw@dU zGx#02E4sC868ljs@K8tbaQA^{!{5QzlFleMlD^|)!uGDcp#PV+wc~+$bEQymE7yo@B+9a=fmvdST?{-ZwJqZ zueuMWvm~y!q5fqz!b{-~kgM>wE8Ldf<3*cUkHo^PgQLuMs25w+ecoBRjbhGV|aP#4B;E9}X1&7+G%O0dz8RI~xH{E@t zy~A${!YMQ8Z8Meg-tn0rp(9AJ{tZthZ>A6u<|SAS_vL(~jk3>xd)kV7I}_f+?+#@M z!Yqb*!)#%rD=(0+O>6>dLpP9vdI<9fb1YoPMzu_U`yR?Y>$CVj@TJ5vX_wgl6&?wf zx6zdjBw`ADAe7J$vHb+<8@@N^MSGPEIcgg9*u{PWto&eQ!tCGJmRpdbT+TBHay+)|d)@|@7P%V?ngkAb)5?)o~^We*& zYrDj*7V6VE&PLHa-~!8Y!Q(i->n0*Z?4E?v_`RZyqC+6;N>Hy!{hRfWmE(KN$(^Cn z2bD2Y&%X>RQ+&zZQini%0|~ngR8#jS?zLQEqwCJ)cX9hHh;RrIe-pOrcx*n0s_t#d z`9K>*K_HAWm^xncT6+xYhRWLEg;4hZ--W8t=-b`l&j<0WNH{euKj+5p5*t0YIsEQ= zMj)d7VY>}B*yx*iI=?&gZzs&!gwZ$q_pk=`dWW}1-6MPzUcmVdu;9J|Z1q-98ASae z&Dl6ZM6ZmXx6o=fc;O(B>aptW%IgsHDv=(>?}GpB*p4NPx@Z5^Ui^KXx__wN#mhPG zP-Y;^7WQ&lH(W(0JK`$slNZeWzx`RL?$RpAP9JhnSR4YpY7#?{Z<$)?7g=*3C|801$Pw@#@L+zo>v$WF3M{X{{(pNH$um?nIx1M(N1PYf zW#Dx%SVlm8gf&e=fpP?x&2c$vmJ`^i{;K-021WEczR2X6w!nw^y&D{CAA1n!RajK7 zt5PbEcNf_ z{5`l*WZ(e3a@FOq-|=NY`3|Z>=>Y2@59swKcf(a@m8S-jr$tH!$khg4@7njX^u#a9 z2oLgmlyz4OWNJxF4Y}j|-AKug+Z=^Tk6t9m)g0VkxGQtwqo+A~g?8ju25i@pB31R{ z{COKD2J+>Qf0VTAXZaFe9dBJ11KA+~y91?YbQIUxFfov+>XEeRXBiWp-e+AG1KCCa z+vDV1R~X6wnj+=e^|MTgv;SpX7X$g&fZdG#4A2LOW8bo_i-A0p0nX?f8DQ|>uzVRM zj(ys?E(UTh1Hhy8ZE(l2dl>*5bpR!8%8ON1#!R1X%nB=n^~)X~wXTbS4>t_hMH%3& zq>%GJ*f24WYpQiJV0rP{YmI4bHRiR~jM;O~u+6eXF9RS8`7p`=|K|upx#zzeoARPE zKo%`6#@us{F&k|Zwp})uZtDlgybOR}_mJXINBEQt69d_}q)pi|nE|qBY&7QLi;Y=r zwQ!ie&Cq9DBez_;ouo*O>*w67LLgf+X;XF#Wq>R`{Lq-AjxuJs<-%e6Ao16Q)^#zE z9UHLQSZ{!99bt_PlS0y_?3gbD2>L8M^NcZ*Cx^rLG2+8>tlMHB)3P_NT}BEGNK7eU zs4e;JfL(d8y$p~=Q=V7|3pRY!+n|$0QY2IXO}$fb4G9u58%R3?Qi5 zxNxB{2OQAn8j|qU#@1~ykUj3$yqs0+oK#rlVUaQcWEvZovMU>QCIe*A+-%GfPZ+c1 zmf^U2A@P+rm}?=?aGG5$N*V<{<$$HoM6mKD}}FB=EQf; zSeL~>riC+IyK}8NGH^$ZhFSwRc5KRr#moSLs*SI{+SaVx%gP7%=?3ev7|8Yv*nPvQ zBZG$=c04 z;m!0#{(91`Y}j2HAd9-Xwr1tgqr=xPBjTe2t-E3%3l-qMm~w`}_gn*HTU&JuWT^q9 zWy9{y09mM6`G_No89Fqajxr!V@)o2(_GibYZA5Su2t#B3j%7Q(W0R)u~ zo_o%i?Y9r7rG&&kngBA$x+@0q|2TH{TU8qnu9Y;fM!&G?7|6?r`xj7$%++AYMYvhZ7Vw7X3NN=?2 z7|1tw?Mlva%K%w?@`*7gp4cO!mGRZh)_z`z?hifo!y$3W%{Ff1v{IRh+O)Ygo=^2*_~7lHWW zHIAY0e`-cI=Pz1y7#OUR3}6F=zAfv*^63~V#|)qv!R@yjlgSt}a9}vyMIyeq+`1+P za<8lwvh#pZYW;f7m5aO;ERnyEv@0pgEdxCJtT8+7)MH)A_+l^XmKey-3fS#!)wzMu z&jSI!V%0H_dBcoL#&XF3@4aWtv}rv(M^PJZg#Mt9CG9xZDsJts<&2TnF{Dgk)iIE5 z;o6mq*IZ*gP$Dc|+%`dVjWxpQ>qg>-TdYfBAX^QlKGB?~JAiTl;~_A$rwxH$wdxqi zRmgDX6_$pjdIP9u@c#Ra*?8klRq=R!+8FBJP}T2eIckpu4bIVYJ)OS@--2qE&lShP z)+I5Jd(-)`JK3t+2La|efmI#c%&KD`yC`W_GL|9(sBS-HN{8D1d0yI2LEG2NgxY>a zh3VDdaHz4F(W{)J{#+V?wF1Aj9nP9?Tc}N^v^8C{6B|c0>xKsIXk)76b@etVXy3#L z7$2I9!1Bjd9fOEN>(2B%dolxj^pP=VomFtPj%TEeAs>c^LCvvjciG*1Ap9UW67E2J zM_F+U>5!+^ed63(Fd{E(B&nreIe*2fV<6X>w9h2%O2VGV0BYaYbqZ|X=ecO<_sjUL z{`el-^N?#El}v|-%$qCNE(mmo6Nx?pldL)hveS}wC1H1F0Db45eA1Y0wkha4&-2hG zR@x0DcZ*v$f@^Evpk#Wq$aKf|Eh128UAa(gK;N)#-?u+6yDI~{^_DSHry4VCSopdL z@(fg<(=IDx?4v0ONXyEk;S3n949d})Cr}Uws9n2K8$EEYy?;Y9hf6y~px7DU(@%}L zjtpPVp`HuW>fHrz`63WTTk~uP{|jo1SasgSM5fKFw}ctaJ5+YSUW<8aTfNh* zsN*1#)Y<_e5$Bzz5r+^@c^>OF1u0b{2Po=%6_U9C%>OTz2A+C%XsxDB!ny>&VSB9~*` zF#_6-%=^wEE8R$;u4I7s-#6x@lZ;t$#cX$69p^WNNZZZBNo8EHneC`F7uZJH28U_x8UWbH4V`tAM7O zQm*hS@TnEVxr55*05}iKL)%@;!;m-vTei^#GOWN1Y+p7lo zFOqgW!uB$Nns3iOyGxTdxG!ykH{9N)2Xxv{BbfOmhuS-MJ6n@{%awlcXgfSPY_y2+Tz%5b;>$^Gb`>ve`@flkg3 zmhO>jvrToK2RGm{^9BrFGH3i6^)uI9Z)w%oNi|htwiWBEDmSQ|IljVNwRX;bGV!hf z^SyE8v*Kg|BHQ1+093bSX!cNONwV&vn*p-Tx7%%3lu*iK! z>36OB^L+BUxrm+GE4p4VB%)AH(<7nCk$XeSx{b;JTH8mXZ%2&^+jN55Lo?jP-ckz4 z)d%7Yh(RXj|F<=ZFk{AmLA5h8JK)6mZH^2(xnNdhK5g7*gf}#w>pl-d1$O;Wy+V73 zL1fxI%550ZY9hN?lNiX^0>>U}%=+txbzLCo|2;?V+l@>OWY;8ZMP%CNcSma$ zq4lycEAT462*=k1o!J@AsxU1Xzb3=AwL`m_n^WsQTb;@==`CYB10o9zH`17ZP>tZb zu5E82Y1j67TiIJl0o~qKpR$MFv?dYERpUqC_&W;y*Vq4gE7NfEl!*ErvJo43-PWMhfV3|E~t@ zwJ%@%aLw$|EA!8PG~~csZ2H^fwjg7o-yxg2nHkf%rr%%DyveW`_R}6;HdFbBXgmD{zd1UesoOQG3ymnYf253Cg z@1oY{pl()X(UR&hsp4C9sj zk*VbEPMp!dDwSENx_v+7ydYaG|c z+16h=#&iQ$fvuuWz67C+}uN` zinYI0OE3`U-gE*d%4& zTB$M%=PIzSYfU;2BH0AGJ%x%qRTUD@>9g@<(zYB)8a1|W6`SlB$TV)>oiL*%cH{49 z?QH7$)fFvihlJVu+HKagptaSseDJ(!eB>O{aQnd#o1VPbw0`n>+xh~UXu8{OsdS3X zUtTE~cU@KHR-2>)MwSNndafCGtH2wwGFU z1Rj1t1;6^MH#4TW!Fr#cWQMxA6Mfq&H#9A8K4{E!*QKr-afLyq{-SmLFi=g(HM7=@ z2kl_5mf5Ccc+T&(>aKyvMiH6UA%QG779IH+u5CGy^m!|#3&=GH#I@bdst0^@>FUGz z_t%CT;!^+cB=mg`*@=xePYVuOX*zgh&_2uhs){pg(jt)7r;_10*PxRw_e@40vLm2d zAgqNGtw{`YDw(SJIJPY(lD3mmrQ-?sr&Ay@6$nGkkALDA8b+>BGw$kDWkJ%l zhfQV*$fNmq3A@y)oV<2thaKUw;g)@^>)X(H|MZ|;`ZHt0=h%drJ7UAgd5l-#y~dIvC(~9Y1I*U=!LiX zT`|G5)-AH`r<_;!DW8QyP2KFVu}%Gj>zdXPephz$PQ%l2!LzKo zIN+g#N}C!DvxPND0eO{cUuu#jZ(t?z(AMiewCV^v@P)1e^0Dd9=gakNIY4NxH_iXJ z!!*p>mkct|v~2E=Qf?hR#MJ$KOfbF>YpW~cl|uq@4=E63Q2?4mw~J@V3*pPN5i#(PAHVKsPcU!uv3{9oSHwM zs=`ug5Br3}<{+8!2%9|lWUw1I_uwrrUo;T8hAzJmxTwklBdl2rWXd#Gz>;#zxbbiI`woe0SS@=XSY%bQ!UiZs3dAf&jskkAs^Q^ji zzy&m)AT(n329DkY3*^hg)cQ6hpf|itAYG~TkvV_Jsv^`>Wv&i6AxNr$b#vBhBjtdG zQ`RtMs6R`odFz!-^DFbL`$20<)QlXA(;@%ZG$~}~ zaSVNLH3Q~p*S@F7wU4(+NdcX@eUo-tfFW*5T{^4c$dDsKY@UC;Y5Di_5gX_1VOod# z_5Id$hMM}Hjfr0SN!0&#k6@fGsg*oylNN#WhBgV`(yF@;Tu86>>jD?o6sD=xECuxH zyeP>~GOk-~laT`Q&;pwA1N^*toz-irGEE_8xNLd%uWjD^>@(9kF|g*)utBEbthUxZ z4G2l1{>ELr_(J3j;0_T>HNSJNrh2c#u3Nx`R^g%=ij=xh>i2(_SOm>?j{J{Nb>unK+AVFE(AQV?O>=-xBvzhS3<9~ZWg*>x|3XQPkZ?kkZYcRYrC^m514o8fWcG; zp9nc6rh52}*fbSK9M?g6o2F;yn&ua;H7y@Jn{Fj+u5W854#kv(hbk!e_4Dh-_L-!$2pM5w9GTpIcm=-cj%>k}uAH)i2m*4q|p z8m|A`w7mHMCI8)1@#Nv#i)XDh+9pHk)qGB`uLW7$KvWWt2n|&H1@szykUh>ZS0>m9 z_Q(R&Tqihm8u_UK+rM*+$31BFZ*6tvPf6$Ga=yBJ8!p_~H2nS>rum3<^-r=d+WlQWL+Hn@M%D zajrQG-ul8N1Bp@}^*kjknNUluzn3c$XlAZf$Lh9bW8&86=3KRt!`*9hu6B*xtw{t8 z%xs)G^0l1KKPBD0t5<#FeJ4jO^tF%U>uRgVq;?D?9coeaMqnfRE63uD11uIukme5t z#|TOeb7cbk6SY>JSC%LiiCaz9-dg~f-d$ zhxaS7fg6|)gRf%&oz~)C?1n1_iT5uYgRf0=`@m3@R!hKn&PTSSY3~si)>UObP<=h@ z+%Q$EAWRLf{JR^ zT4chSdLT}X!8{fQS0qKQDqn>)?>!*VDr8*=LybjRJ^Oq74lc5YTwzaxMHym7Jo>H{3~3 z)wx{PP=-}mYIPg5cY_=GHcahbl(<9RBw`CCdx;`Xw{Fnqo+_1c5}jM zRnfd{6zH{d{0&e8XtzVAji6SB8Y-_U?r^ByP|fI3$zJUuc_-GQ*K_(Y3@&TeYr&0a z=Zw@w$XO!)H%D!Dne*R-?f~ox>PNs%)5Eo{Ua(_IK(AMD&g-F<^DclL`V3*ONi^@l z4h@sXUi}fz!L4l)`X0DZbqjmToruU)08`G-*~X1dvzYbS2!5xL>(!}$WpHkwfSpR* zTfmp0RzSe*-M^&_oVa~;%iB~Ob+Vvw|d5hmaliZr*1a?|TV-EZjcBzI!cx60 zqe-#a`$w;OIZ_!gXL$jgGO04FGO3!zl?kKf=4Bc@ggv0X|G6HVws0$GbERA$9%Z(# z!%yA#MdWhM)%@<%V$6iqxW_5*c;Zl#w)O%@@>Dn#YPIpMFZkToz=P3dOxhYP_zyy^ z?c5IMcZZun38!x7oO2Y=Er#7cuD&1nfiv`N)+Zrni5uPBP?J{Mt#@Oi_)dhu1uT&3 z8?1V`w~jzRN(h{ySx7k>e$Z(M`ekrq&Q%7`Cd>mZ^{O8ZHD2)r&U3|~5yNU2TDA&a zy#+W%4JdMQ-jX(YZNQ|$+iyi=+N(eBLYC;&BiVQB*?kE(Ok1lLW!M<;sHA=ozlYiA z`_UU9hrvz{79pIz_1f>JJV(*=qcGq=ZDRFnSkMBM*vavF-K#C3;BDRdQRcvzYDH9& v>Gkj>7;Ud^o&GQQAp9weXVvt53>fhL1b^)nrx@lVgezADyXI?~iC%Po-#==I;o6rdigbATLIlSA zlOgmg-oVG!0fRshDjPeKNRk{IrG$!J-brPNEBjX?4u(FnD+=qmudPqu9jcO9hG(z- zU7(Io3HKv_!qxp&MnqI7oy^0y1 z+mi#70R#mlsu`>$FatcI|JOpbW0JlCp9Kt_?nmGO!Kx%}F-WCjf3Pr!Kbe@d3@LtZ zV_Q~Amxz-mDq5R@2T?%$_H#kPol73_4os>`F7fR9T zH0i)Z<8-)4zN76Z{R0(U&CuXGS^ynHUN4NbmeE>jC(fCWQk^>;D0>(bj^93Y8zJaQ zs0Gw@%%;@#D~+;VtW8j~*fA<0iEILlE=s7*=eEQNz z-*5kd%858mS;X{(1)MXG@8ve;Se>=}v&?0+paWm@y+vk{$*BgJVdug{&BYAIjQbk;n| z(E9t4#Fv&b;-@0uZDYP=V*Ml^spVa6EBzhXyVer?;StwS2LC6ryCf+{cCEmX5@q0d zo6BRG>uYJVRnY{;`f0r(a8aX3t{@AC?hR;7#$D?8?oN5YFHKk0@AnW%cB85cLJC9- z$z7}nrjV8i2F}%cAlH<{nK%2@`dna1$g0D1;{t! z-)?w7h3Y%O*2GHD3y2f_TxAhTx4#*LA1M(`H6ht*^ExNRn&N^mUsW}dGah9v=pxO! zq2*w|>b45Iii`|6kz}@x_q;9>8BZYAW+KFeK`To3Uc3yfV+Ne=af)$7EPql89Sd5`B|&s>Qa0{VBUpaxD(^GV#l(`!_ZiO$M_#zT zCsYcABwFPCB5pT0kV$ptlRr;iZ*a*%|9U{Bn4S%MBtp4%dYbvF9d<^=#EcDyP)7WP zu$zvgaNtE%1}_wFeI%E6bHV?_tVWu731QFZ@6mC2Y_IfX_ky>Jk~r_52ASEr_n4t8 z>0Cl?YP!qJL1I5Ztm?kOfPG=33`msW%fy`W_ON_W(7Vh*S3KaP{Ls1cpQkk8@22_k ze)X6kysLbbVCuF86TC!$@_#PEKkvDcr0INRhjRTqw);*S{9L)c_#loxVS1L?_R~P> zYsJYr`g*&BgnK_8)UFGspd()ybW9!0e&IcreQ<8WsloH~vA02%2iV^#ZNp?PltK~Q zR1Ec73}g7PCPpe-qy8quRt9daR0=i_$Rp24`AVpG{hoY& zCNoS=`P>|+-j}f#rdmm*BN|(MV|hWcYP*s-$&at zB19)I-6h?qxIK7)nr}zJq38*qtBqKc#Vk+cSrJ?Y=XI9Te0UQKDDxn)^UUx)Fwg=G zDsZ@MbM^)WpsBbfqD`5V)nV=l$|1{wl5mAjNPzaeQ}C-Tl3prS_S$uNy#xy%emL=2 zzVy+AD0ZyW{i=0-aW+SwCx-1<{63+eS9#zs4C3yc6t+nq%Cor*4Ln2mX5HX@=;4vM z0%Bt;jf+jk+zw5Ix7l+vc*i|Jc>94n8{7_uTRBfVZo2)>V&s*)m^=Qkm9s%z8XVgCfoktZ5sVJIOS zL{83n|LV3vh|OgCvIcDF2G7E`b%znQ#|zTid5`G-qH-JByp!JjZtW1{^mnJ37aDtR zNjsq6wa1#qBE$w#Q71xhHtswTeAv9xtOZ#fBGMogs)gzqV1YE2b$X?_Dd6%mNciOy z!M`Q^7RyueRf5Mlm!#BS_9{w7O&c zHV)>~0!VOUHWH0xsRD9O>20WOOozg7uQ3_B7-m+hZk`v_K#1siB>sn#T*Sz$gIB~~ zl52KszQr?nKZBPDv>^ty6|kAV#>FB#=TcW_mW@XQ1dQInCEV-(0^~+5!Gh=?BErDj zYeYc88n+;whdRjsFJACa_CBeg+C79kO6HV&-$U&|1_0%N>4Wp0J*LMO>HD8C^eqIT z1hlC_V75#w#(RP&#XkKWhyH9MtwK10vfor!^<7~&~qEQ_CRK7+G)~p z2gp_jXin_(S3*th*vuV~r=WJyU9iS5S3K5lV?eW5dQufUul4)g;=fTxKFrV^0-Mzl z1-+5Q51j80CDXrFCVKvn65hu%3bp_BGQ@Z5ic&B}+uMpwvjA-Q;#=ND>h^`QQBBH#U# zqUbi&+g8=A@P8&PNm6WxZ7_pJ?NSc(rSVx*J^%;D?5{JiulCtC=GQ zo})94EP85yrS8YNQz7EzCf4SE)PA-42MD$EPT$x*kSNkw+&QH$+m+Z&IuB~Kqu{y= z#dBUK2pt0P4(dCvV#M5XM(<~D#H*^k5Je;nji7wBE3TexmL!ef;eQ!fH-9|-u5U)g z4Jv$G*Cv3EYAx4Ikn5q!0{2sPIojpig*b^Wki*PV7}SK;ygk`8RFwHhdN zBsv)hr!J15-e{sP+9qZ{ZkA!SyBr7BdgKoZXe6XZ-MbiOcCO!Ard|sYxJ6+H%)WS< z+RT&Ka5o%n`#7(s887N`l9MhRs&WC&$Q{$~iX+7KTD+h6g1^r5>zgFR$}rBuXS(1b zM&i3EN2v_NfD$kpa4Phz1>@pSzD3Ud_2(9dp#sx?w@i{F`_Y6U(-rm{Lpy-JW^`hG ztAB!(eWvp}3}}g9GKpFjk7gYfr0$?vL5pX!WaU<%Dj{v95Sa=2@F|Nch+8&yZZ(Mo(O^h#n?v*;oi;JZt^X*2)w z!Gj0CQa8x}3%vc$R3(pucnku(wSeROoa(zBywv~y=y_$ZIah>{*4Q+>aK{X@EJO1> z(gQm7nuI~M_DIOW%dkX7@ccJboJ)6sMTr^!2slcQ4~u%+ulGB&SZ)(9vLalc@}7%u zhGn!mx_~#Sfwpw@Qi;6o=LUMs0+WkScEcNoNQz*>amfA;=A(slpWyDjd0*(MqATpj zKynUS>0V3Sk@d5YHV$$Ldr1L~t;Bd;SI9CEhZYO90!NUy@uJvTwl?rJ^%S2V^w(ku zp>N3d-ABP^P{dAlV4+sK>V|`Vf{%lQC+`WypFYK~&~vaT&mEwr5Aw##HNM~L5J~tu zfCbprI+JcXl3_{P{2mA}sy%3VsYGLwg7Qr5-wUYwGSP3JS+^hy3AlYMTSICZmAGor zw;4zJ;>k<(m24Ire5)VFivs~If)s>#Rn?#RWa11iJ>@3FR`Jy*6nD*sbyKA$wSWM{ zn)`b{cN_eeiG!7=@km5NP{B>jYw;x45kClfFKVlI0)3%$nv1A658^C+1r?)H9j4o% zquU)v?*Na7qT;R%^~B4>h_A~5!TwfHxs?8*zoj?-h$$hPmlQC;^9uDfkA8A5?nzrm zXsmVP)`T9=^d}SWUM`m~9IkingxF9&OL>{$u~@&Xjt|FXP=PTb6B3<*7sTDe4s?F5}Uw46p_ zj`;X2f@&aP3UP!*33I-H7ujnt#tejvOudTaVw}XsJE$q<1u_U+m-0!( zGi5!qcNku~+LHK=BsK40XMqS+N0MpE$uTL%0Ug+#jk8E6vHG`P*nhWH+{rUehp+^o z+zHMs1|4Z&3PJR*Ug$l62s8hvwelUE){-jCO#SFzpp_XOpBZ}knqIC>2YCDY`(sy7 zJP|v|B=PpWJuOzlQHZ+w7R{OfVZ^4 z`6ZVe_#+P4}Y>lY^z{g=ujV%P?|5Pts#YOO*f zrdn++eys#>(4D1uQSmIGOsi}gbBvj1x<6ddt%G}Py9r^~sWnAR{^z0LEj@wmM?-kR z@QmX$ev;O@gTIC-4@dBen=L9ihuJoGOqU0anB& z5lIa5pKry-CiTbBGN#|l}P`a1DlG7Bx2jhmYzjq)JA}ri2aD}zH zymyxppMq;dJDcPDS*PJ`)2MH-^KITay2FPG*LPdb$Tg61=S@Tn?UfZY>lt8!UB42# zL_v_ow8uhAX1OE-$!ii4;*hc;l$`E~vGk4QEcu24R`at*Ydked)_l<9W{A#6{s8}c z6z(m57VH&Gt+IgC^y0C)>EAu8cCC7x!`rbMtB1G9^x1gZ@-!DTuUxZ)dErTzrlYWz zL0{W)@c23bPPUZM@YWUGeI?b34VK*uri~(B$~Cw_olt*PA*V;KHYSkQ+$cv+>d&sY z;=Tnsb#-&T&~B$xKJxf^fcX(KLkk}_m%|CN{nC$)5Wf86+*qL@G8uIu_t`B-)BGIN zA@iEGw+9N5cc`px0CBlU11aUa}EJbWO57Ek6%3)SxWcBDGq_0e>3rPZQ2qvM^j5~Nx&=~ zJDJOMO}jxGljQYh_I4m{AFtl_ClgBja^v?XvImz21%=}GFR~dt{m_MGKupEFF_GOCU{`7Gn&~Ml)=p=`J zQ;F~MaFn4zv4UTw;8x#7>~HF2MG31B27`|D9O6N!lOLQ9V|tVQ+La&AZuM=O1P9zP zk>SFQZG+ZFlG?9U*AkWwTt}TzQMfXDBE7N%70}#rZi_>P52_j-%rt3%Mo0&|Pf9P{ zT3$z>oEJ~we)Dg?_xN`aB-k7&H znLJ8fXveYL=7}kKIzS;rhbKK(IT0_92iWy@gm4dJYe|skW z4OqoPWN%NNOqg3DnW&0XU1wGxG79R+{9u7pqK$RvaR-r7$=Gx*@1BEasHmh5cwa}} z?zrs}>K0h?yOkNXARJlVr`MTpUbG2iPKrT~&fB|&SxuKZ5)V*tN|KMOTOS?Kkh0gq zILj{xUViK&h>|++G3#T~xoWXRaj!I(Yk|jpQhZiI3FVM=3cuNf$2|G?nosC!)@=x1 zu7b}!Y)>V+ROa9WMIbL#RDN3{m)3LON5e$7WGX0*kWx-;d2T)af%tfyZJ9YslMvP& zWn;4rhkt?Y|551talbvU`0@&V1KMpt%E#SD%DbPK(utAeJGp-fqUvxeE>W7L*$7h( ze;m!6{dx&fCC!B(@KlyS$O~)sp^Jm@n(Wc=^PSpBl z#VP420Y4kr?bhR-aJFIk*al?pAm)-)=XxtG!GWxLDOjWWSmyd7S<~)TnDdDXcgK-S z$OtAaUeB*FGpber5u3YqB*1ynvQ6;z`Y$SJKJfj{b(&Q#F3Xo!dr>JY;Y;S-TVI_8 z+P%>IEAR`8C5-zB5v(HCoUsIEe004-ZX&Cu{L_({YN=44S>B&1q5X!5n+mX>MNV5^ zvwXgx_uj02I*sAG25Z4`$~vI3HH85orvxSz&tkm`aTT&JY5}D(3b-{PEYV`p*T>Fj z6$-S0YwU=m2e78u8Yd5ass(+V7fvt$9Q@Wj*f{n4bKr+bXJUbUedy;=QgK_ergXCR zDGDfRtDd}DQhAq=nKOK+fvUi|CoANzP@xy+fIDWnEW8#&kg44Q@AT->rJDMQlgKrc z$6WEXu0e7@n#sGg1b`=cIRX2C_2yvxV6`6uSqh|g5*vt=Z}!H&MctAI1Z1ChQ+5o{ z#+)%dR${JzBA3AKaEK@e_MgC8TZx85JEm!5$wWLC`XFz^UB5O3p2 zwLHN?7F%_wyY9#oJ`SyW0bjfsvdd}g&ark9)DuH{m`0mA7H+I z@A&Gxi?K%+^NFL|RM<^i&9sdgCkrRujKF-aK@*#byPQm2N8l>8G^L*S9*1AfWq%L= zxNEf$P3yl_ETpwac)VQmSnB$8Z*u#JL-K?{_e3seU8weOqEa+^eH{TIRVTgS&YC(~ zO|${9nn5*An(Eo2zv|f;{O+HOs=3a*&j{ zZN_Y@Ea+tdxg2S`F)MiN3~g-t$DOW#=&i(yfIND&VizODzqrLn7xt@lap1M?mH#zb zz3F-IdJ~6e&l30w`Qp#NUdCGMOwEeD+6BaVrZY@q!|%DS13_+{Yu5x#yqGu`iAJO$CdrGyS^`es)IxE!0DCM z74EeJI=Lm2`DtfL(l;-UkF9TpW{%yvK+H>5cNYBG3k$f98uj@lLFwh2UrD;cf2x3) zpgC!0(RJ*8v34=@0pw4Y5i6 zQE4q&Yr&mYiLYmHK8zpCEK{38?d6ZX>d1maEhaQJrFK`wKP6~O-QZYG2kxhk3OEp| zt3N27*I)U4qrw!gLv2w^JNz7rH}*vz=`WN^QP8SyM0{+{h?&EqaPoL}H*H95j68#u zXn~Jdi6t3|SkN5(j$`&KxMpnBeZyE!69+L-ush5pm#5YbigWURe$LW+GCX zI`W4HnE~mK3gtikLc|yeZBKL{7G{0!x%eY_Uq2V6EjwCAsB|HYpnUoc5OfK$GtR(M z9^OtdrEbnI;Ge3?tJb0s$io{paN7%4{=DcIJi;+|_=eP3qJR#|Kc%C?uRAKLx(ii9@Tq^(PmB5= zHc2j{_D%gq;V#t;d;7QKs|O=~7KAquMn(0Uj&TChb^=~2RKECaULC1mXJM9j zK%d|&zIl$*{)@E1Tv+7{jlA-UYsw8d<{H6RiR>2H4Q3Wyt}JY0f;x8VLY5fb3@da& z{G(XRrJu0U0VgKcr-6vvKG`3eLGALC8Six0;<6<7V@2IQcBKFCOXz*o^M`pdx2Lu2 zJuN}(;=mTC*fPcpGr|% z-dRBZFlg}~N^>YwBZDm*oM1Mc_p^R*L}!@l4ptEH_}RJ4*i(D1I8j$%aQes+Al*fS zCN;B#_=lDoY>1g9CAGx9ToYl%l|CkHwzif?jG7Y806fNJ6qf=WlE5*^;p&R8ElY14 zh2G(LX+G&q2u}|yxz9E z-;PtJuHfehTVqeN>)hAxjhNLu?fJ#HkUt5OLGu_=V4xvm|#m=*KE4y=pF) zCkIYFjhGVgwdq+BdRgsL?sH3@^YnL53E7LSrvtx|5LTNz2byD=wgu?iWAW}PvjS zRG#Fx!WFL|rgtG}&XDORmJbsvgMU)llH*g%wX4U2xxcPy$(?)$GW#;Z57DMPWV?zp zFqIK^hr5gopXlo*wWCLj%X9lM&Ijn!J zLV;`qua?NU5MTKHyeD|0(s1PZvYvOHihsAFa^y8giThqDj)Zzln;P9R~N!4Dz%Foz+ten?K@D3lND>N7U^U zHDwlOo>oO<+m9#-#rc0}F)|VE9F?_=i4@CW3=1il_j%6bL_Of-B=A$K4;59uPBAbS zDARvJ9qa@DBs-+*3ocn{e8O1Ku!2ZF8`tBgd}ZEBz+V4naTadmH=??!>s;YDQa|_u zCLN_bYZV+1Ud=wCCb*{XROR1%|!cj6`&b!OCGc8fW&iVKW2_#SH#_$}B$3n;&% ziLeg@{{qHFRHa68->u{VC8($a?p(&97uT< zgVnEQU$4?@$xjySn;OKH4?y%xlG)AOJ9LN-yQ(S~v;a3M{u!uQdC5ADkkS+DHAgLc zNAOG1@+UJkO9!RI%M!9Ru8rCmxy${QZXWk3ZlxCDB9TOhd<~njOlOZy*~l|ld%jmc zllH%|%Po}f!Ly%d3k4#z0SS=zORA~F*4tq93n=H)tq_92ie+DRmf+x!PTW>#=5kX~ z>mPUH`7KL<-^tulh+pp>#w_nW;C!LZMh$c$Aa4JtXgn>(jVrF7K^S^_+$|D}gLwe8 z_{Px2j!JoIfNLF%c(`9-E$l^;$4gN_z_F!4_rUAhmZxGg;=k(kF3>#>>Q{w&^NQdR zWeh$Ja?&G8`*}Lq8xj>LHL$`!WWe6-QC~mYy%kDzo%lZs z_$0gh3^j2uBtxU80_U_4VNdZD%jk(GF&xlb7;>7+YEi5I_8RW&Ao%%Cs45(H$PLg` 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](icons/LogoSponsorBlocker256px.png) -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 @@

- +

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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 Date: Fri, 12 Jul 2019 16:44:50 -0400 Subject: [PATCH 17/23] Made player controls work --- background.js | 30 ++++++++++++++++++++++++++++++ content.js | 14 ++++++++++---- popup.js | 2 -- 3 files changed, 40 insertions(+), 6 deletions(-) diff --git a/background.js b/background.js index 19e3c83a..9d681d6e 100644 --- a/background.js +++ b/background.js @@ -30,9 +30,39 @@ chrome.runtime.onMessage.addListener(function (request, sender, callback) { if (previousVideoID != request.videoID) { videoIDChange(request.videoID); } + } else if(request.message == "addSponsorTime") { + addSponsorTime(request.time); } }); +function addSponsorTime(time) { + //get sponsor times + let sponsorTimes = []; + let sponsorTimeKey = "sponsorTimes" + previousVideoID; + chrome.storage.local.get([sponsorTimeKey], function(result) { + let sponsorTimesStorage = result[sponsorTimeKey]; + console.log(sponsorTimesStorage) + if (sponsorTimesStorage != undefined && sponsorTimesStorage.length > 0) { + sponsorTimes = sponsorTimesStorage; + } + + //add to sponsorTimes + if (sponsorTimes.length > 0 && sponsorTimes[sponsorTimes.length - 1].length < 2) { + //it is an end time + sponsorTimes[sponsorTimes.length - 1][1] = parseInt(time); + } else { + //it is a start time + let sponsorTimesIndex = sponsorTimes.length; + sponsorTimes[sponsorTimesIndex] = []; + + sponsorTimes[sponsorTimesIndex][0] = parseInt(time); + } + + //save this info + chrome.storage.local.set({[sponsorTimeKey]: sponsorTimes}); + }); +} + function submitTimes(videoID) { //get the video times from storage let sponsorTimeKey = 'sponsorTimes' + videoID; diff --git a/content.js b/content.js index 585255c8..8d93af9b 100644 --- a/content.js +++ b/content.js @@ -125,11 +125,11 @@ function goBackToPreviousTime() { } //Adds a sponsorship starts button to the player controls -function addPlayerControlsButton(){ +function addPlayerControlsButton() { let startSponsorButton = document.createElement("button"); startSponsorButton.className = "ytp-button"; startSponsorButton.setAttribute("title", "Sponsor Starts Now"); - startSponsorButton.addEventListener("click", console.log); + startSponsorButton.addEventListener("click", startSponsorClicked); let startSponsorImage = document.createElement("img"); startSponsorImage.style.height = "60%"; @@ -149,6 +149,14 @@ function addPlayerControlsButton(){ addPlayerControlsButton(); +function startSponsorClicked() { + //send back current time witj message + chrome.runtime.sendMessage({ + message: "addSponsorTime", + time: v.currentTime + }); +} + //Opens the notice that tells the user that a sponsor was just skipped function openSkipNotice(){ if (dontShowNotice) { @@ -233,8 +241,6 @@ function dontShowNoticeAgain() { function sponsorMessageStarted() { let v = document.querySelector('video'); - console.log(v.currentTime) - //send back current time chrome.runtime.sendMessage({ message: "time", diff --git a/popup.js b/popup.js index 099ffd80..67c6face 100644 --- a/popup.js +++ b/popup.js @@ -61,8 +61,6 @@ function loadTabData(tabs) { } }); - - //check if this video's sponsors are known chrome.tabs.sendMessage( tabs[0].id, From f265ad9173ec6a943ffca0b762c6e1681571ff72 Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Fri, 12 Jul 2019 16:48:07 -0400 Subject: [PATCH 18/23] Made the player controls change icon when needed --- content.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/content.js b/content.js index 8d93af9b..891bb457 100644 --- a/content.js +++ b/content.js @@ -26,6 +26,9 @@ var lastTime; //used for the go back button var lastSponsorTimeSkipped = null; +//if showing the start sponsor button or the end sponsor button on the player +var showingStartSponsor = true; + //if the notice should not be shown //happens when the user click's the "Don't show notice again" button var dontShowNotice = false; @@ -132,6 +135,7 @@ function addPlayerControlsButton() { startSponsorButton.addEventListener("click", startSponsorClicked); let startSponsorImage = document.createElement("img"); + startSponsorImage.id = "startSponsorImage"; startSponsorImage.style.height = "60%"; startSponsorImage.style.top = "0"; startSponsorImage.style.bottom = "0"; @@ -150,7 +154,15 @@ function addPlayerControlsButton() { addPlayerControlsButton(); function startSponsorClicked() { - //send back current time witj message + if (showingStartSponsor) { + showingStartSponsor = false; + document.getElementById("startSponsorImage").src = chrome.extension.getURL("icons/PlayerStopIconSponsorBlocker256px.png"); + } else { + showingStartSponsor = true; + document.getElementById("startSponsorImage").src = chrome.extension.getURL("icons/PlayerStartIconSponsorBlocker256px.png"); + } + + //send back current time with message chrome.runtime.sendMessage({ message: "addSponsorTime", time: v.currentTime From ac2864a3ef3d95b6ed9b01b0ffba33668845f3f6 Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Fri, 12 Jul 2019 16:50:26 -0400 Subject: [PATCH 19/23] Made popup toggle image of player control as well. --- content.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/content.js b/content.js index 891bb457..c872aa4d 100644 --- a/content.js +++ b/content.js @@ -154,6 +154,16 @@ function addPlayerControlsButton() { addPlayerControlsButton(); function startSponsorClicked() { + toggleStartSponsorButton(); + + //send back current time with message + chrome.runtime.sendMessage({ + message: "addSponsorTime", + time: v.currentTime + }); +} + +function toggleStartSponsorButton() { if (showingStartSponsor) { showingStartSponsor = false; document.getElementById("startSponsorImage").src = chrome.extension.getURL("icons/PlayerStopIconSponsorBlocker256px.png"); @@ -161,12 +171,6 @@ function startSponsorClicked() { showingStartSponsor = true; document.getElementById("startSponsorImage").src = chrome.extension.getURL("icons/PlayerStartIconSponsorBlocker256px.png"); } - - //send back current time with message - chrome.runtime.sendMessage({ - message: "addSponsorTime", - time: v.currentTime - }); } //Opens the notice that tells the user that a sponsor was just skipped @@ -258,6 +262,9 @@ function sponsorMessageStarted() { message: "time", time: v.currentTime }); + + //update button + toggleStartSponsorButton(); } function getYouTubeVideoID(url) { // Returns with video id else returns false From 8e783e8466abbc48d963e45aa4f12a326b24003f Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Fri, 12 Jul 2019 17:45:20 -0400 Subject: [PATCH 20/23] Made clear times button toggle the video controls if necessary. --- background.js | 1 - content.js | 4 ++++ popup.js | 13 +++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/background.js b/background.js index 9d681d6e..ff3b632b 100644 --- a/background.js +++ b/background.js @@ -41,7 +41,6 @@ function addSponsorTime(time) { let sponsorTimeKey = "sponsorTimes" + previousVideoID; chrome.storage.local.get([sponsorTimeKey], function(result) { let sponsorTimesStorage = result[sponsorTimeKey]; - console.log(sponsorTimesStorage) if (sponsorTimesStorage != undefined && sponsorTimesStorage.length > 0) { sponsorTimes = sponsorTimesStorage; } diff --git a/content.js b/content.js index c872aa4d..10f785e6 100644 --- a/content.js +++ b/content.js @@ -70,6 +70,10 @@ chrome.runtime.onMessage.addListener( // Detect URL Changes if (request.message == "showNoticeAgain") { dontShowNotice = false; } + + if (request.message == "toggleStartSponsorButton") { + toggleStartSponsorButton(); + } }); function sponsorsLookup(id) { diff --git a/popup.js b/popup.js index 67c6face..2b60683f 100644 --- a/popup.js +++ b/popup.js @@ -178,6 +178,19 @@ function getSponsorTimesMessage(sponsorTimes) { } function clearTimes() { + //check if the player controls should be toggled + if (sponsorTimes.length > 0 && sponsorTimes[sponsorTimes.length - 1].length < 2) { + chrome.tabs.query({ + active: true, + currentWindow: true + }, function(tabs) { + chrome.tabs.sendMessage(tabs[0].id, { + message: "toggleStartSponsorButton" + }); + }); + } + + //reset sponsorTimes sponsorTimes = []; let sponsorTimeKey = "sponsorTimes" + currentVideoID; From baa85cc7d374f0eb88707d428810c8c8c1dd947d Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Fri, 12 Jul 2019 18:28:41 -0400 Subject: [PATCH 21/23] Made the onvideo control start with the stop icon if needed. --- background.js | 29 +++++++++++++++++++++++------ content.js | 27 +++++++++++++++++++++------ 2 files changed, 44 insertions(+), 12 deletions(-) diff --git a/background.js b/background.js index ff3b632b..3997e50e 100644 --- a/background.js +++ b/background.js @@ -26,26 +26,42 @@ chrome.runtime.onMessage.addListener(function (request, sender, callback) { callback({ success: true }); - } else if(request.message == "ytvideoid") { + } else if (request.message == "ytvideoid") { if (previousVideoID != request.videoID) { videoIDChange(request.videoID); } - } else if(request.message == "addSponsorTime") { + } else if (request.message == "addSponsorTime") { addSponsorTime(request.time); + } else if (request.message == "getSponsorTimes") { + getSponsorTimes(request.videoID, function(sponsorTimes) { + callback({ + sponsorTimes: sponsorTimes + }) + }); + + //this allows the callback to be called later + return true; } }); -function addSponsorTime(time) { - //get sponsor times + +//gets the sponsor times from memory +function getSponsorTimes(videoID, callback) { let sponsorTimes = []; - let sponsorTimeKey = "sponsorTimes" + previousVideoID; + let sponsorTimeKey = "sponsorTimes" + videoID; chrome.storage.local.get([sponsorTimeKey], function(result) { let sponsorTimesStorage = result[sponsorTimeKey]; if (sponsorTimesStorage != undefined && sponsorTimesStorage.length > 0) { sponsorTimes = sponsorTimesStorage; } - //add to sponsorTimes + callback(sponsorTimes) + }); +} + +function addSponsorTime(time) { + getSponsorTimes(previousVideoID, function(sponsorTimes) { + //add to sponsorTimes if (sponsorTimes.length > 0 && sponsorTimes[sponsorTimes.length - 1].length < 2) { //it is an end time sponsorTimes[sponsorTimes.length - 1][1] = parseInt(time); @@ -58,6 +74,7 @@ function addSponsorTime(time) { } //save this info + let sponsorTimeKey = "sponsorTimes" + previousVideoID; chrome.storage.local.set({[sponsorTimeKey]: sponsorTimes}); }); } diff --git a/content.js b/content.js index 10f785e6..c7ef2575 100644 --- a/content.js +++ b/content.js @@ -1,7 +1,5 @@ if(id = getYouTubeVideoID(document.URL)){ // Direct Links - //reset sponsor data found check - sponsorDataFound = false; - sponsorsLookup(id); + videoIDChange(id); //tell background.js about this chrome.runtime.sendMessage({ @@ -43,9 +41,7 @@ chrome.runtime.onMessage.addListener( // Detect URL Changes function(request, sender, sendResponse) { //message from background script if (request.message == "ytvideoid") { - //reset sponsor data found check - sponsorDataFound = false; - sponsorsLookup(request.id); + videoIDChange(request.id); } //messages from popup script @@ -76,6 +72,25 @@ chrome.runtime.onMessage.addListener( // Detect URL Changes } }); +function videoIDChange(id) { + //reset sponsor data found check + sponsorDataFound = false; + sponsorsLookup(id); + + //see if the onvideo control image needs to be changed + chrome.runtime.sendMessage({ + message: "getSponsorTimes", + videoID: id + }, function(response) { + if (response != undefined) { + let sponsorTimes = response.sponsorTimes; + if (sponsorTimes != undefined && sponsorTimes.length > 0 && sponsorTimes[sponsorTimes.length - 1].length < 2) { + toggleStartSponsorButton(); + } + } + }); +} + function sponsorsLookup(id) { v = document.querySelector('video') // Youtube video player let xmlhttp = new XMLHttpRequest(); From 6af1f11a6f0faaf15024890df573bb60e0076e17 Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Fri, 12 Jul 2019 19:04:24 -0400 Subject: [PATCH 22/23] Added option to hide the video player controls button in the popup. --- content.js | 32 +++++++++++++++++++++++++++++++- popup.css | 25 +++++++++++++++++++++++++ popup.html | 6 ++++++ popup.js | 45 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 107 insertions(+), 1 deletion(-) diff --git a/content.js b/content.js index c7ef2575..a15885ae 100644 --- a/content.js +++ b/content.js @@ -27,6 +27,9 @@ var lastSponsorTimeSkipped = null; //if showing the start sponsor button or the end sponsor button on the player var showingStartSponsor = true; +//should the video controls buttons be added +var hideVideoPlayerControls = false; + //if the notice should not be shown //happens when the user click's the "Don't show notice again" button var dontShowNotice = false; @@ -70,6 +73,12 @@ chrome.runtime.onMessage.addListener( // Detect URL Changes if (request.message == "toggleStartSponsorButton") { toggleStartSponsorButton(); } + + if (request.message == "changeVideoPlayerControlsVisibility") { + hideVideoPlayerControls = request.value; + + updateVisibilityOfPlayerControlsButton(); + } }); function videoIDChange(id) { @@ -89,6 +98,15 @@ function videoIDChange(id) { } } }); + + //see if video control buttons should be added + chrome.storage.local.get(["hideVideoPlayerControls"], function(result) { + if (result.hideVideoPlayerControls != undefined) { + hideVideoPlayerControls = result.hideVideoPlayerControls; + } + + updateVisibilityOfPlayerControlsButton(); + }); } function sponsorsLookup(id) { @@ -149,6 +167,7 @@ function goBackToPreviousTime() { //Adds a sponsorship starts button to the player controls function addPlayerControlsButton() { let startSponsorButton = document.createElement("button"); + startSponsorButton.id = "startSponsorButton"; startSponsorButton.className = "ytp-button"; startSponsorButton.setAttribute("title", "Sponsor Starts Now"); startSponsorButton.addEventListener("click", startSponsorClicked); @@ -170,7 +189,18 @@ function addPlayerControlsButton() { referenceNode.prepend(startSponsorButton); } -addPlayerControlsButton(); +function removePlayerControlsButton() { + document.getElementById("startSponsorButton").style.display = "none"; +} + +//adds or removes the player controls button to what it should be +function updateVisibilityOfPlayerControlsButton() { + if (hideVideoPlayerControls) { + removePlayerControlsButton(); + } else { + addPlayerControlsButton(); + } +} function startSponsorClicked() { toggleStartSponsorButton(); diff --git a/popup.css b/popup.css index 2628e98a..f2e46593 100644 --- a/popup.css +++ b/popup.css @@ -59,6 +59,31 @@ body { top:1px; } +.warningButton { + -moz-box-shadow:inset 0px 1px 0px 0px #cfbd6c; + -webkit-box-shadow:inset 0px 1px 0px 0px #cfbd6c; + box-shadow:inset 0px 1px 0px 0px #cfbd6c; + background-color:#d0821b; + -moz-border-radius:3px; + -webkit-border-radius:3px; + border-radius:3px; + border:1px solid #948b11; + display:inline-block; + cursor:pointer; + color:#ffffff; + font-size:13px; + padding:6px 24px; + text-decoration:none; + text-shadow:0px 1px 0px #856829; +} +.warningButton:hover { + background-color:#bc8215; +} +.warningButton:active { + position:relative; + top:1px; +} + .smallButton { background-color:#f9902d; -moz-border-radius:3px; diff --git a/popup.html b/popup.html index e8292923..e078278d 100644 --- a/popup.html +++ b/popup.html @@ -52,6 +52,12 @@ +
+
+ + + +

diff --git a/popup.js b/popup.js index 2b60683f..052207a9 100644 --- a/popup.js +++ b/popup.js @@ -3,6 +3,8 @@ document.getElementById("sponsorStart").addEventListener("click", sendSponsorSta document.getElementById("clearTimes").addEventListener("click", clearTimes); document.getElementById("submitTimes").addEventListener("click", submitTimes); document.getElementById("showNoticeAgain").addEventListener("click", showNoticeAgain); +document.getElementById("hideVideoPlayerControls").addEventListener("click", hideVideoPlayerControls); +document.getElementById("showVideoPlayerControls").addEventListener("click", showVideoPlayerControls); //if true, the button now selects the end time var startTimeChosen = false; @@ -25,6 +27,15 @@ chrome.storage.local.get(["dontShowNoticeAgain"], function(result) { } }); +//show proper video player controls option +chrome.storage.local.get(["hideVideoPlayerControls"], function(result) { + let hideVideoPlayerControls = result.hideVideoPlayerControls; + if (hideVideoPlayerControls != undefined && hideVideoPlayerControls) { + document.getElementById("hideVideoPlayerControls").style.display = "none"; + document.getElementById("showVideoPlayerControls").style.display = "unset"; + } +}); + chrome.tabs.query({ active: true, currentWindow: true @@ -230,6 +241,40 @@ function showNoticeAgain() { document.getElementById("showNoticeAgain").style.display = "none"; } +function hideVideoPlayerControls() { + chrome.storage.local.set({"hideVideoPlayerControls": true}); + + chrome.tabs.query({ + active: true, + currentWindow: true + }, function(tabs) { + chrome.tabs.sendMessage(tabs[0].id, { + message: "changeVideoPlayerControlsVisibility", + value: true + }); + }); + + document.getElementById("hideVideoPlayerControls").style.display = "none"; + document.getElementById("showVideoPlayerControls").style.display = "unset"; +} + +function showVideoPlayerControls() { + chrome.storage.local.set({"hideVideoPlayerControls": false}); + + chrome.tabs.query({ + active: true, + currentWindow: true + }, function(tabs) { + chrome.tabs.sendMessage(tabs[0].id, { + message: "changeVideoPlayerControlsVisibility", + value: false + }); + }); + + document.getElementById("hideVideoPlayerControls").style.display = "unset"; + document.getElementById("showVideoPlayerControls").style.display = "none"; +} + function updateStartTimeChosen() { //update startTimeChosen variable if (!startTimeChosen) { From 598e15203bbd4eb8d67787ba8f353244670cf0c8 Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Fri, 12 Jul 2019 19:11:09 -0400 Subject: [PATCH 23/23] Made options a hidden section in the popup. --- popup.css | 6 +++--- popup.html | 28 +++++++++++++++++++--------- popup.js | 7 +++++++ 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/popup.css b/popup.css index f2e46593..9c59f74f 100644 --- a/popup.css +++ b/popup.css @@ -34,7 +34,7 @@ body { top:1px; } -.noticeButton { +.dangerButton { -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; @@ -51,10 +51,10 @@ body { text-decoration:none; text-shadow:0px 1px 0px #854629; } -.noticeButton:hover { +.dangerButton:hover { background-color:#bc3315; } -.noticeButton:active { +.dangerButton:active { position:relative; top:1px; } diff --git a/popup.html b/popup.html index e078278d..79b7adde 100644 --- a/popup.html +++ b/popup.html @@ -52,16 +52,26 @@ -
-
- - - - -
-
+
+
+
- + +
+ +
diff --git a/popup.js b/popup.js index 052207a9..d5b984f0 100644 --- a/popup.js +++ b/popup.js @@ -5,6 +5,7 @@ document.getElementById("submitTimes").addEventListener("click", submitTimes); document.getElementById("showNoticeAgain").addEventListener("click", showNoticeAgain); document.getElementById("hideVideoPlayerControls").addEventListener("click", hideVideoPlayerControls); document.getElementById("showVideoPlayerControls").addEventListener("click", showVideoPlayerControls); +document.getElementById("optionsButton").addEventListener("click", openOptions); //if true, the button now selects the end time var startTimeChosen = false; @@ -301,6 +302,12 @@ function showSubmitTimesIfNecessary() { } } +//make the options div visisble +function openOptions() { + document.getElementById("optionsButtonContainer").style.display = "none"; + document.getElementById("options").style.display = "unset"; +} + //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. " +