From 5adeeed6346a7d24ac6dce16370c8e685ff56cc7 Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Mon, 12 Aug 2019 11:42:39 -0400 Subject: [PATCH 1/9] Made editing not possible on unfinished sponsors. Resolved https://github.com/ajayyy/SponsorBlock/issues/77 --- popup.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/popup.js b/popup.js index c7fc607c..0a0d7ecc 100644 --- a/popup.js +++ b/popup.js @@ -492,7 +492,6 @@ function runThePopup() { } currentSponsorTimeContainer.innerText = currentSponsorTimeMessage; - currentSponsorTimeContainer.addEventListener("click", () => editSponsorTime(index)); sponsorTimesContainer.appendChild(currentSponsorTimeContainer); sponsorTimesContainer.appendChild(deleteButton); @@ -500,6 +499,8 @@ function runThePopup() { //only if it is a complete sponsor time if (sponsorTimes[i].length > 1) { sponsorTimesContainer.appendChild(editButton); + + currentSponsorTimeContainer.addEventListener("click", () => editSponsorTime(index)); } } From 43e3d03e9a1ab8e2c54269abe79d5fd8ca7a80d8 Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Mon, 12 Aug 2019 12:02:01 -0400 Subject: [PATCH 2/9] Added better error checking --- popup.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/popup.js b/popup.js index 0a0d7ecc..8c6a5f16 100644 --- a/popup.js +++ b/popup.js @@ -208,22 +208,24 @@ function runThePopup() { function onTabs(tabs) { chrome.tabs.sendMessage(tabs[0].id, {message: 'getVideoID'}, function(result) { - if (result.videoID) { - loadTabData(tabs, result.videoid); - } + if (result != undefined && result.videoID) { + loadTabData(tabs, result.videoID); + } else if (result == undefined && chrome.runtime.lastError) { + //this isn't a YouTube video then, or at least the content script is not loaded + displayNoVideo(); + } }); } - function loadTabData(tabs, currentVideoID) { - - if (!currentVideoID) { + function loadTabData(tabs, videoID) { + if (!videoID) { //this isn't a YouTube video then displayNoVideo(); return; } //load video times for this video - let sponsorTimeKey = "sponsorTimes" + currentVideoID; + let sponsorTimeKey = "sponsorTimes" + videoID; chrome.storage.sync.get([sponsorTimeKey], function(result) { let sponsorTimesStorage = result[sponsorTimeKey]; if (sponsorTimesStorage != undefined && sponsorTimesStorage.length > 0) { @@ -499,7 +501,7 @@ function runThePopup() { //only if it is a complete sponsor time if (sponsorTimes[i].length > 1) { sponsorTimesContainer.appendChild(editButton); - + currentSponsorTimeContainer.addEventListener("click", () => editSponsorTime(index)); } } From 012a36b931d1bcd9193dacaa66fe75166f5e2d8e Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Mon, 12 Aug 2019 12:04:57 -0400 Subject: [PATCH 3/9] Increased button padding --- popup.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/popup.css b/popup.css index cb86b962..49a29ccc 100644 --- a/popup.css +++ b/popup.css @@ -80,8 +80,8 @@ h1.popupElement { .mediumLink.popupElement { font-size: 15px; - padding-left: 15px; - padding-right: 15px; + margin-left: 25px; + margin-right: 25px; text-decoration: underline; cursor: pointer; } From e281b90699bfa6e72fc052f9b1e902169511682c Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Mon, 12 Aug 2019 12:05:16 -0400 Subject: [PATCH 4/9] Fixed sponsor times not properly saving --- popup.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/popup.js b/popup.js index 8c6a5f16..71e1ef83 100644 --- a/popup.js +++ b/popup.js @@ -209,7 +209,9 @@ function runThePopup() { function onTabs(tabs) { chrome.tabs.sendMessage(tabs[0].id, {message: 'getVideoID'}, function(result) { if (result != undefined && result.videoID) { - loadTabData(tabs, result.videoID); + currentVideoID = result.videoID; + + loadTabData(tabs); } else if (result == undefined && chrome.runtime.lastError) { //this isn't a YouTube video then, or at least the content script is not loaded displayNoVideo(); @@ -217,15 +219,15 @@ function runThePopup() { }); } - function loadTabData(tabs, videoID) { - if (!videoID) { + function loadTabData(tabs) { + if (!currentVideoID) { //this isn't a YouTube video then displayNoVideo(); return; } //load video times for this video - let sponsorTimeKey = "sponsorTimes" + videoID; + let sponsorTimeKey = "sponsorTimes" + currentVideoID; chrome.storage.sync.get([sponsorTimeKey], function(result) { let sponsorTimesStorage = result[sponsorTimeKey]; if (sponsorTimesStorage != undefined && sponsorTimesStorage.length > 0) { From 3f815a18c4b507e6622824c371e7aabfc72b4f6d Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Mon, 12 Aug 2019 12:21:20 -0400 Subject: [PATCH 5/9] Added a sponsor time preview. It skips 2 seconds before the start time so you can preview how it feels. Also increased the space between the times and the clear times button. Resolves https://github.com/ajayyy/SponsorBlock/issues/66 --- content.js | 4 ++++ popup.html | 2 ++ popup.js | 51 ++++++++++++++++++++++++++++++++++++++++----------- 3 files changed, 46 insertions(+), 11 deletions(-) diff --git a/content.js b/content.js index 5a836c1d..1b4db72e 100644 --- a/content.js +++ b/content.js @@ -119,6 +119,10 @@ function messageListener(request, sender, sendResponse) { }) } + if (request.message == "skipToTime") { + v.currentTime = request.time; + } + if (request.message == "getChannelURL") { sendResponse({ channelURL: channelURL diff --git a/popup.html b/popup.html index 30195294..82c2d66c 100644 --- a/popup.html +++ b/popup.html @@ -93,6 +93,8 @@ + +
diff --git a/popup.js b/popup.js index 71e1ef83..3359413e 100644 --- a/popup.js +++ b/popup.js @@ -210,7 +210,7 @@ function runThePopup() { chrome.tabs.sendMessage(tabs[0].id, {message: 'getVideoID'}, function(result) { if (result != undefined && result.videoID) { currentVideoID = result.videoID; - + loadTabData(tabs); } else if (result == undefined && chrome.runtime.lastError) { //this isn't a YouTube video then, or at least the content script is not loaded @@ -473,8 +473,11 @@ function runThePopup() { let index = i; deleteButton.addEventListener("click", () => deleteSponsorTime(index)); - let spacer = document.createElement("span"); - spacer.innerText = " "; + let previewButton = document.createElement("span"); + previewButton.id = "sponsorTimePreviewButton" + i; + previewButton.innerText = "Preview"; + previewButton.className = "mediumLink popupElement"; + previewButton.addEventListener("click", () => previewSponsorTime(index)); let editButton = document.createElement("span"); editButton.id = "sponsorTimeEditButton" + i; @@ -502,6 +505,7 @@ function runThePopup() { //only if it is a complete sponsor time if (sponsorTimes[i].length > 1) { + sponsorTimesContainer.appendChild(previewButton); sponsorTimesContainer.appendChild(editButton); currentSponsorTimeContainer.addEventListener("click", () => editSponsorTime(index)); @@ -510,6 +514,28 @@ function runThePopup() { return sponsorTimesContainer; } + + function previewSponsorTime(index) { + let skipTime = sponsorTimes[index][0]; + + if (document.getElementById("startTimeMinutes" + index) != null) { + //edit is currently open, use that time + + skipTime = getSponsorTimeEditTimes("startTime", index); + } + + chrome.tabs.query({ + active: true, + currentWindow: true + }, tabs => { + chrome.tabs.sendMessage( + tabs[0].id, { + message: "skipToTime", + time: skipTime - 2 + } + ); + }); + } function editSponsorTime(index) { if (document.getElementById("startTimeMinutes" + index) != null) { @@ -582,16 +608,19 @@ function runThePopup() { sponsorTimesContainer.replaceChild(saveButton, editButton); } + + //id start name is whether it is the startTime or endTime + //gives back the time in seconds + function getSponsorTimeEditTimes(idStartName, index) { + let minutes = document.getElementById(idStartName + "Minutes" + index); + let seconds = document.getElementById(idStartName + "Seconds" + index); + + return parseInt(minutes.value) * 60 + parseFloat(seconds.value); + } function saveSponsorTimeEdit(index) { - let startTimeMinutes = document.getElementById("startTimeMinutes" + index); - let startTimeSeconds = document.getElementById("startTimeSeconds" + index); - - let endTimeMinutes = document.getElementById("endTimeMinutes" + index); - let endTimeSeconds = document.getElementById("endTimeSeconds" + index); - - sponsorTimes[index][0] = parseInt(startTimeMinutes.value) * 60 + parseFloat(startTimeSeconds.value); - sponsorTimes[index][1] = parseInt(endTimeMinutes.value) * 60 + parseFloat(endTimeSeconds.value); + sponsorTimes[index][0] = getSponsorTimeEditTimes("startTime", index); + sponsorTimes[index][1] = getSponsorTimeEditTimes("endTime", index); //save this let sponsorTimeKey = "sponsorTimes" + currentVideoID; From ac118173a50d47fa6ad6e69f0024e4cf07b162e3 Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Mon, 12 Aug 2019 12:26:52 -0400 Subject: [PATCH 6/9] Made preview also save the edit. --- popup.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/popup.js b/popup.js index 3359413e..0c62370e 100644 --- a/popup.js +++ b/popup.js @@ -522,6 +522,9 @@ function runThePopup() { //edit is currently open, use that time skipTime = getSponsorTimeEditTimes("startTime", index); + + //save the edit + saveSponsorTimeEdit(index, false); } chrome.tabs.query({ @@ -618,7 +621,7 @@ function runThePopup() { return parseInt(minutes.value) * 60 + parseFloat(seconds.value); } - function saveSponsorTimeEdit(index) { + function saveSponsorTimeEdit(index, closeEditMode = true) { sponsorTimes[index][0] = getSponsorTimeEditTimes("startTime", index); sponsorTimes[index][1] = getSponsorTimeEditTimes("endTime", index); @@ -636,9 +639,11 @@ function runThePopup() { }); }); - displaySponsorTimes(); + if (closeEditMode) { + displaySponsorTimes(); - showSubmitTimesIfNecessary(); + showSubmitTimesIfNecessary(); + } } //deletes the sponsor time submitted at an index From 6b3eb09198730cb6dbd44296b8da0fca41aa2bca Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Mon, 12 Aug 2019 15:27:35 -0400 Subject: [PATCH 7/9] Added button to set edit to the current time. --- content.js | 6 ++++++ popup.css | 6 ++++++ popup.js | 36 +++++++++++++++++++++++++++++++++++- 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/content.js b/content.js index 1b4db72e..3ee26aeb 100644 --- a/content.js +++ b/content.js @@ -123,6 +123,12 @@ function messageListener(request, sender, sendResponse) { v.currentTime = request.time; } + if (request.message == "getCurrentTime") { + sendResponse({ + currentTime: v.currentTime + }); + } + if (request.message == "getChannelURL") { sendResponse({ channelURL: channelURL diff --git a/popup.css b/popup.css index 49a29ccc..1d5dd91e 100644 --- a/popup.css +++ b/popup.css @@ -86,6 +86,12 @@ h1.popupElement { cursor: pointer; } +.tinyLink.popupElement { + font-size: 10px; + text-decoration: underline; + cursor: pointer; +} + .whitelistButton.popupElement { background-color:#3acc3a; -moz-border-radius:28px; diff --git a/popup.js b/popup.js index 0c62370e..71587889 100644 --- a/popup.js +++ b/popup.js @@ -551,6 +551,13 @@ function runThePopup() { let sponsorTimeContainer = document.getElementById("sponsorTimeContainer" + index); + //the button to set the current time + let startTimeNowButton = document.createElement("span"); + startTimeNowButton.id = "startTimeNowButton" + index; + startTimeNowButton.innerText = "(Now)"; + startTimeNowButton.className = "tinyLink popupElement"; + startTimeNowButton.addEventListener("click", () => setEditTimeToCurrentTime("startTime", index)); + //get sponsor time minutes and seconds boxes let startTimeMinutes = document.createElement("input"); startTimeMinutes.id = "startTimeMinutes" + index; @@ -565,7 +572,7 @@ function runThePopup() { startTimeSeconds.type = "text"; startTimeSeconds.value = getTimeInFormattedSeconds(sponsorTimes[index][0]); startTimeSeconds.style.width = "60px"; - + let endTimeMinutes = document.createElement("input"); endTimeMinutes.id = "endTimeMinutes" + index; endTimeMinutes.className = "sponsorTime popupElement"; @@ -579,6 +586,13 @@ function runThePopup() { endTimeSeconds.type = "text"; endTimeSeconds.value = getTimeInFormattedSeconds(sponsorTimes[index][1]); endTimeSeconds.style.width = "60px"; + + //the button to set the current time + let endTimeNowButton = document.createElement("span"); + endTimeNowButton.id = "endTimeNowButton" + index; + endTimeNowButton.innerText = "(Now)"; + endTimeNowButton.className = "tinyLink popupElement"; + endTimeNowButton.addEventListener("click", () => setEditTimeToCurrentTime("endTime", index)); let colonText = document.createElement("span"); colonText.innerText = ":"; @@ -591,6 +605,7 @@ function runThePopup() { sponsorTimeContainer.removeChild(sponsorTimeContainer.firstChild); } + sponsorTimeContainer.appendChild(startTimeNowButton); sponsorTimeContainer.appendChild(startTimeMinutes); sponsorTimeContainer.appendChild(colonText); sponsorTimeContainer.appendChild(startTimeSeconds); @@ -598,6 +613,7 @@ function runThePopup() { sponsorTimeContainer.appendChild(endTimeMinutes); sponsorTimeContainer.appendChild(colonText); sponsorTimeContainer.appendChild(endTimeSeconds); + sponsorTimeContainer.appendChild(endTimeNowButton); //add save button and remove edit button let saveButton = document.createElement("span"); @@ -612,6 +628,24 @@ function runThePopup() { sponsorTimesContainer.replaceChild(saveButton, editButton); } + function setEditTimeToCurrentTime(idStartName, index) { + chrome.tabs.query({ + active: true, + currentWindow: true + }, tabs => { + chrome.tabs.sendMessage( + tabs[0].id, + {message: "getCurrentTime"}, + function (response) { + let minutes = document.getElementById(idStartName + "Minutes" + index); + let seconds = document.getElementById(idStartName + "Seconds" + index); + + minutes.value = getTimeInMinutes(response.currentTime); + seconds.value = getTimeInFormattedSeconds(response.currentTime); + }); + }); + } + //id start name is whether it is the startTime or endTime //gives back the time in seconds function getSponsorTimeEditTimes(idStartName, index) { From 41aa58e004655beb063e9bfd8d41275f1c150988 Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Mon, 12 Aug 2019 15:58:25 -0400 Subject: [PATCH 8/9] Fixed userIDs not being properly submitted. --- background.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/background.js b/background.js index a0e0c798..c8d7d593 100644 --- a/background.js +++ b/background.js @@ -141,7 +141,7 @@ function submitVote(type, UUID, callback) { function submitTimes(videoID, callback) { //get the video times from storage let sponsorTimeKey = 'sponsorTimes' + videoID; - chrome.storage.sync.get([sponsorTimeKey], function(result) { + chrome.storage.sync.get([sponsorTimeKey, "userID"], function(result) { let sponsorTimes = result[sponsorTimeKey]; let userID = result.userID; From 640ad58c65dd693b25b4e1fb5343fbf43eaee46c Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Mon, 12 Aug 2019 15:59:06 -0400 Subject: [PATCH 9/9] Updated version number --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index 0b4020bd..23204e4b 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "name": "SponsorBlock for YouTube - Skip Sponsorships", "short_name": "SponsorBlock", - "version": "1.0.31", + "version": "1.0.33", "description": "Skip over sponsorship on YouTube videos. Report sponsors on videos you watch to save the time of others.", "content_scripts": [ {