Merge branch 'master' of https://github.com/ajayyy/SponsorBlock into experimental

# Conflicts:
#	content.js
#	firefox_manifest.json
#	manifest.json
This commit is contained in:
Ajay Ramachandran
2019-07-28 17:24:25 -04:00
3 changed files with 69 additions and 54 deletions

View File

@@ -5,6 +5,12 @@
SponsorBlock is an extension that will skip over sponsored segments of YouTube videos. SponsorBlock 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. SponsorBlock is an extension that will skip over sponsored segments of YouTube videos. SponsorBlock 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.
# Available for Chrome and Firefox
Chrome: https://chrome.google.com/webstore/detail/mnjggcdmjocbbbhaepdhchncahnbgone/
Firefox: https://addons.mozilla.org/addon/sponsorblock/
# Server # Server
The backend server code is available here: https://github.com/ajayyy/SponsorBlockServer The backend server code is available here: https://github.com/ajayyy/SponsorBlockServer
@@ -19,13 +25,9 @@ Hopefully this project can be combined with projects like [this](https://github.
This project is partially based off of [this experimental extension](https://github.com/OfficialNoob/YTSponsorSkip). That extension has the basic video skipping functionality. This project is partially based off of [this experimental extension](https://github.com/OfficialNoob/YTSponsorSkip). That extension has the basic video skipping functionality.
# Chrome extension # Build Yourself
It will be on the chrome webstore soon once I get some more UI features in, such as an icon. For now, you can load this project as an unpacked extension. Make sure to rename the `config.js.example` file to `config.js` before installing. You can load this project as an unpacked extension. Make sure to rename the `config.js.example` file to `config.js` before installing.
# Firefox extension
None at the moment
# Credit # Credit

View File

@@ -602,6 +602,8 @@ function sponsorMessageStarted() {
} }
function submitSponsorTimes() { function submitSponsorTimes() {
if(!confirm("Are you sure you want to submit this?")) return;
if (document.getElementById("submitButton").style.display == "none") { if (document.getElementById("submitButton").style.display == "none") {
//don't submit, not ready //don't submit, not ready
return; return;
@@ -683,5 +685,6 @@ function sendRequestToCustomServer(type, fullAddress, callback) {
function getYouTubeVideoID(url) { // Returns with video id else returns false function getYouTubeVideoID(url) { // Returns with video id else returns false
var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/; var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/;
var match = url.match(regExp); var match = url.match(regExp);
return (match && match[7].length == 11) ? match[7] : false; var id = new URL(url).searchParams.get("v");
} return (match && match[7].length == 11) ? id : false;
}

102
popup.js
View File

@@ -1,14 +1,33 @@
// References
var SB = {};
SB.sponsorStart = document.getElementById("sponsorStart");
SB.clearTimes = document.getElementById("clearTimes");
SB.submitTimes = document.getElementById("submitTimes");
SB.showNoticeAgain = document.getElementById("showNoticeAgain");
SB.hideVideoPlayerControls = document.getElementById("hideVideoPlayerControls");
SB.showVideoPlayerControls = document.getElementById("showVideoPlayerControls");
SB.disableSponsorViewTracking = document.getElementById("disableSponsorViewTracking");
SB.enableSponsorViewTracking = document.getElementById("enableSponsorViewTracking");
SB.optionsButton = document.getElementById("optionsButton");
SB.reportAnIssue = document.getElementById("reportAnIssue");
// sponsorTimesContributions
SB.sponsorTimesContributionsContainer = document.getElementById("sponsorTimesContributionsContainer");
SB.sponsorTimesContributionsDisplay = document.getElementById("sponsorTimesContributionsDisplay");
SB.sponsorTimesContributionsDisplayEndWord = document.getElementById("sponsorTimesContributionsDisplayEndWord");
//setup click listeners //setup click listeners
document.getElementById("sponsorStart").addEventListener("click", sendSponsorStartMessage); SB.sponsorStart.addEventListener("click", sendSponsorStartMessage);
document.getElementById("clearTimes").addEventListener("click", clearTimes); SB.clearTimes.addEventListener("click", clearTimes);
document.getElementById("submitTimes").addEventListener("click", submitTimes); SB.submitTimes.addEventListener("click", submitTimes);
document.getElementById("showNoticeAgain").addEventListener("click", showNoticeAgain); SB.showNoticeAgain.addEventListener("click", showNoticeAgain);
document.getElementById("hideVideoPlayerControls").addEventListener("click", hideVideoPlayerControls); SB.hideVideoPlayerControls.addEventListener("click", hideVideoPlayerControls);
document.getElementById("showVideoPlayerControls").addEventListener("click", showVideoPlayerControls); SB.showVideoPlayerControls.addEventListener("click", showVideoPlayerControls);
document.getElementById("disableSponsorViewTracking").addEventListener("click", disableSponsorViewTracking); SB.disableSponsorViewTracking.addEventListener("click", disableSponsorViewTracking);
document.getElementById("enableSponsorViewTracking").addEventListener("click", enableSponsorViewTracking); SB.enableSponsorViewTracking.addEventListener("click", enableSponsorViewTracking);
document.getElementById("optionsButton").addEventListener("click", openOptions); SB.optionsButton.addEventListener("click", openOptions);
document.getElementById("reportAnIssue").addEventListener("click", reportAnIssue); SB.reportAnIssue.addEventListener("click", reportAnIssue);
//if true, the button now selects the end time //if true, the button now selects the end time
var startTimeChosen = false; var startTimeChosen = false;
@@ -27,7 +46,7 @@ var isYouTubeTab = false;
chrome.storage.sync.get(["dontShowNoticeAgain"], function(result) { chrome.storage.sync.get(["dontShowNoticeAgain"], function(result) {
let dontShowNoticeAgain = result.dontShowNoticeAgain; let dontShowNoticeAgain = result.dontShowNoticeAgain;
if (dontShowNoticeAgain != undefined && dontShowNoticeAgain) { if (dontShowNoticeAgain != undefined && dontShowNoticeAgain) {
document.getElementById("showNoticeAgain").style.display = "unset"; SB.showNoticeAgain.style.display = "unset";
} }
}); });
@@ -35,8 +54,8 @@ chrome.storage.sync.get(["dontShowNoticeAgain"], function(result) {
chrome.storage.sync.get(["hideVideoPlayerControls"], function(result) { chrome.storage.sync.get(["hideVideoPlayerControls"], function(result) {
let hideVideoPlayerControls = result.hideVideoPlayerControls; let hideVideoPlayerControls = result.hideVideoPlayerControls;
if (hideVideoPlayerControls != undefined && hideVideoPlayerControls) { if (hideVideoPlayerControls != undefined && hideVideoPlayerControls) {
document.getElementById("hideVideoPlayerControls").style.display = "none"; SB.hideVideoPlayerControls.style.display = "none";
document.getElementById("showVideoPlayerControls").style.display = "unset"; SB.showVideoPlayerControls.style.display = "unset";
} }
}); });
@@ -44,25 +63,21 @@ chrome.storage.sync.get(["hideVideoPlayerControls"], function(result) {
chrome.storage.sync.get(["trackViewCount"], function(result) { chrome.storage.sync.get(["trackViewCount"], function(result) {
let trackViewCount = result.trackViewCount; let trackViewCount = result.trackViewCount;
if (trackViewCount != undefined && !trackViewCount) { if (trackViewCount != undefined && !trackViewCount) {
document.getElementById("disableSponsorViewTracking").style.display = "none"; SB.disableSponsorViewTracking.style.display = "none";
document.getElementById("enableSponsorViewTracking").style.display = "unset"; SB.enableSponsorViewTracking.style.display = "unset";
} }
}); });
//get the amount of times this user has contributed and display it to thank them //get the amount of times this user has contributed and display it to thank them
chrome.storage.sync.get(["sponsorTimesContributed"], function(result) { chrome.storage.sync.get(["sponsorTimesContributed"], function(result) {
if (result.sponsorTimesContributed != undefined) { if (result.sponsorTimesContributed != undefined) {
let sponsorTimesContributionsContainer = document.getElementById("sponsorTimesContributionsContainer");
let sponsorTimesContributionsDisplay = document.getElementById("sponsorTimesContributionsDisplay");
let sponsorTimesContributionsDisplayEndWord = document.getElementById("sponsorTimesContributionsDisplayEndWord");
if (result.sponsorTimesContributed > 1) { if (result.sponsorTimesContributed > 1) {
sponsorTimesContributionsDisplayEndWord.innerText = "sponsors." SB.sponsorTimesContributionsDisplayEndWord.innerText = "sponsors."
} else { } else {
sponsorTimesContributionsDisplayEndWord.innerText = "sponsor." SB.sponsorTimesContributionsDisplayEndWord.innerText = "sponsor."
} }
sponsorTimesContributionsDisplay.innerText = result.sponsorTimesContributed; SB.sponsorTimesContributionsDisplay.innerText = result.sponsorTimesContributed;
sponsorTimesContributionsContainer.style.display = "unset"; SB.sponsorTimesContributionsContainer.style.display = "unset";
//get the userID //get the userID
chrome.storage.sync.get(["userID"], function(result) { chrome.storage.sync.get(["userID"], function(result) {
@@ -73,19 +88,14 @@ chrome.storage.sync.get(["sponsorTimesContributed"], function(result) {
sendRequestToServer("GET", "/api/getViewsForUser?userID=" + userID, function(xmlhttp) { sendRequestToServer("GET", "/api/getViewsForUser?userID=" + userID, function(xmlhttp) {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
let viewCount = JSON.parse(xmlhttp.responseText).viewCount; let viewCount = JSON.parse(xmlhttp.responseText).viewCount;
if (viewCount != 0) { if (viewCount != 0) {
let sponsorTimesViewsContainer = document.getElementById("sponsorTimesViewsContainer");
let sponsorTimesViewsDisplay = document.getElementById("sponsorTimesViewsDisplay");
let sponsorTimesViewsDisplayEndWord = document.getElementById("sponsorTimesViewsDisplayEndWord");
if (viewCount > 1) { if (viewCount > 1) {
sponsorTimesViewsDisplayEndWord.innerText = "sponsor segments." SB.sponsorTimesViewsDisplayEndWord.innerText = "sponsor segments."
} else { } else {
sponsorTimesViewsDisplayEndWord.innerText = "sponsor segment." SB.sponsorTimesViewsDisplayEndWord.innerText = "sponsor segment."
} }
sponsorTimesViewsDisplay.innerText = viewCount; SB.sponsorTimesViewsDisplay.innerText = viewCount;
sponsorTimesViewsContainer.style.display = "unset"; SB.sponsorTimesViewsContainer.style.display = "unset";
} }
} }
}); });
@@ -117,7 +127,7 @@ function loadTabData(tabs) {
if (sponsorTimesStorage != undefined && sponsorTimesStorage.length > 0) { if (sponsorTimesStorage != undefined && sponsorTimesStorage.length > 0) {
if (sponsorTimesStorage[sponsorTimesStorage.length - 1] != undefined && sponsorTimesStorage[sponsorTimesStorage.length - 1].length < 2) { if (sponsorTimesStorage[sponsorTimesStorage.length - 1] != undefined && sponsorTimesStorage[sponsorTimesStorage.length - 1].length < 2) {
startTimeChosen = true; startTimeChosen = true;
document.getElementById("sponsorStart").innerHTML = "Sponsorship Ends Now"; SB.sponsorStart.innerHTML = "Sponsorship Ends Now";
} }
sponsorTimes = sponsorTimesStorage; sponsorTimes = sponsorTimesStorage;
@@ -372,7 +382,7 @@ function showNoticeAgain() {
}); });
}); });
document.getElementById("showNoticeAgain").style.display = "none"; SB.showNoticeAgain.style.display = "none";
} }
function hideVideoPlayerControls() { function hideVideoPlayerControls() {
@@ -388,8 +398,8 @@ function hideVideoPlayerControls() {
}); });
}); });
document.getElementById("hideVideoPlayerControls").style.display = "none"; SB.hideVideoPlayerControls.style.display = "none";
document.getElementById("showVideoPlayerControls").style.display = "unset"; SB.showVideoPlayerControls.style.display = "unset";
} }
function showVideoPlayerControls() { function showVideoPlayerControls() {
@@ -405,8 +415,8 @@ function showVideoPlayerControls() {
}); });
}); });
document.getElementById("hideVideoPlayerControls").style.display = "unset"; SB.hideVideoPlayerControls.style.display = "unset";
document.getElementById("showVideoPlayerControls").style.display = "none"; SB.showVideoPlayerControls.style.display = "none";
} }
function disableSponsorViewTracking() { function disableSponsorViewTracking() {
@@ -422,8 +432,8 @@ function disableSponsorViewTracking() {
}); });
}); });
document.getElementById("disableSponsorViewTracking").style.display = "none"; SB.disableSponsorViewTracking.style.display = "none";
document.getElementById("enableSponsorViewTracking").style.display = "unset"; SB.enableSponsorViewTracking.style.display = "unset";
} }
function enableSponsorViewTracking() { function enableSponsorViewTracking() {
@@ -439,15 +449,15 @@ function enableSponsorViewTracking() {
}); });
}); });
document.getElementById("enableSponsorViewTracking").style.display = "none"; SB.enableSponsorViewTracking.style.display = "none";
document.getElementById("disableSponsorViewTracking").style.display = "unset"; SB.disableSponsorViewTracking.style.display = "unset";
} }
function updateStartTimeChosen() { function updateStartTimeChosen() {
//update startTimeChosen variable //update startTimeChosen variable
if (!startTimeChosen) { if (!startTimeChosen) {
startTimeChosen = true; startTimeChosen = true;
document.getElementById("sponsorStart").innerHTML = "Sponsorship Ends Now"; SB.sponsorStart.innerHTML = "Sponsorship Ends Now";
} else { } else {
resetStartTimeChosen(); resetStartTimeChosen();
} }
@@ -456,7 +466,7 @@ function updateStartTimeChosen() {
//set it to false //set it to false
function resetStartTimeChosen() { function resetStartTimeChosen() {
startTimeChosen = false; startTimeChosen = false;
document.getElementById("sponsorStart").innerHTML = "Sponsorship Starts Now"; SB.sponsorStart.innerHTML = "Sponsorship Starts Now";
} }
//hides and shows the submit times button when needed //hides and shows the submit times button when needed
@@ -485,7 +495,7 @@ function displayNoVideo() {
function reportAnIssue() { function reportAnIssue() {
document.getElementById("issueReporterContainer").style.display = "unset"; document.getElementById("issueReporterContainer").style.display = "unset";
document.getElementById("reportAnIssue").style.display = "none"; SB.reportAnIssue.style.display = "none";
} }
function addVoteMessage(message, UUID) { function addVoteMessage(message, UUID) {
@@ -566,4 +576,4 @@ function getYouTubeVideoID(url) { // Return video id or false
var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/; var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/;
var match = url.match(regExp); var match = url.match(regExp);
return (match && match[7].length == 11) ? match[7] : false; return (match && match[7].length == 11) ? match[7] : false;
} }