Compare commits

...

21 Commits

Author SHA1 Message Date
Ajay Ramachandran
7ed72fad40 Merge pull request #52 from ajayyy/experimental
Firefox fixes
2019-07-30 18:22:45 -04:00
Ajay Ramachandran
a2b4f8d141 Update version number 2019-07-30 18:21:23 -04:00
Ajay Ramachandran
6ad1070c44 Merge branch 'master' into experimental 2019-07-30 18:20:27 -04:00
Ajay Ramachandran
b1784fa311 Update version number. 2019-07-30 18:18:03 -04:00
Ajay Ramachandran
74affbd9c0 Fixed Firefox notification issue 2019-07-30 18:15:49 -04:00
Ajay Ramachandran
10d1978566 Added better support for the old YouTube layout. 2019-07-30 15:57:28 -04:00
Ajay Ramachandran
a1c8ecabca Merge pull request #49 from OfficialNoob/patch-6
Old function in-use
2019-07-30 14:41:21 -04:00
Official Noob
53f611a43a Old function in-use 2019-07-30 18:59:06 +01:00
Ajay Ramachandran
b0929e2431 Remade the popup menu to support Firefox and not use IFrames. 2019-07-30 13:27:20 -04:00
Ajay Ramachandran
da20709512 Merge pull request #48 from ajayyy/experimental
More options
2019-07-30 00:11:45 -04:00
Ajay Ramachandran
6ff461fa86 Updated version number 2019-07-30 00:09:11 -04:00
Ajay Ramachandran
e205447968 Added ability to hide info and delete button. 2019-07-29 21:40:13 -04:00
Ajay Ramachandran
ff6234bffe Increased font size of sponsor time, edit and delete buttons.
Also made clicking times trigger an edit.
2019-07-29 21:19:29 -04:00
Ajay Ramachandran
d93d475c1f Added error messages to video player submission. 2019-07-29 21:09:10 -04:00
Ajay Ramachandran
0d0b919106 Added better error messages to voting. 2019-07-29 21:06:15 -04:00
Ajay Ramachandran
366fd43752 Added more specific error message for error 502 2019-07-29 20:58:48 -04:00
Ajay Ramachandran
1119adffb7 Added clear button. 2019-07-29 20:54:10 -04:00
Ajay Ramachandran
9d14f02bec Update README.md 2019-07-29 17:54:21 -04:00
Ajay Ramachandran
9fada00028 Update LICENSE 2019-07-29 17:53:15 -04:00
Ajay Ramachandran
e0d2436372 Added support for old youtube theme 2019-07-29 16:35:30 -04:00
Ajay Ramachandran
e4c94aa5c5 Added more info the confirmation button. 2019-07-29 16:29:20 -04:00
10 changed files with 1339 additions and 975 deletions

View File

@@ -652,7 +652,7 @@ Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode: notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author> SponsorBlock Copyright (C) 2019 Ajay Ramachandran and other SponsorBlock contributors
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details. under certain conditions; type `show c' for details.

View File

@@ -34,3 +34,5 @@ You can load this project as an unpacked extension. Make sure to rename the `con
The awesome [Invidious API](https://github.com/omarroth/invidious/wiki/API) is used to grab the time the video was published. The awesome [Invidious API](https://github.com/omarroth/invidious/wiki/API) is used to grab the time the video was published.
Some icons made by <a href="https://www.flaticon.com/authors/gregor-cresnar" title="Gregor Cresnar">Gregor Cresnar</a> from <a href="https://www.flaticon.com/" title="Flaticon">www.flaticon.com</a> and are licensed by <a href="http://creativecommons.org/licenses/by/3.0/" title="Creative Commons BY 3.0" target="_blank">CC 3.0 BY</a> Some icons made by <a href="https://www.flaticon.com/authors/gregor-cresnar" title="Gregor Cresnar">Gregor Cresnar</a> from <a href="https://www.flaticon.com/" title="Flaticon">www.flaticon.com</a> and are licensed by <a href="http://creativecommons.org/licenses/by/3.0/" title="Creative Commons BY 3.0" target="_blank">CC 3.0 BY</a>
Some icons made by <a href="https://www.flaticon.com/authors/freepik" title="Freepik">Freepik</a> from <a href="https://www.flaticon.com/" title="Flaticon">www.flaticon.com</a> is licensed by <a href="http://creativecommons.org/licenses/by/3.0/" title="Creative Commons BY 3.0" target="_blank">CC 3.0 BY</a>

View File

@@ -3,6 +3,9 @@ var previousVideoID = null
//the id of this user, randomly generated once per install //the id of this user, randomly generated once per install
var userID = null; var userID = null;
//the last video id loaded, to make sure it is a video id change
var sponsorVideoID = null;
//when a new tab is highlighted //when a new tab is highlighted
chrome.tabs.onActivated.addListener( chrome.tabs.onActivated.addListener(
function(activeInfo) { function(activeInfo) {
@@ -100,12 +103,14 @@ function submitVote(type, UUID, callback) {
} else if (xmlhttp.readyState == 4 && xmlhttp.status == 405) { } else if (xmlhttp.readyState == 4 && xmlhttp.status == 405) {
//duplicate vote //duplicate vote
callback({ callback({
successType: 0 successType: 0,
statusCode: xmlhttp.status
}); });
} else if (error) { } else if (error) {
//error while connect //error while connect
callback({ callback({
successType: -1 successType: -1,
statusCode: xmlhttp.status
}); });
} }
}) })
@@ -160,6 +165,12 @@ function videoIDChange(currentVideoID, tabId) {
id: currentVideoID id: currentVideoID
}); });
//not a url change
if (sponsorVideoID == currentVideoID){
return;
}
sponsorVideoID = currentVideoID;
//warn them if they had unsubmitted times //warn them if they had unsubmitted times
if (previousVideoID != null) { if (previousVideoID != null) {
//get the sponsor times from storage //get the sponsor times from storage

View File

@@ -31,6 +31,8 @@ var showingStartSponsor = true;
//should the video controls buttons be added //should the video controls buttons be added
var hideVideoPlayerControls = false; var hideVideoPlayerControls = false;
var hideInfoButtonPlayerControls = false;
var hideDeleteButtonPlayerControls = false;
//becomes true when isInfoFound is called //becomes true when isInfoFound is called
//this is used to close the popup on YouTube when the other popup opens //this is used to close the popup on YouTube when the other popup opens
@@ -57,8 +59,10 @@ chrome.storage.sync.get(["dontShowNoticeAgain"], function(result) {
} }
}); });
chrome.runtime.onMessage.addListener( // Detect URL Changes //get messages from the background script and the popup
function(request, sender, sendResponse) { chrome.runtime.onMessage.addListener(messageListener);
function messageListener(request, sender, sendResponse) {
//message from background script //message from background script
if (request.message == "ytvideoid") { if (request.message == "ytvideoid") {
videoIDChange(request.id); videoIDChange(request.id);
@@ -102,13 +106,21 @@ chrome.runtime.onMessage.addListener( // Detect URL Changes
if (request.message == "changeVideoPlayerControlsVisibility") { if (request.message == "changeVideoPlayerControlsVisibility") {
hideVideoPlayerControls = request.value; hideVideoPlayerControls = request.value;
updateVisibilityOfPlayerControlsButton();
} else if (request.message == "changeInfoButtonPlayerControlsVisibility") {
hideInfoButtonPlayerControls = request.value;
updateVisibilityOfPlayerControlsButton();
} else if (request.message == "changeDeleteButtonPlayerControlsVisibility") {
hideDeleteButtonPlayerControls = request.value;
updateVisibilityOfPlayerControlsButton(); updateVisibilityOfPlayerControlsButton();
} }
if (request.message == "trackViewCount") { if (request.message == "trackViewCount") {
trackViewCount = request.value; trackViewCount = request.value;
} }
}); }
//check for hotkey pressed //check for hotkey pressed
document.onkeydown = function(e){ document.onkeydown = function(e){
@@ -160,13 +172,12 @@ function videoIDChange(id) {
} else if (sponsorTimes != null && sponsorTimes.length > 0 && sponsorTimes[sponsorTimes.length - 1].length < 2) { } else if (sponsorTimes != null && sponsorTimes.length > 0 && sponsorTimes[sponsorTimes.length - 1].length < 2) {
changeStartSponsorButton(false, true); changeStartSponsorButton(false, true);
} else { } else {
changeStartSponsorButton(true, true); changeStartSponsorButton(true, false);
document.getElementById("submitButton").style.display = "none";
} }
} }
}); });
//see if video control buttons should be added //see if video controls buttons should be added
chrome.storage.sync.get(["hideVideoPlayerControls"], function(result) { chrome.storage.sync.get(["hideVideoPlayerControls"], function(result) {
if (result.hideVideoPlayerControls != undefined) { if (result.hideVideoPlayerControls != undefined) {
hideVideoPlayerControls = result.hideVideoPlayerControls; hideVideoPlayerControls = result.hideVideoPlayerControls;
@@ -174,6 +185,21 @@ function videoIDChange(id) {
updateVisibilityOfPlayerControlsButton(); updateVisibilityOfPlayerControlsButton();
}); });
chrome.storage.sync.get(["hideInfoButtonPlayerControls"], function(result) {
if (result.hideInfoButtonPlayerControls != undefined) {
hideInfoButtonPlayerControls = result.hideInfoButtonPlayerControls;
}
updateVisibilityOfPlayerControlsButton();
});
chrome.storage.sync.get(["hideDeleteButtonPlayerControls"], function(result) {
if (result.hideDeleteButtonPlayerControls != undefined) {
hideDeleteButtonPlayerControls = result.hideDeleteButtonPlayerControls;
}
updateVisibilityOfPlayerControlsButton();
});
} }
function sponsorsLookup(id) { function sponsorsLookup(id) {
@@ -297,10 +323,17 @@ function removePlayerControlsButton() {
function updateVisibilityOfPlayerControlsButton() { function updateVisibilityOfPlayerControlsButton() {
addPlayerControlsButton(); addPlayerControlsButton();
addInfoButton(); addInfoButton();
addDeleteButton();
addSubmitButton(); addSubmitButton();
if (hideVideoPlayerControls) { if (hideVideoPlayerControls) {
removePlayerControlsButton(); removePlayerControlsButton();
} }
if (hideInfoButtonPlayerControls) {
document.getElementById("infoButton").style.display = "none";
}
if (hideDeleteButtonPlayerControls) {
document.getElementById("deleteButton").style.display = "none";
}
} }
function startSponsorClicked() { function startSponsorClicked() {
@@ -318,12 +351,19 @@ function startSponsorClicked() {
} }
function changeStartSponsorButton(showStartSponsor, uploadButtonVisible) { function changeStartSponsorButton(showStartSponsor, uploadButtonVisible) {
//if it isn't visible, there is no data
if (uploadButtonVisible && !hideDeleteButtonPlayerControls) {
document.getElementById("deleteButton").style.display = "unset";
} else {
document.getElementById("deleteButton").style.display = "none";
}
if (showStartSponsor) { if (showStartSponsor) {
showingStartSponsor = true; showingStartSponsor = true;
document.getElementById("startSponsorImage").src = chrome.extension.getURL("icons/PlayerStartIconSponsorBlocker256px.png"); document.getElementById("startSponsorImage").src = chrome.extension.getURL("icons/PlayerStartIconSponsorBlocker256px.png");
document.getElementById("startSponsorButton").setAttribute("title", "Sponsor Starts Now"); document.getElementById("startSponsorButton").setAttribute("title", "Sponsor Starts Now");
if (document.getElementById("startSponsorImage").style.display != "none" && uploadButtonVisible) { if (document.getElementById("startSponsorImage").style.display != "none" && uploadButtonVisible && !hideInfoButtonPlayerControls) {
document.getElementById("submitButton").style.display = "unset"; document.getElementById("submitButton").style.display = "unset";
} else if (!uploadButtonVisible) { } else if (!uploadButtonVisible) {
//disable submit button //disable submit button
@@ -369,6 +409,34 @@ function addInfoButton() {
referenceNode.prepend(infoButton); referenceNode.prepend(infoButton);
} }
//shows the delete button on the video player
function addDeleteButton() {
if (document.getElementById("deleteButton") != null) {
//it's already added
return;
}
//make a submit button
let deleteButton = document.createElement("button");
deleteButton.id = "deleteButton";
deleteButton.className = "ytp-button playerButton";
deleteButton.setAttribute("title", "Clear Sponsor Times");
deleteButton.addEventListener("click", clearSponsorTimes);
//hide it at the start
deleteButton.style.display = "none";
let deleteImage = document.createElement("img");
deleteImage.id = "deleteButtonImage";
deleteImage.className = "playerButtonImage";
deleteImage.src = chrome.extension.getURL("icons/PlayerDeleteIconSponsorBlocker256px.png");
//add the image to the button
deleteButton.appendChild(deleteImage);
let referenceNode = document.getElementsByClassName("ytp-right-controls")[0];
referenceNode.prepend(deleteButton);
}
//shows the submit button on the video player //shows the submit button on the video player
function addSubmitButton() { function addSubmitButton() {
if (document.getElementById("submitButton") != null) { if (document.getElementById("submitButton") != null) {
@@ -408,13 +476,11 @@ function openInfoMenu() {
//hide info button //hide info button
document.getElementById("infoButton").style.display = "none"; document.getElementById("infoButton").style.display = "none";
let popup = document.createElement("div"); sendRequestToCustomServer('GET', chrome.extension.getURL("popup.html"), function(xmlhttp) {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var popup = document.createElement("div");
popup.id = "sponsorBlockPopupContainer"; popup.id = "sponsorBlockPopupContainer";
popup.innerHTML = xmlhttp.responseText
let popupFrame = document.createElement("iframe");
popupFrame.id = "sponsorBlockPopupFrame"
popupFrame.src = chrome.extension.getURL("popup.html");
popupFrame.className = "popup";
//close button //close button
let closeButton = document.createElement("div"); let closeButton = document.createElement("div");
@@ -423,12 +489,30 @@ function openInfoMenu() {
closeButton.setAttribute("align", "center"); closeButton.setAttribute("align", "center");
closeButton.addEventListener("click", closeInfoMenu); closeButton.addEventListener("click", closeInfoMenu);
popup.appendChild(closeButton); //add the close button
popup.appendChild(popupFrame); popup.prepend(closeButton);
let parentNode = document.getElementById("secondary"); let parentNode = document.getElementById("secondary");
if (parentNode == null) {
//old youtube theme
parentNode = document.getElementById("watch7-sidebar-contents");
}
parentNode.prepend(popup); //make the logo source not 404
//query selector must be used since getElementByID doesn't work on a node and this isn't added to the document yet
let logo = popup.querySelector("#sponsorBlockPopupLogo");
logo.src = chrome.extension.getURL("icons/LogoSponsorBlocker256px.png");
//remove the style sheet and font that are not necessary
popup.querySelector("#sponorBlockPopupFont").remove();
popup.querySelector("#sponorBlockStyleSheet").remove();
parentNode.insertBefore(popup, parentNode.firstChild);
//run the popup init script
runThePopup();
}
});
} }
function closeInfoMenu() { function closeInfoMenu() {
@@ -441,6 +525,31 @@ function closeInfoMenu() {
} }
} }
function clearSponsorTimes() {
//it can't update to this info yet
closeInfoMenu();
let currentVideoID = getYouTubeVideoID(document.URL);
let sponsorTimeKey = 'sponsorTimes' + currentVideoID;
chrome.storage.sync.get([sponsorTimeKey], function(result) {
let sponsorTimes = result[sponsorTimeKey];
if (sponsorTimes != undefined && sponsorTimes.length > 0) {
let confirmMessage = "Are you sure you want to clear this?\n\n" + getSponsorTimesMessage(sponsorTimes);
confirmMessage += "\n\nTo edit or delete individual values, click the info button or open the extension popup by clicking the extension icon in the top right corner."
if(!confirm(confirmMessage)) return;
//clear the sponsor times
let sponsorTimeKey = "sponsorTimes" + currentVideoID;
chrome.storage.sync.set({[sponsorTimeKey]: []});
//set buttons to be correct
changeStartSponsorButton(true, false);
}
});
}
//Opens the notice that tells the user that a sponsor was just skipped //Opens the notice that tells the user that a sponsor was just skipped
function openSkipNotice(UUID){ function openSkipNotice(UUID){
if (dontShowNotice) { if (dontShowNotice) {
@@ -646,8 +755,13 @@ function vote(type, UUID) {
//failure: duplicate vote //failure: duplicate vote
addLoadingInfo("It seems you've already voted before", UUID) addLoadingInfo("It seems you've already voted before", UUID)
} else if (response.successType == -1) { } else if (response.successType == -1) {
//failure: duplicate vote if (response.statusCode == 502) {
addLoadingInfo("A connection error has occured.", UUID) addLoadingInfo("It seems the sever is down. Contact the dev immediately.", UUID)
} else {
//failure: unknown error
addLoadingInfo("A connection error has occured. Error code: " + response.statusCode, UUID)
}
} }
} }
}); });
@@ -706,7 +820,7 @@ function submitSponsorTimes() {
if (sponsorTimes != undefined && sponsorTimes.length > 0) { if (sponsorTimes != undefined && sponsorTimes.length > 0) {
let confirmMessage = "Are you sure you want to submit this?\n\n" + getSponsorTimesMessage(sponsorTimes); let confirmMessage = "Are you sure you want to submit this?\n\n" + getSponsorTimesMessage(sponsorTimes);
confirmMessage += "\n\nTo see more information, open the popup by clicking the extensions icon in the top right corner." confirmMessage += "\n\nTo edit or delete values, click the info button or open the extension popup by clicking the extension icon in the top right corner."
if(!confirm(confirmMessage)) return; if(!confirm(confirmMessage)) return;
sendSubmitMessage(); sendSubmitMessage();
@@ -748,6 +862,18 @@ function sendSubmitMessage(){
//show that the upload failed //show that the upload failed
document.getElementById("submitButton").style.animation = "unset"; document.getElementById("submitButton").style.animation = "unset";
document.getElementById("submitButtonImage").src = chrome.extension.getURL("icons/PlayerUploadFailedIconSponsorBlocker256px.png"); document.getElementById("submitButtonImage").src = chrome.extension.getURL("icons/PlayerUploadFailedIconSponsorBlocker256px.png");
if(response.statusCode == 400) {
alert("Server said this request was invalid");
} else if(response.statusCode == 429) {
alert("You have submitted too many sponsor times for this one video, are you sure there are this many?");
} else if(response.statusCode == 409) {
alert("This has already been submitted before");
} else if(response.statusCode == 502) {
alert("It seems the server is down. Contact the dev to inform them. Error code " + response.statusCode);
} else {
alert("There was an error submitting your sponsor times, please try again later. Error code " + response.statusCode);
}
} }
} }
}); });

View File

@@ -10,11 +10,13 @@
], ],
"js": [ "js": [
"config.js", "config.js",
"content.js" "content.js",
"popup.js"
], ],
"css": [ "css": [
"content.css", "content.css",
"./libs/Source+Sans+Pro.css" "./libs/Source+Sans+Pro.css",
"popup.css"
] ]
} }
], ],
@@ -27,7 +29,9 @@
"icons/PlayerUploadFailedIconSponsorBlocker256px.png", "icons/PlayerUploadFailedIconSponsorBlocker256px.png",
"icons/upvote.png", "icons/upvote.png",
"icons/downvote.png", "icons/downvote.png",
"icons/PlayerInfoIconSponsorBlocker256px.png" "icons/PlayerInfoIconSponsorBlocker256px.png",
"icons/PlayerDeleteIconSponsorBlocker256px.png",
"popup.html"
], ],
"permissions": [ "permissions": [
"tabs", "tabs",

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -1,7 +1,7 @@
{ {
"name": "SponsorBlock for YouTube - Skip Sponsorships", "name": "SponsorBlock for YouTube - Skip Sponsorships",
"short_name": "SponsorBlock", "short_name": "SponsorBlock",
"version": "1.0.15", "version": "1.0.21",
"description": "Skip over sponsorship on YouTube videos. Report sponsors on videos you watch to save the time of others.", "description": "Skip over sponsorship on YouTube videos. Report sponsors on videos you watch to save the time of others.",
"content_scripts": [ "content_scripts": [
{ {
@@ -10,11 +10,13 @@
], ],
"js": [ "js": [
"config.js", "config.js",
"content.js" "content.js",
"popup.js"
], ],
"css": [ "css": [
"content.css", "content.css",
"./libs/Source+Sans+Pro.css" "./libs/Source+Sans+Pro.css",
"popup.css"
] ]
} }
], ],
@@ -28,6 +30,7 @@
"icons/upvote.png", "icons/upvote.png",
"icons/downvote.png", "icons/downvote.png",
"icons/PlayerInfoIconSponsorBlocker256px.png", "icons/PlayerInfoIconSponsorBlocker256px.png",
"icons/PlayerDeleteIconSponsorBlocker256px.png",
"popup.html" "popup.html"
], ],
"permissions": [ "permissions": [

103
popup.css
View File

@@ -1,41 +1,92 @@
* { /* reset some properties to default (youtube messes with them */
font-family: 'Source Sans Pro', sans-serif; p.popupElement {
margin-block-start: 1em;
margin-block-end: 1em;
margin-inline-start: 0px;
margin-inline-end: 0px;
} }
h1 { h1.popupElement {
margin-block-start: 0.67em;
margin-block-end: 0.67em;
margin-inline-start: 0px;
margin-inline-end: 0px;
font-weight: bold;
}
h2.popupElement {
margin-block-start: 0.83em;
margin-block-end: 0.83em;
margin-inline-start: 0px;
margin-inline-end: 0px;
font-weight: bold;
}
h3.popupElement {
margin-block-start: 1em;
margin-block-end: 1em;
margin-inline-start: 0px;
margin-inline-end: 0px;
font-weight: bold;
}
sub.popupElement {
font-size: smaller;
}
/* end reset */
.popupElement {
font-family: 'Source Sans Pro', sans-serif;
color: black;
}
h1.popupElement {
margin-top: 0px; margin-top: 0px;
} }
body { .popupBody {
font-size: 14px; font-size: 14px;
min-width: 300px;
background-color: #ffd9d9; background-color: #ffd9d9;
padding: 5px;
} }
.recordingSubtitle { .recordingSubtitle.popupElement {
margin-bottom: 10px; margin-bottom: 10px;
} }
.voteButton { .voteButton.popupElement {
height: 32px; height: 32px;
margin-right: 15px; margin-right: 15px;
cursor: pointer; cursor: pointer;
} }
.voteButton:hover { .voteButton:hover.popupElement {
filter: brightness(80%); filter: brightness(80%);
} }
#discordButtonContainer { #discordButtonContainer.popupElement {
font-size: 12px; font-size: 12px;
} }
.smallLink { .sponsorTime.popupElement {
font-size: 20px;
}
.smallLink.popupElement {
font-size: 10px; font-size: 10px;
text-decoration: underline; text-decoration: underline;
cursor: pointer; cursor: pointer;
} }
.greenButton { .mediumLink.popupElement {
font-size: 15px;
padding-left: 15px;
padding-right: 15px;
text-decoration: underline;
cursor: pointer;
}
.greenButton.popupElement {
background-color:#ec1c1c; background-color:#ec1c1c;
-moz-border-radius:28px; -moz-border-radius:28px;
-webkit-border-radius:28px; -webkit-border-radius:28px;
@@ -49,19 +100,19 @@ body {
text-decoration:none; text-decoration:none;
text-shadow:0px 0px 0px #662727; text-shadow:0px 0px 0px #662727;
} }
.greenButton:hover { .greenButton:hover.popupElement {
background-color:#bf2a2a; background-color:#bf2a2a;
} }
.greenButton:focus { .greenButton:focus.popupElement {
outline: none; outline: none;
background-color:#bf2a2a; background-color:#bf2a2a;
} }
.greenButton:active { .greenButton:active.popupElement {
position:relative; position:relative;
top:1px; top:1px;
} }
.dangerButton { .dangerButton.popupElement {
-moz-box-shadow:inset 0px 1px 0px 0px #cf866c; -moz-box-shadow:inset 0px 1px 0px 0px #cf866c;
-webkit-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; box-shadow:inset 0px 1px 0px 0px #cf866c;
@@ -78,19 +129,19 @@ body {
text-decoration:none; text-decoration:none;
text-shadow:0px 1px 0px #854629; text-shadow:0px 1px 0px #854629;
} }
.dangerButton:hover { .dangerButton:hover.popupElement {
background-color:#bc3315; background-color:#bc3315;
} }
.dangerButton:focus { .dangerButton:focus.popupElement {
outline: none; outline: none;
background-color:#bc3315; background-color:#bc3315;
} }
.dangerButton:active { .dangerButton:active.popupElement {
position:relative; position:relative;
top:1px; top:1px;
} }
.warningButton { .warningButton.popupElement {
-moz-box-shadow:inset 0px 1px 0px 0px #cfbd6c; -moz-box-shadow:inset 0px 1px 0px 0px #cfbd6c;
-webkit-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; box-shadow:inset 0px 1px 0px 0px #cfbd6c;
@@ -107,19 +158,19 @@ body {
text-decoration:none; text-decoration:none;
text-shadow:0px 1px 0px #856829; text-shadow:0px 1px 0px #856829;
} }
.warningButton:hover { .warningButton:hover.popupElement {
background-color:#bc8215; background-color:#bc8215;
} }
.warningButton:focus { .warningButton:focus.popupElement {
outline: none; outline: none;
background-color:#bc8215; background-color:#bc8215;
} }
.warningButton:active { .warningButton:active.popupElement {
position:relative; position:relative;
top:1px; top:1px;
} }
.smallButton { .smallButton.popupElement {
background-color:#f9902d; background-color:#f9902d;
-moz-border-radius:3px; -moz-border-radius:3px;
-webkit-border-radius:3px; -webkit-border-radius:3px;
@@ -132,14 +183,14 @@ body {
padding:6px 10px; padding:6px 10px;
text-decoration:none; text-decoration:none;
} }
.smallButton:hover { .smallButton:hover.popupElement {
background-color:#fa9806; background-color:#fa9806;
} }
.smallButton:focus { .smallButton:focus.popupElement {
outline: none; outline: none;
background-color:#fa9806; background-color:#fa9806;
} }
.smallButton:active { .smallButton:active.popupElement {
position:relative; position:relative;
top:1px; top:1px;
} }

View File

@@ -1,97 +1,98 @@
<html> <html>
<head> <head>
<title>Set Page Color Popup</title> <title>Set Page Color Popup</title>
<link rel="stylesheet" type="text/css" href="/libs/Source+Sans+Pro.css"/> <link id="sponorBlockPopupFont" rel="stylesheet" type="text/css" href="/libs/Source+Sans+Pro.css"/>
<link rel="stylesheet" type="text/css" href="popup.css"/> <link id="sponorBlockStyleSheet" rel="stylesheet" type="text/css" href="popup.css"/>
</head> </head>
<body class="popupBody">
<center> <center>
<div id="app"> <div id="app" class="popupBody">
<img src="icons/LogoSponsorBlocker256px.png" height="64px"/> <img src="icons/LogoSponsorBlocker256px.png" height="64px" id="sponsorBlockPopupLogo"/>
<h1>SponsorBlock</h1> <h1 class="popupElement">SponsorBlock</h1>
<!-- Loading text --> <!-- Loading text -->
<p id="loadingIndicator">Loading...</p> <p id="loadingIndicator" class="popupElement">Loading...</p>
<!-- Hidden until loading complete --> <!-- Hidden until loading complete -->
<div id="mainControls" class="main" style="display: none"> <div id="mainControls" class="main popupElement" style="display: none">
<!-- If the video was found in the database --> <!-- If the video was found in the database -->
<div id="videoFound"> <div id="videoFound">
</div> </div>
<div id="downloadedSponsorMessageTimes"> <div id="downloadedSponsorMessageTimes" class="popupElement">
</div> </div>
<br/> <br/>
<button id="reportAnIssue" class="dangerButton">Vote On A Sponsor Time</button> <button id="reportAnIssue" class="dangerButton popupElement">Vote On A Sponsor Time</button>
<div id="issueReporterContainer" style="display: none"> <div id="issueReporterContainer" class="popupElement" style="display: none">
<h3 style="margin-top: 0px">Vote On A Sponsor Time</h3> <h3 style="margin-top: 0px" class="popupElement">Vote On A Sponsor Time</h3>
<div id="issueReporterTimeButtons"> <div id="issueReporterTimeButtons" class="popupElement">
</div> </div>
</div> </div>
<h2 class="recordingSubtitle">Record the times of a sponsorship</h2> <h2 class="recordingSubtitle popupElement">Record the times of a sponsorship</h2>
<p> <p class="popupElement">
<span id=sponsorTimesContributionsContainer style="display: none"> <span id=sponsorTimesContributionsContainer class="popupElement" style="display: none">
So far, you've submitted So far, you've submitted
<span id="sponsorTimesContributionsDisplay"> <span id="sponsorTimesContributionsDisplay" class="popupElement">
0 0
</span> </span>
<span id="sponsorTimesContributionsDisplayEndWord"> <span id="sponsorTimesContributionsDisplayEndWord" class="popupElement">
sponsors. sponsors.
</span> </span>
</span> </span>
<span id=sponsorTimesViewsContainer style="display: none"> <span id=sponsorTimesViewsContainer class="popupElement" style="display: none">
You have saved people from You have saved people from
<span id="sponsorTimesViewsDisplay"> <span id="sponsorTimesViewsDisplay" class="popupElement">
0 0
</span> </span>
<span id="sponsorTimesViewsDisplayEndWord"> <span id="sponsorTimesViewsDisplayEndWord" class="popupElement">
sponsor segments. sponsor segments.
</span> </span>
</span> </span>
</p> </p>
<p> <p class="popupElement">
Click the button below when the sponsorship starts and ends to record and Click the button below when the sponsorship starts and ends to record and
submit it to the database. submit it to the database.
</p> </p>
<div> <div>
<button id="sponsorStart" class="greenButton">Sponsorship Starts Now</button> <button id="sponsorStart" class="greenButton popupElement">Sponsorship Starts Now</button>
</div> </div>
<sub>Hint: Press the semicolon key while focused on a video report the start/end of a sponsor and quote to submit.</sub> <sub class="popupElement">Hint: Press the semicolon key while focused on a video report the start/end of a sponsor and quote to submit.</sub>
<div id="submissionSection" style="display: none"> <div id="submissionSection" class="popupElement" style="display: none">
<h3>Latest Sponsor Message Times Chosen</h3> <h3 class="popupElement">Latest Sponsor Message Times Chosen</h3>
<b> <b>
<div id="sponsorMessageTimes"> <div id="sponsorMessageTimes" class="popupElement">
</div> </div>
</b> </b>
<button id="clearTimes" class="smallButton">Clear Times</button> <button id="clearTimes" class="smallButton popupElement">Clear Times</button>
<br/> <br/>
<br/> <br/>
<div id="submitTimesContainer" style="display: none"> <div id="submitTimesContainer" class="popupElement" style="display: none">
<button id="submitTimes" class="smallButton">Submit Times</button> <button id="submitTimes" class="smallButton popupElement">Submit Times</button>
<div id="submitTimesInfoMessageContainer" style="display: none"> <div id="submitTimesInfoMessageContainer" class="popupElement" style="display: none">
<h3 id="submitTimesInfoMessage"> <h3 id="submitTimesInfoMessage" class="popupElement">
</h3> </h3>
</div> </div>
@@ -100,10 +101,10 @@
</div> </div>
<div id="discordButtonContainer" style="display: none"> <div id="discordButtonContainer" class="popupElement" style="display: none">
<br/> <br/>
<a href="https://discord.gg/QnmVMpU" target="_blank"><img src="https://www.logolynx.com/images/logolynx/1b/1bcc0f0aefe71b2c8ce66ffe8645d365.png" height="32px"/></a> <a href="https://discord.gg/QnmVMpU" class="popupElement" target="_blank"><img src="https://www.logolynx.com/images/logolynx/1b/1bcc0f0aefe71b2c8ce66ffe8645d365.png" height="32px"/></a>
<br/> <br/>
@@ -111,26 +112,26 @@
<br/> <br/>
<span id="hideDiscordButton" class="smallLink">Hide this</span> <span id="hideDiscordButton" class="smallLink popupElement">Hide this</span>
</div> </div>
<div id="optionsButtonContainer"> <div id="optionsButtonContainer" class="popupElement">
<br/> <br/>
<br/> <br/>
<button id="optionsButton" class="dangerButton">Options</button> <button id="optionsButton" class="dangerButton popupElement">Options</button>
</div> </div>
<div id="options" style="display: none"> <div id="options" class="popupElement" style="display: none">
<br/> <br/>
<h3>Options</h3> <h3>Options</h3>
<button id="hideVideoPlayerControls" class="warningButton">Hide Button On YouTube Player</button> <button id="hideVideoPlayerControls" class="warningButton popupElement">Hide Buttons On YouTube Player</button>
<button id="showVideoPlayerControls" style="display: none" class="warningButton">Show Button On YouTube Player</button> <button id="showVideoPlayerControls" style="display: none" class="warningButton popupElement">Show Buttons On YouTube Player</button>
<br/> <br/>
<sub> <sub class="popupElement">
This hides the button that appears on the YouTube player to submit sponsors. I can see this being annoying for some This hides the buttons that appear on the YouTube player to submit sponsors. I can see this being annoying for some
people. Instead of using the button there, this popup can be used to submit sponsors. To hide the notice that appears, people. Instead of using the button there, this popup can be used to submit sponsors. To hide the notice that appears,
use the button that appears on the notice saying "Don't show this again". You can always enable these settings again use the button that appears on the notice saying "Don't show this again". You can always enable these settings again
later. later.
@@ -139,10 +140,30 @@
<br/> <br/>
<br/> <br/>
<button id="disableSponsorViewTracking" class="warningButton">Disable Sponsor View Tracking</button> <button id="hideInfoButtonPlayerControls" class="warningButton popupElement">Hide Info Button On YouTube Player</button>
<button id="enableSponsorViewTracking" style="display: none" class="warningButton">Enable Sponsor View Tracking</button> <button id="showInfoButtonPlayerControls" style="display: none" class="warningButton popupElement">Show Info Button On YouTube Player</button>
<br/> <br/>
<sub> <sub class="popupElement">
This is the button that opens up a popup in the YouTube page.
</sub>
<br/>
<br/>
<button id="hideDeleteButtonPlayerControls" class="warningButton popupElement">Hide Delete Button On YouTube Player</button>
<button id="showDeleteButtonPlayerControls" style="display: none" class="warningButton popupElement">Show Delete Button On YouTube Player</button>
<br/>
<sub class="popupElement">
This is the button that allows you to clear all sponsors on the YouTube player.
</sub>
<br/>
<br/>
<button id="disableSponsorViewTracking" class="warningButton popupElement">Disable Sponsor View Tracking</button>
<button id="enableSponsorViewTracking" style="display: none" class="warningButton popupElement">Enable Sponsor View Tracking</button>
<br/>
<sub class="popupElement">
This feature tracks which sponsors you have skipped to let users know how much their submission has helped others and This feature tracks which sponsors you have skipped to let users know how much their submission has helped others and
used as a metric along with upvotes to ensure that spam doesn't get into the database. The extension sends a message used as a metric along with upvotes to ensure that spam doesn't get into the database. The extension sends a message
to the server each time you skip a sponsor. Hopefully most people don't change this setting so that the view numbers to the server each time you skip a sponsor. Hopefully most people don't change this setting so that the view numbers
@@ -152,11 +173,12 @@
<br/> <br/>
<br/> <br/>
<button id="showNoticeAgain" style="display: none" class="dangerButton">Show Notice Again</button> <button id="showNoticeAgain" style="display: none" class="dangerButton popupElement">Show Notice Again</button>
</div> </div>
</div> </div>
</div> </div>
</center> </center>
</body>
<!-- Scripts that need to load after the html --> <!-- Scripts that need to load after the html -->
<script src="config.js"></script> <script src="config.js"></script>

195
popup.js
View File

@@ -1,6 +1,29 @@
//make this a function to allow this to run on the content page
function runThePopup() {
//is it in the popup or content script
var inPopup = true;
if (chrome.tabs == undefined) {
//this is on the content script, use direct communication
chrome.tabs = {};
chrome.tabs.sendMessage = function(id, request, callback) {
messageListener(request, null, callback);
}
//add a dummy query method
chrome.tabs.query = function(config, callback) {
callback([{
url: document.URL,
id: -1
}]);
}
inPopup = false;
}
// References // References
var SB = {}; let SB = {};
SB.sponsorStart = document.getElementById("sponsorStart"); SB.sponsorStart = document.getElementById("sponsorStart");
SB.clearTimes = document.getElementById("clearTimes"); SB.clearTimes = document.getElementById("clearTimes");
@@ -8,6 +31,10 @@ SB.submitTimes = document.getElementById("submitTimes");
SB.showNoticeAgain = document.getElementById("showNoticeAgain"); SB.showNoticeAgain = document.getElementById("showNoticeAgain");
SB.hideVideoPlayerControls = document.getElementById("hideVideoPlayerControls"); SB.hideVideoPlayerControls = document.getElementById("hideVideoPlayerControls");
SB.showVideoPlayerControls = document.getElementById("showVideoPlayerControls"); SB.showVideoPlayerControls = document.getElementById("showVideoPlayerControls");
SB.hideInfoButtonPlayerControls = document.getElementById("hideInfoButtonPlayerControls");
SB.showInfoButtonPlayerControls = document.getElementById("showInfoButtonPlayerControls");
SB.hideDeleteButtonPlayerControls = document.getElementById("hideDeleteButtonPlayerControls");
SB.showDeleteButtonPlayerControls = document.getElementById("showDeleteButtonPlayerControls");
SB.disableSponsorViewTracking = document.getElementById("disableSponsorViewTracking"); SB.disableSponsorViewTracking = document.getElementById("disableSponsorViewTracking");
SB.enableSponsorViewTracking = document.getElementById("enableSponsorViewTracking"); SB.enableSponsorViewTracking = document.getElementById("enableSponsorViewTracking");
SB.optionsButton = document.getElementById("optionsButton"); SB.optionsButton = document.getElementById("optionsButton");
@@ -31,6 +58,10 @@ SB.submitTimes.addEventListener("click", submitTimes);
SB.showNoticeAgain.addEventListener("click", showNoticeAgain); SB.showNoticeAgain.addEventListener("click", showNoticeAgain);
SB.hideVideoPlayerControls.addEventListener("click", hideVideoPlayerControls); SB.hideVideoPlayerControls.addEventListener("click", hideVideoPlayerControls);
SB.showVideoPlayerControls.addEventListener("click", showVideoPlayerControls); SB.showVideoPlayerControls.addEventListener("click", showVideoPlayerControls);
SB.hideInfoButtonPlayerControls.addEventListener("click", hideInfoButtonPlayerControls);
SB.showInfoButtonPlayerControls.addEventListener("click", showInfoButtonPlayerControls);
SB.hideDeleteButtonPlayerControls.addEventListener("click", hideDeleteButtonPlayerControls);
SB.showDeleteButtonPlayerControls.addEventListener("click", showDeleteButtonPlayerControls);
SB.disableSponsorViewTracking.addEventListener("click", disableSponsorViewTracking); SB.disableSponsorViewTracking.addEventListener("click", disableSponsorViewTracking);
SB.enableSponsorViewTracking.addEventListener("click", enableSponsorViewTracking); SB.enableSponsorViewTracking.addEventListener("click", enableSponsorViewTracking);
SB.optionsButton.addEventListener("click", openOptions); SB.optionsButton.addEventListener("click", openOptions);
@@ -39,16 +70,16 @@ SB.hideDiscordButton.addEventListener("click", hideDiscordButton);
//if true, the button now selects the end time //if true, the button now selects the end time
var startTimeChosen = false; let startTimeChosen = false;
//the start and end time pairs (2d) //the start and end time pairs (2d)
var sponsorTimes = []; let sponsorTimes = [];
//current video ID of this tab //current video ID of this tab
var currentVideoID = null; let currentVideoID = null;
//is this a YouTube tab? //is this a YouTube tab?
var isYouTubeTab = false; let isYouTubeTab = false;
//see if discord link can be shown //see if discord link can be shown
chrome.storage.sync.get(["hideDiscordLink"], function(result) { chrome.storage.sync.get(["hideDiscordLink"], function(result) {
@@ -70,7 +101,7 @@ chrome.storage.sync.get(["hideDiscordLink"], function(result) {
} }
}); });
//if the don't show notice again variable is true, an option to //if the don't show notice again letiable is true, an option to
// disable should be available // disable should be available
chrome.storage.sync.get(["dontShowNoticeAgain"], function(result) { chrome.storage.sync.get(["dontShowNoticeAgain"], function(result) {
let dontShowNoticeAgain = result.dontShowNoticeAgain; let dontShowNoticeAgain = result.dontShowNoticeAgain;
@@ -79,7 +110,7 @@ chrome.storage.sync.get(["dontShowNoticeAgain"], function(result) {
} }
}); });
//show proper video player controls option //show proper video player controls options
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) {
@@ -87,6 +118,20 @@ chrome.storage.sync.get(["hideVideoPlayerControls"], function(result) {
SB.showVideoPlayerControls.style.display = "unset"; SB.showVideoPlayerControls.style.display = "unset";
} }
}); });
chrome.storage.sync.get(["hideInfoButtonPlayerControls"], function(result) {
let hideInfoButtonPlayerControls = result.hideInfoButtonPlayerControls;
if (hideInfoButtonPlayerControls != undefined && hideInfoButtonPlayerControls) {
SB.hideInfoButtonPlayerControls.style.display = "none";
SB.showInfoButtonPlayerControls.style.display = "unset";
}
});
chrome.storage.sync.get(["hideDeleteButtonPlayerControls"], function(result) {
let hideDeleteButtonPlayerControls = result.hideDeleteButtonPlayerControls;
if (hideDeleteButtonPlayerControls != undefined && hideDeleteButtonPlayerControls) {
SB.hideDeleteButtonPlayerControls.style.display = "none";
SB.showDeleteButtonPlayerControls.style.display = "unset";
}
});
//show proper tracking option //show proper tracking option
chrome.storage.sync.get(["trackViewCount"], function(result) { chrome.storage.sync.get(["trackViewCount"], function(result) {
@@ -139,6 +184,7 @@ chrome.tabs.query({
currentWindow: true currentWindow: true
}, loadTabData); }, loadTabData);
function loadTabData(tabs) { function loadTabData(tabs) {
//set current videoID //set current videoID
currentVideoID = getYouTubeVideoID(tabs[0].url); currentVideoID = getYouTubeVideoID(tabs[0].url);
@@ -188,7 +234,7 @@ function infoFound(request) {
//if request is undefined, then the page currently being browsed is not YouTube //if request is undefined, then the page currently being browsed is not YouTube
if (request != undefined) { if (request != undefined) {
//this must be a YouTube video //this must be a YouTube video
//set variable //set letiable
isYouTubeTab = true; isYouTubeTab = true;
//remove loading text //remove loading text
@@ -273,7 +319,7 @@ function displayDownloadedSponsorTimes(request) {
let container = document.getElementById("issueReporterTimeButtons"); let container = document.getElementById("issueReporterTimeButtons");
for (let i = 0; i < request.sponsorTimes.length; i++) { for (let i = 0; i < request.sponsorTimes.length; i++) {
let sponsorTimeButton = document.createElement("button"); let sponsorTimeButton = document.createElement("button");
sponsorTimeButton.className = "warningButton"; sponsorTimeButton.className = "warningButton popupElement";
sponsorTimeButton.innerText = getFormattedTime(request.sponsorTimes[i][0]) + " to " + getFormattedTime(request.sponsorTimes[i][1]); sponsorTimeButton.innerText = getFormattedTime(request.sponsorTimes[i][0]) + " to " + getFormattedTime(request.sponsorTimes[i][1]);
let votingButtons = document.createElement("div"); let votingButtons = document.createElement("div");
@@ -288,13 +334,13 @@ function displayDownloadedSponsorTimes(request) {
let upvoteButton = document.createElement("img"); let upvoteButton = document.createElement("img");
upvoteButton.id = "sponsorTimesUpvoteButtonsContainer" + UUID; upvoteButton.id = "sponsorTimesUpvoteButtonsContainer" + UUID;
upvoteButton.className = "voteButton"; upvoteButton.className = "voteButton popupElement";
upvoteButton.src = chrome.extension.getURL("icons/upvote.png"); upvoteButton.src = chrome.extension.getURL("icons/upvote.png");
upvoteButton.addEventListener("click", () => vote(1, UUID)); upvoteButton.addEventListener("click", () => vote(1, UUID));
let downvoteButton = document.createElement("img"); let downvoteButton = document.createElement("img");
downvoteButton.id = "sponsorTimesDownvoteButtonsContainer" + UUID; downvoteButton.id = "sponsorTimesDownvoteButtonsContainer" + UUID;
downvoteButton.className = "voteButton"; downvoteButton.className = "voteButton popupElement";
downvoteButton.src = chrome.extension.getURL("icons/downvote.png"); downvoteButton.src = chrome.extension.getURL("icons/downvote.png");
downvoteButton.addEventListener("click", () => vote(0, UUID)); downvoteButton.addEventListener("click", () => vote(0, UUID));
@@ -353,12 +399,13 @@ function getSponsorTimesMessageDiv(sponsorTimes) {
for (let i = 0; i < sponsorTimes.length; i++) { for (let i = 0; i < sponsorTimes.length; i++) {
let currentSponsorTimeContainer = document.createElement("div"); let currentSponsorTimeContainer = document.createElement("div");
currentSponsorTimeContainer.id = "sponsorTimeContainer" + i; currentSponsorTimeContainer.id = "sponsorTimeContainer" + i;
currentSponsorTimeContainer.className = "sponsorTime popupElement";
let currentSponsorTimeMessage = ""; let currentSponsorTimeMessage = "";
let deleteButton = document.createElement("span"); let deleteButton = document.createElement("span");
deleteButton.id = "sponsorTimeDeleteButton" + i; deleteButton.id = "sponsorTimeDeleteButton" + i;
deleteButton.innerText = "Delete"; deleteButton.innerText = "Delete";
deleteButton.className = "smallLink"; deleteButton.className = "mediumLink popupElement";
let index = i; let index = i;
deleteButton.addEventListener("click", () => deleteSponsorTime(index)); deleteButton.addEventListener("click", () => deleteSponsorTime(index));
@@ -368,7 +415,7 @@ function getSponsorTimesMessageDiv(sponsorTimes) {
let editButton = document.createElement("span"); let editButton = document.createElement("span");
editButton.id = "sponsorTimeEditButton" + i; editButton.id = "sponsorTimeEditButton" + i;
editButton.innerText = "Edit"; editButton.innerText = "Edit";
editButton.className = "smallLink"; editButton.className = "mediumLink popupElement";
editButton.addEventListener("click", () => editSponsorTime(index)); editButton.addEventListener("click", () => editSponsorTime(index));
for (let s = 0; s < sponsorTimes[i].length; s++) { for (let s = 0; s < sponsorTimes[i].length; s++) {
@@ -385,12 +432,13 @@ function getSponsorTimesMessageDiv(sponsorTimes) {
} }
currentSponsorTimeContainer.innerText = currentSponsorTimeMessage; currentSponsorTimeContainer.innerText = currentSponsorTimeMessage;
currentSponsorTimeContainer.addEventListener("click", () => editSponsorTime(index));
sponsorTimesContainer.appendChild(currentSponsorTimeContainer); sponsorTimesContainer.appendChild(currentSponsorTimeContainer);
sponsorTimesContainer.appendChild(deleteButton); sponsorTimesContainer.appendChild(deleteButton);
//only if it is a complete sponsor time //only if it is a complete sponsor time
if (sponsorTimes[i].length > 1) { if (sponsorTimes[i].length > 1) {
sponsorTimesContainer.appendChild(spacer);
sponsorTimesContainer.appendChild(editButton); sponsorTimesContainer.appendChild(editButton);
} }
} }
@@ -399,32 +447,41 @@ function getSponsorTimesMessageDiv(sponsorTimes) {
} }
function editSponsorTime(index) { function editSponsorTime(index) {
if (document.getElementById("startTimeMinutes" + index) != null) {
//already open
return;
}
let sponsorTimeContainer = document.getElementById("sponsorTimeContainer" + index); let sponsorTimeContainer = document.getElementById("sponsorTimeContainer" + index);
//get sponsor time minutes and seconds boxes //get sponsor time minutes and seconds boxes
let startTimeMinutes = document.createElement("input"); let startTimeMinutes = document.createElement("input");
startTimeMinutes.id = "startTimeMinutes" + index; startTimeMinutes.id = "startTimeMinutes" + index;
startTimeMinutes.className = "sponsorTime popupElement";
startTimeMinutes.type = "text"; startTimeMinutes.type = "text";
startTimeMinutes.value = getTimeInMinutes(sponsorTimes[index][0]); startTimeMinutes.value = getTimeInMinutes(sponsorTimes[index][0]);
startTimeMinutes.style.width = "35"; startTimeMinutes.style.width = "45px";
let startTimeSeconds = document.createElement("input"); let startTimeSeconds = document.createElement("input");
startTimeSeconds.id = "startTimeSeconds" + index; startTimeSeconds.id = "startTimeSeconds" + index;
startTimeSeconds.className = "sponsorTime popupElement";
startTimeSeconds.type = "text"; startTimeSeconds.type = "text";
startTimeSeconds.value = getTimeInFormattedSeconds(sponsorTimes[index][0]); startTimeSeconds.value = getTimeInFormattedSeconds(sponsorTimes[index][0]);
startTimeSeconds.style.width = "42"; startTimeSeconds.style.width = "60px";
let endTimeMinutes = document.createElement("input"); let endTimeMinutes = document.createElement("input");
endTimeMinutes.id = "endTimeMinutes" + index; endTimeMinutes.id = "endTimeMinutes" + index;
endTimeMinutes.className = "sponsorTime popupElement";
endTimeMinutes.type = "text"; endTimeMinutes.type = "text";
endTimeMinutes.value = getTimeInMinutes(sponsorTimes[index][1]); endTimeMinutes.value = getTimeInMinutes(sponsorTimes[index][1]);
endTimeMinutes.style.width = "35"; endTimeMinutes.style.width = "45px";
let endTimeSeconds = document.createElement("input"); let endTimeSeconds = document.createElement("input");
endTimeSeconds.id = "endTimeSeconds" + index; endTimeSeconds.id = "endTimeSeconds" + index;
endTimeSeconds.className = "sponsorTime popupElement";
endTimeSeconds.type = "text"; endTimeSeconds.type = "text";
endTimeSeconds.value = getTimeInFormattedSeconds(sponsorTimes[index][1]); endTimeSeconds.value = getTimeInFormattedSeconds(sponsorTimes[index][1]);
endTimeSeconds.style.width = "42"; endTimeSeconds.style.width = "60px";
let colonText = document.createElement("span"); let colonText = document.createElement("span");
colonText.innerText = ":"; colonText.innerText = ":";
@@ -449,13 +506,13 @@ function editSponsorTime(index) {
let saveButton = document.createElement("span"); let saveButton = document.createElement("span");
saveButton.id = "sponsorTimeSaveButton" + index; saveButton.id = "sponsorTimeSaveButton" + index;
saveButton.innerText = "Save"; saveButton.innerText = "Save";
saveButton.className = "smallLink"; saveButton.className = "mediumLink popupElement";
saveButton.addEventListener("click", () => saveSponsorTimeEdit(index)); saveButton.addEventListener("click", () => saveSponsorTimeEdit(index));
let editButton = document.getElementById("sponsorTimeEditButton" + index); let editButton = document.getElementById("sponsorTimeEditButton" + index);
let sponsorTimesContainer = document.getElementById("sponsorTimesContainer"); let sponsorTimesContainer = document.getElementById("sponsorTimesContainer");
sponsorTimesContainer.removeChild(editButton); editButton.remove();
sponsorTimesContainer.appendChild(saveButton); sponsorTimesContainer.appendChild(saveButton);
} }
@@ -576,6 +633,9 @@ function submitTimes() {
} else if(response.statusCode == 409) { } else if(response.statusCode == 409) {
document.getElementById("submitTimesInfoMessage").innerText = "This has already been submitted before"; document.getElementById("submitTimesInfoMessage").innerText = "This has already been submitted before";
document.getElementById("submitTimesInfoMessageContainer").style.display = "unset"; document.getElementById("submitTimesInfoMessageContainer").style.display = "unset";
} else if(response.statusCode == 502) {
document.getElementById("submitTimesInfoMessage").innerText = "It seems the server is down. Contact the dev to inform them. Error code " + response.statusCode;
document.getElementById("submitTimesInfoMessageContainer").style.display = "unset";
} else { } else {
document.getElementById("submitTimesInfoMessage").innerText = "There was an error submitting your sponsor times, please try again later. Error code " + response.statusCode; document.getElementById("submitTimesInfoMessage").innerText = "There was an error submitting your sponsor times, please try again later. Error code " + response.statusCode;
document.getElementById("submitTimesInfoMessageContainer").style.display = "unset"; document.getElementById("submitTimesInfoMessageContainer").style.display = "unset";
@@ -634,6 +694,74 @@ function showVideoPlayerControls() {
SB.showVideoPlayerControls.style.display = "none"; SB.showVideoPlayerControls.style.display = "none";
} }
function hideInfoButtonPlayerControls() {
chrome.storage.sync.set({"hideInfoButtonPlayerControls": true});
chrome.tabs.query({
active: true,
currentWindow: true
}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {
message: "changeInfoButtonPlayerControlsVisibility",
value: true
});
});
SB.hideInfoButtonPlayerControls.style.display = "none";
SB.showInfoButtonPlayerControls.style.display = "unset";
}
function showInfoButtonPlayerControls() {
chrome.storage.sync.set({"hideInfoButtonPlayerControls": false});
chrome.tabs.query({
active: true,
currentWindow: true
}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {
message: "changeVideoPlayerCochangeInfoButtonPlayerControlsVisibilityntrolsVisibility",
value: false
});
});
SB.hideInfoButtonPlayerControls.style.display = "unset";
SB.showInfoButtonPlayerControls.style.display = "none";
}
function hideDeleteButtonPlayerControls() {
chrome.storage.sync.set({"hideDeleteButtonPlayerControls": true});
chrome.tabs.query({
active: true,
currentWindow: true
}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {
message: "changeDeleteButtonPlayerControlsVisibility",
value: true
});
});
SB.hideDeleteButtonPlayerControls.style.display = "none";
SB.showDeleteButtonPlayerControls.style.display = "unset";
}
function showDeleteButtonPlayerControls() {
chrome.storage.sync.set({"hideDeleteButtonPlayerControls": false});
chrome.tabs.query({
active: true,
currentWindow: true
}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {
message: "changeVideoPlayerCochangeDeleteButtonPlayerControlsVisibilityntrolsVisibility",
value: false
});
});
SB.hideDeleteButtonPlayerControls.style.display = "unset";
SB.showDeleteButtonPlayerControls.style.display = "none";
}
function disableSponsorViewTracking() { function disableSponsorViewTracking() {
chrome.storage.sync.set({"trackViewCount": false}); chrome.storage.sync.set({"trackViewCount": false});
@@ -669,7 +797,7 @@ function enableSponsorViewTracking() {
} }
function updateStartTimeChosen() { function updateStartTimeChosen() {
//update startTimeChosen variable //update startTimeChosen letiable
if (!startTimeChosen) { if (!startTimeChosen) {
startTimeChosen = true; startTimeChosen = true;
SB.sponsorStart.innerHTML = "Sponsorship Ends Now"; SB.sponsorStart.innerHTML = "Sponsorship Ends Now";
@@ -747,8 +875,12 @@ function vote(type, UUID) {
//failure: duplicate vote //failure: duplicate vote
addVoteMessage("You have already voted this way before.", UUID) addVoteMessage("You have already voted this way before.", UUID)
} else if (response.successType == -1) { } else if (response.successType == -1) {
//failure: duplicate vote if (response.statusCode == 502) {
addVoteMessage("A connection error has occured.", UUID) addVoteMessage("It seems the sever is down. Contact the dev immediately.", UUID)
} else {
//failure: unknown error
addVoteMessage("A connection error has occured. Error code: " + response.statusCode, UUID)
}
} }
} }
}); });
@@ -811,8 +943,21 @@ function sendRequestToServer(type, address, callback) {
xmlhttp.send(); xmlhttp.send();
} }
function getYouTubeVideoID(url) { // Return video id or 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;
} }
//end of function
}
if (chrome.tabs != undefined) {
//add the width restriction (because Firefox)
document.getElementById("sponorBlockStyleSheet").sheet.insertRule('.popupBody { width: 300 }', 0);
//this means it is actually opened in the popup
runThePopup();
}