Reimplements error system

This commit is contained in:
Ajay Ramachandran
2019-07-31 23:17:40 -04:00
parent e1dc5fbdf5
commit 3a0a267e12

465
popup.js
View File

@@ -1,68 +1,106 @@
// References //make this a function to allow this to run on the content page
var SB = {}; function runThePopup() {
SB.sponsorStart = document.getElementById("sponsorStart"); //is it in the popup or content script
SB.clearTimes = document.getElementById("clearTimes"); var inPopup = true;
SB.submitTimes = document.getElementById("submitTimes"); if (chrome.tabs == undefined) {
SB.showNoticeAgain = document.getElementById("showNoticeAgain"); //this is on the content script, use direct communication
SB.hideVideoPlayerControls = document.getElementById("hideVideoPlayerControls"); chrome.tabs = {};
SB.showVideoPlayerControls = document.getElementById("showVideoPlayerControls"); chrome.tabs.sendMessage = function(id, request, callback) {
SB.hideInfoButtonPlayerControls = document.getElementById("hideInfoButtonPlayerControls"); messageListener(request, null, callback);
SB.showInfoButtonPlayerControls = document.getElementById("showInfoButtonPlayerControls"); }
SB.hideDeleteButtonPlayerControls = document.getElementById("hideDeleteButtonPlayerControls");
SB.showDeleteButtonPlayerControls = document.getElementById("showDeleteButtonPlayerControls");
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");
// sponsorTimesViewsDisplay
SB.sponsorTimesViewsContainer = document.getElementById("sponsorTimesViewsDisplayContainer");
SB.sponsorTimesViewsDisplay = document.getElementById("sponsorTimesViewsDisplayDisplay");
SB.sponsorTimesViewsDisplayEndWord = document.getElementById("sponsorTimesViewsDisplayDisplayEndWord");
// discordButtons
SB.discordButtonContainer = document.getElementById("discordButtonContainer");
SB.hideDiscordButton = document.getElementById("hideDiscordButton");
// submitTimesInfoMessage
SB.submitTimesInfoMessageContainer = document.getElementById("submitTimesInfoMessage");
SB.submitTimesInfoMessage = document.getElementById("submitTimesInfoMessage");
//setup click listeners //add a dummy query method
SB.sponsorStart.addEventListener("click", sendSponsorStartMessage); chrome.tabs.query = function(config, callback) {
SB.clearTimes.addEventListener("click", clearTimes); callback([{
SB.submitTimes.addEventListener("click", submitTimes); url: document.URL,
SB.showNoticeAgain.addEventListener("click", showNoticeAgain); id: -1
SB.hideVideoPlayerControls.addEventListener("click", hideVideoPlayerControls); }]);
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.enableSponsorViewTracking.addEventListener("click", enableSponsorViewTracking);
SB.optionsButton.addEventListener("click", openOptions);
SB.reportAnIssue.addEventListener("click", reportAnIssue);
SB.hideDiscordButton.addEventListener("click", hideDiscordButton);
inPopup = false;
}
//if true, the button now selects the end time var SB = {};
var startTimeChosen = false;
//the start and end time pairs (2d) ["sponsorStart",
var sponsorTimes = []; "clearTimes",
"submitTimes",
"showNoticeAgain",
"hideVideoPlayerControls",
"showVideoPlayerControls",
"hideInfoButtonPlayerControls",
"showInfoButtonPlayerControls",
"hideDeleteButtonPlayerControls",
"showDeleteButtonPlayerControls",
"disableSponsorViewTracking",
"enableSponsorViewTracking",
"optionsButton",
"reportAnIssue",
// sponsorTimesContributions
"sponsorTimesContributionsContainer",
"sponsorTimesContributionsDisplay",
"sponsorTimesContributionsDisplayEndWord",
// sponsorTimesViewsDisplay
"sponsorTimesViewsContainer",
"sponsorTimesViewsDisplay",
"sponsorTimesViewsDisplayEndWord",
// discordButtons
"discordButtonContainer",
"hideDiscordButton",
// submitTimesInfoMessage
"submitTimesInfoMessageContainer",
"submitTimesInfoMessage"
// More
"submissionSection",
"mainControls",
"loadingIndicator",
"videoFound",
"sponsorMessageTimes",
"downloadedSponsorMessageTimes",
].forEach(id => SB[id] = document.getElementById(id));
//current video ID of this tab //setup click listeners
var currentVideoID = null; SB.sponsorStart.addEventListener("click", sendSponsorStartMessage);
SB.clearTimes.addEventListener("click", clearTimes);
SB.submitTimes.addEventListener("click", submitTimes);
SB.showNoticeAgain.addEventListener("click", showNoticeAgain);
SB.hideVideoPlayerControls.addEventListener("click", hideVideoPlayerControls);
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.enableSponsorViewTracking.addEventListener("click", enableSponsorViewTracking);
SB.optionsButton.addEventListener("click", openOptions);
SB.reportAnIssue.addEventListener("click", reportAnIssue);
SB.hideDiscordButton.addEventListener("click", hideDiscordButton);
//is this a YouTube tab? //setup error message languages
var isYouTubeTab = false; var EN_US = new Map();
//see if discord link can be shown EN_US.set(400, 'Server said this request was invalid"')
chrome.storage.sync.get(["hideDiscordLink"], function(result) { .set(429, 'You have submitted too many sponsor times for this one video, are you sure there are this many?')
.set(409, 'This has already been submitted before')
.set(502, 'It seems the server is down. Contact the dev to inform them.')
.set('Unknown', 'There was an error submitting your sponsor times, please try again later.');
//if true, the button now selects the end time
let startTimeChosen = false;
//the start and end time pairs (2d)
let sponsorTimes = [];
//current video ID of this tab
let currentVideoID = null;
//is this a YouTube tab?
let isYouTubeTab = false;
//see if discord link can be shown
chrome.storage.sync.get(["hideDiscordLink"], function(result) {
let hideDiscordLink = result.hideDiscordLink; let hideDiscordLink = result.hideDiscordLink;
if (hideDiscordLink == undefined || !hideDiscordLink) { if (hideDiscordLink == undefined || !hideDiscordLink) {
chrome.storage.sync.get(["hideDiscordLaunches"], function(result) { chrome.storage.sync.get(["hideDiscordLaunches"], function(result) {
@@ -79,51 +117,51 @@ 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;
if (dontShowNoticeAgain != undefined && dontShowNoticeAgain) { if (dontShowNoticeAgain != undefined && dontShowNoticeAgain) {
SB.showNoticeAgain.style.display = "unset"; SB.showNoticeAgain.style.display = "unset";
} }
}); });
//show proper video player controls options //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) {
SB.hideVideoPlayerControls.style.display = "none"; SB.hideVideoPlayerControls.style.display = "none";
SB.showVideoPlayerControls.style.display = "unset"; SB.showVideoPlayerControls.style.display = "unset";
} }
}); });
chrome.storage.sync.get(["hideInfoButtonPlayerControls"], function(result) { chrome.storage.sync.get(["hideInfoButtonPlayerControls"], function(result) {
let hideInfoButtonPlayerControls = result.hideInfoButtonPlayerControls; let hideInfoButtonPlayerControls = result.hideInfoButtonPlayerControls;
if (hideInfoButtonPlayerControls != undefined && hideInfoButtonPlayerControls) { if (hideInfoButtonPlayerControls != undefined && hideInfoButtonPlayerControls) {
SB.hideInfoButtonPlayerControls.style.display = "none"; SB.hideInfoButtonPlayerControls.style.display = "none";
SB.showInfoButtonPlayerControls.style.display = "unset"; SB.showInfoButtonPlayerControls.style.display = "unset";
} }
}); });
chrome.storage.sync.get(["hideDeleteButtonPlayerControls"], function(result) { chrome.storage.sync.get(["hideDeleteButtonPlayerControls"], function(result) {
let hideDeleteButtonPlayerControls = result.hideDeleteButtonPlayerControls; let hideDeleteButtonPlayerControls = result.hideDeleteButtonPlayerControls;
if (hideDeleteButtonPlayerControls != undefined && hideDeleteButtonPlayerControls) { if (hideDeleteButtonPlayerControls != undefined && hideDeleteButtonPlayerControls) {
SB.hideDeleteButtonPlayerControls.style.display = "none"; SB.hideDeleteButtonPlayerControls.style.display = "none";
SB.showDeleteButtonPlayerControls.style.display = "unset"; 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) {
let trackViewCount = result.trackViewCount; let trackViewCount = result.trackViewCount;
if (trackViewCount != undefined && !trackViewCount) { if (trackViewCount != undefined && !trackViewCount) {
SB.disableSponsorViewTracking.style.display = "none"; SB.disableSponsorViewTracking.style.display = "none";
SB.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) {
if (result.sponsorTimesContributed > 1) { if (result.sponsorTimesContributed > 1) {
SB.sponsorTimesContributionsDisplayEndWord.innerText = "sponsors." SB.sponsorTimesContributionsDisplayEndWord.innerText = "sponsors."
@@ -156,15 +194,16 @@ chrome.storage.sync.get(["sponsorTimesContributed"], function(result) {
} }
}); });
} }
}); });
chrome.tabs.query({ chrome.tabs.query({
active: true, active: true,
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);
@@ -189,7 +228,7 @@ function loadTabData(tabs) {
displaySponsorTimes(); displaySponsorTimes();
//show submission section //show submission section
document.getElementById("submissionSection").style.display = "unset"; SB.submissionSection.style.display = "unset";
showSubmitTimesIfNecessary(); showSubmitTimesIfNecessary();
} }
@@ -201,9 +240,9 @@ function loadTabData(tabs) {
{message: 'isInfoFound'}, {message: 'isInfoFound'},
infoFound infoFound
); );
} }
function infoFound(request) { function infoFound(request) {
if(chrome.runtime.lastError) { if(chrome.runtime.lastError) {
//This page doesn't have the injected content script, or at least not yet //This page doesn't have the injected content script, or at least not yet
displayNoVideo(); displayNoVideo();
@@ -213,31 +252,31 @@ 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
document.getElementById("mainControls").style.display = "unset" SB.mainControls.style.display = "unset"
document.getElementById("loadingIndicator").innerHTML = ""; SB.loadingIndicator.innerHTML = "";
if (request.found) { if (request.found) {
document.getElementById("videoFound").innerHTML = "This video's sponsors are in the database!" SB.videoFound.innerHTML = "This video's sponsors are in the database!"
displayDownloadedSponsorTimes(request); displayDownloadedSponsorTimes(request);
} else { } else {
document.getElementById("videoFound").innerHTML = "No sponsors found" SB.videoFound.innerHTML = "No sponsors found"
}
} }
} }
}
function setVideoID(request) { function setVideoID(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) {
videoID = request.videoID; videoID = request.videoID;
} }
} }
function sendSponsorStartMessage() { function sendSponsorStartMessage() {
//the content script will get the message if a YouTube page is open //the content script will get the message if a YouTube page is open
chrome.tabs.query({ chrome.tabs.query({
active: true, active: true,
@@ -249,9 +288,9 @@ function sendSponsorStartMessage() {
startSponsorCallback startSponsorCallback
); );
}); });
} }
function startSponsorCallback(response) { function startSponsorCallback(response) {
let sponsorTimesIndex = sponsorTimes.length - (startTimeChosen ? 1 : 0); let sponsorTimesIndex = sponsorTimes.length - (startTimeChosen ? 1 : 0);
if (sponsorTimes[sponsorTimesIndex] == undefined) { if (sponsorTimes[sponsorTimesIndex] == undefined) {
@@ -269,36 +308,33 @@ function startSponsorCallback(response) {
displaySponsorTimes(); displaySponsorTimes();
//show submission section //show submission section
document.getElementById("submissionSection").style.display = "unset"; SB.submissionSection.style.display = "unset";
showSubmitTimesIfNecessary(); showSubmitTimesIfNecessary();
} }
//display the video times from the array
function displaySponsorTimes() {
//set it to the message
let sponsorMessageTimes = document.getElementById("sponsorMessageTimes");
//display the video times from the array
function displaySponsorTimes() {
//remove all children //remove all children
while (sponsorMessageTimes.firstChild) { while (SB.sponsorMessageTimes.firstChild) {
sponsorMessageTimes.removeChild(sponsorMessageTimes.firstChild); SB.sponsorMessageTimes.removeChild(SB.sponsorMessageTimes.firstChild);
} }
//add sponsor times //add sponsor times
sponsorMessageTimes.appendChild(getSponsorTimesMessageDiv(sponsorTimes)); SB.sponsorMessageTimes.appendChild(getSponsorTimesMessageDiv(sponsorTimes));
} }
//display the video times from the array at the top, in a different section //display the video times from the array at the top, in a different section
function displayDownloadedSponsorTimes(request) { function displayDownloadedSponsorTimes(request) {
if (request.sponsorTimes != undefined) { if (request.sponsorTimes != undefined) {
//set it to the message //set it to the message
document.getElementById("downloadedSponsorMessageTimes").innerHTML = getSponsorTimesMessage(request.sponsorTimes); SB.downloadedSponsorMessageTimes.innerText = getSponsorTimesMessage(request.sponsorTimes);
//add them as buttons to the issue reporting container //add them as buttons to the issue reporting container
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");
@@ -313,13 +349,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));
@@ -344,10 +380,10 @@ function displayDownloadedSponsorTimes(request) {
} }
} }
} }
} }
//get the message that visually displays the video times //get the message that visually displays the video times
function getSponsorTimesMessage(sponsorTimes) { function getSponsorTimesMessage(sponsorTimes) {
let sponsorTimesMessage = ""; let sponsorTimesMessage = "";
for (let i = 0; i < sponsorTimes.length; i++) { for (let i = 0; i < sponsorTimes.length; i++) {
@@ -366,11 +402,11 @@ function getSponsorTimesMessage(sponsorTimes) {
} }
return sponsorTimesMessage; return sponsorTimesMessage;
} }
//get the message that visually displays the video times //get the message that visually displays the video times
//this version is a div that contains each with delete buttons //this version is a div that contains each with delete buttons
function getSponsorTimesMessageDiv(sponsorTimes) { function getSponsorTimesMessageDiv(sponsorTimes) {
// let sponsorTimesMessage = ""; // let sponsorTimesMessage = "";
let sponsorTimesContainer = document.createElement("div"); let sponsorTimesContainer = document.createElement("div");
sponsorTimesContainer.id = "sponsorTimesContainer"; sponsorTimesContainer.id = "sponsorTimesContainer";
@@ -378,13 +414,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"; 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 = "mediumLink"; deleteButton.className = "mediumLink popupElement";
let index = i; let index = i;
deleteButton.addEventListener("click", () => deleteSponsorTime(index)); deleteButton.addEventListener("click", () => deleteSponsorTime(index));
@@ -394,7 +430,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 = "mediumLink"; 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++) {
@@ -423,44 +459,47 @@ function getSponsorTimesMessageDiv(sponsorTimes) {
} }
return sponsorTimesContainer; return sponsorTimesContainer;
} }
function editSponsorTime(index) { function editSponsorTime(index) {
if (document.getElementById("startTimeMinutes" + index) != null) { if (document.getElementById("startTimeMinutes" + index) != null) {
//already open //already open
return; return;
} }
//hide submit button
document.getElementById("submitTimesContainer").style.display = "none";
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"; 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 = "45"; 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"; 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 = "60"; 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"; 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 = "45"; 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"; 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 = "60"; endTimeSeconds.style.width = "60px";
let colonText = document.createElement("span"); let colonText = document.createElement("span");
colonText.innerText = ":"; colonText.innerText = ":";
@@ -485,17 +524,16 @@ 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 = "mediumLink"; 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); sponsorTimesContainer.replaceChild(saveButton, editButton);
sponsorTimesContainer.appendChild(saveButton); }
}
function saveSponsorTimeEdit(index) { function saveSponsorTimeEdit(index) {
let startTimeMinutes = document.getElementById("startTimeMinutes" + index); let startTimeMinutes = document.getElementById("startTimeMinutes" + index);
let startTimeSeconds = document.getElementById("startTimeSeconds" + index); let startTimeSeconds = document.getElementById("startTimeSeconds" + index);
@@ -510,10 +548,12 @@ function saveSponsorTimeEdit(index) {
chrome.storage.sync.set({[sponsorTimeKey]: sponsorTimes}); chrome.storage.sync.set({[sponsorTimeKey]: sponsorTimes});
displaySponsorTimes(); displaySponsorTimes();
}
//deletes the sponsor time submitted at an index showSubmitTimesIfNecessary();
function deleteSponsorTime(index) { }
//deletes the sponsor time submitted at an index
function deleteSponsorTime(index) {
//if it is not a complete sponsor time //if it is not a complete sponsor time
if (sponsorTimes[index].length < 2) { if (sponsorTimes[index].length < 2) {
chrome.tabs.query({ chrome.tabs.query({
@@ -556,9 +596,9 @@ function deleteSponsorTime(index) {
//hide submission section //hide submission section
document.getElementById("submissionSection").style.display = "none"; document.getElementById("submissionSection").style.display = "none";
} }
} }
function clearTimes() { function clearTimes() {
//send new sponsor time state to tab //send new sponsor time state to tab
if (sponsorTimes.length > 0) { if (sponsorTimes.length > 0) {
chrome.tabs.query({ chrome.tabs.query({
@@ -585,22 +625,14 @@ function clearTimes() {
document.getElementById("submissionSection").style.display = "none"; document.getElementById("submissionSection").style.display = "none";
resetStartTimeChosen(); resetStartTimeChosen();
} }
var EN_US = new Map(); function getErrorMessage(lang, statusCode) {
if(lang.has(statusCode)) return lang.get(statusCode);
return lang.get('Unknown').concat(" Error code: ") + statusCode;
}
EN_US.set(400, 'Server said this request was invalid"') function submitTimes() {
.set(429, 'You have submitted too many sponsor times for this one video, are you sure there are this many?')
.set(409, 'This has already been submitted before')
.set(502, 'It seems the server is down. Contact the dev to inform them.')
.set('Unknown', 'There was an error submitting your sponsor times, please try again later.');
function ErrorParser (Lang, statusCode) {
if(Lang.has(statusCode)) return Lang.get(statusCode);
return Lang.get('Unknown').concat(" Error code: ") + statusCode;
}
function submitTimes() {
//make info message say loading //make info message say loading
SB.submitTimesInfoMessage.innerText = "Loading..."; SB.submitTimesInfoMessage.innerText = "Loading...";
SB.submitTimesInfoMessageContainer.style.display = "unset"; SB.submitTimesInfoMessageContainer.style.display = "unset";
@@ -614,17 +646,22 @@ function submitTimes() {
if (response.statusCode == 200) { if (response.statusCode == 200) {
//hide loading message //hide loading message
SB.submitTimesInfoMessageContainer.style.display = "none"; SB.submitTimesInfoMessageContainer.style.display = "none";
clearTimes(); clearTimes();
} else { } else {
ErrorParser(EN_US, response.statusCode); let errorMessage = getErrorMessage(EN_US, response.statusCode);
document.getElementById("submitTimesInfoMessage").innerText = errorMessage;
document.getElementById("submitTimesInfoMessageContainer").style.display = "unset";
SB.submitTimesInfoMessageContainer.style.display = "unset"; SB.submitTimesInfoMessageContainer.style.display = "unset";
} }
} }
}); });
} }
} }
function showNoticeAgain() { function showNoticeAgain() {
chrome.storage.sync.set({"dontShowNoticeAgain": false}); chrome.storage.sync.set({"dontShowNoticeAgain": false});
chrome.tabs.query({ chrome.tabs.query({
@@ -637,9 +674,9 @@ function showNoticeAgain() {
}); });
SB.showNoticeAgain.style.display = "none"; SB.showNoticeAgain.style.display = "none";
} }
function hideVideoPlayerControls() { function hideVideoPlayerControls() {
chrome.storage.sync.set({"hideVideoPlayerControls": true}); chrome.storage.sync.set({"hideVideoPlayerControls": true});
chrome.tabs.query({ chrome.tabs.query({
@@ -654,9 +691,9 @@ function hideVideoPlayerControls() {
SB.hideVideoPlayerControls.style.display = "none"; SB.hideVideoPlayerControls.style.display = "none";
SB.showVideoPlayerControls.style.display = "unset"; SB.showVideoPlayerControls.style.display = "unset";
} }
function showVideoPlayerControls() { function showVideoPlayerControls() {
chrome.storage.sync.set({"hideVideoPlayerControls": false}); chrome.storage.sync.set({"hideVideoPlayerControls": false});
chrome.tabs.query({ chrome.tabs.query({
@@ -671,9 +708,9 @@ function showVideoPlayerControls() {
SB.hideVideoPlayerControls.style.display = "unset"; SB.hideVideoPlayerControls.style.display = "unset";
SB.showVideoPlayerControls.style.display = "none"; SB.showVideoPlayerControls.style.display = "none";
} }
function hideInfoButtonPlayerControls() { function hideInfoButtonPlayerControls() {
chrome.storage.sync.set({"hideInfoButtonPlayerControls": true}); chrome.storage.sync.set({"hideInfoButtonPlayerControls": true});
chrome.tabs.query({ chrome.tabs.query({
@@ -688,9 +725,9 @@ function hideInfoButtonPlayerControls() {
SB.hideInfoButtonPlayerControls.style.display = "none"; SB.hideInfoButtonPlayerControls.style.display = "none";
SB.showInfoButtonPlayerControls.style.display = "unset"; SB.showInfoButtonPlayerControls.style.display = "unset";
} }
function showInfoButtonPlayerControls() { function showInfoButtonPlayerControls() {
chrome.storage.sync.set({"hideInfoButtonPlayerControls": false}); chrome.storage.sync.set({"hideInfoButtonPlayerControls": false});
chrome.tabs.query({ chrome.tabs.query({
@@ -705,9 +742,9 @@ function showInfoButtonPlayerControls() {
SB.hideInfoButtonPlayerControls.style.display = "unset"; SB.hideInfoButtonPlayerControls.style.display = "unset";
SB.showInfoButtonPlayerControls.style.display = "none"; SB.showInfoButtonPlayerControls.style.display = "none";
} }
function hideDeleteButtonPlayerControls() { function hideDeleteButtonPlayerControls() {
chrome.storage.sync.set({"hideDeleteButtonPlayerControls": true}); chrome.storage.sync.set({"hideDeleteButtonPlayerControls": true});
chrome.tabs.query({ chrome.tabs.query({
@@ -722,9 +759,9 @@ function hideDeleteButtonPlayerControls() {
SB.hideDeleteButtonPlayerControls.style.display = "none"; SB.hideDeleteButtonPlayerControls.style.display = "none";
SB.showDeleteButtonPlayerControls.style.display = "unset"; SB.showDeleteButtonPlayerControls.style.display = "unset";
} }
function showDeleteButtonPlayerControls() { function showDeleteButtonPlayerControls() {
chrome.storage.sync.set({"hideDeleteButtonPlayerControls": false}); chrome.storage.sync.set({"hideDeleteButtonPlayerControls": false});
chrome.tabs.query({ chrome.tabs.query({
@@ -739,9 +776,9 @@ function showDeleteButtonPlayerControls() {
SB.hideDeleteButtonPlayerControls.style.display = "unset"; SB.hideDeleteButtonPlayerControls.style.display = "unset";
SB.showDeleteButtonPlayerControls.style.display = "none"; SB.showDeleteButtonPlayerControls.style.display = "none";
} }
function disableSponsorViewTracking() { function disableSponsorViewTracking() {
chrome.storage.sync.set({"trackViewCount": false}); chrome.storage.sync.set({"trackViewCount": false});
chrome.tabs.query({ chrome.tabs.query({
@@ -756,9 +793,9 @@ function disableSponsorViewTracking() {
SB.disableSponsorViewTracking.style.display = "none"; SB.disableSponsorViewTracking.style.display = "none";
SB.enableSponsorViewTracking.style.display = "unset"; SB.enableSponsorViewTracking.style.display = "unset";
} }
function enableSponsorViewTracking() { function enableSponsorViewTracking() {
chrome.storage.sync.set({"trackViewCount": true}); chrome.storage.sync.set({"trackViewCount": true});
chrome.tabs.query({ chrome.tabs.query({
@@ -773,26 +810,26 @@ function enableSponsorViewTracking() {
SB.enableSponsorViewTracking.style.display = "none"; SB.enableSponsorViewTracking.style.display = "none";
SB.disableSponsorViewTracking.style.display = "unset"; SB.disableSponsorViewTracking.style.display = "unset";
} }
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";
} else { } else {
resetStartTimeChosen(); resetStartTimeChosen();
} }
} }
//set it to false //set it to false
function resetStartTimeChosen() { function resetStartTimeChosen() {
startTimeChosen = false; startTimeChosen = false;
SB.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
function showSubmitTimesIfNecessary() { function showSubmitTimesIfNecessary() {
//check if an end time has been specified for the latest sponsor time //check if an end time has been specified for the latest sponsor time
if (sponsorTimes.length > 0 && sponsorTimes[sponsorTimes.length - 1].length > 1) { if (sponsorTimes.length > 0 && sponsorTimes[sponsorTimes.length - 1].length > 1) {
//show submit times button //show submit times button
@@ -801,26 +838,26 @@ function showSubmitTimesIfNecessary() {
//hide submit times button //hide submit times button
document.getElementById("submitTimesContainer").style.display = "none"; document.getElementById("submitTimesContainer").style.display = "none";
} }
} }
//make the options div visisble //make the options div visisble
function openOptions() { function openOptions() {
document.getElementById("optionsButtonContainer").style.display = "none"; document.getElementById("optionsButtonContainer").style.display = "none";
document.getElementById("options").style.display = "unset"; document.getElementById("options").style.display = "unset";
} }
//this is not a YouTube video page //this is not a YouTube video page
function displayNoVideo() { function displayNoVideo() {
document.getElementById("loadingIndicator").innerHTML = "This probably isn't a YouTube tab, or you clicked too early. " + 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."; "If you know this is a YouTube tab, close this popup and open it again.";
} }
function reportAnIssue() { function reportAnIssue() {
document.getElementById("issueReporterContainer").style.display = "unset"; document.getElementById("issueReporterContainer").style.display = "unset";
SB.reportAnIssue.style.display = "none"; SB.reportAnIssue.style.display = "none";
} }
function addVoteMessage(message, UUID) { function addVoteMessage(message, UUID) {
let container = document.getElementById("sponsorTimesVoteButtonsContainer" + UUID); let container = document.getElementById("sponsorTimesVoteButtonsContainer" + UUID);
//remove all children //remove all children
while (container.firstChild) { while (container.firstChild) {
@@ -833,9 +870,9 @@ function addVoteMessage(message, UUID) {
thanksForVotingText.style.marginBottom = "0px"; thanksForVotingText.style.marginBottom = "0px";
container.appendChild(thanksForVotingText); container.appendChild(thanksForVotingText);
} }
function vote(type, UUID) { function vote(type, UUID) {
//add loading info //add loading info
addVoteMessage("Loading...", UUID) addVoteMessage("Loading...", UUID)
@@ -863,16 +900,16 @@ function vote(type, UUID) {
} }
} }
}); });
} }
function hideDiscordButton() { function hideDiscordButton() {
chrome.storage.sync.set({"hideDiscordLink": false}); chrome.storage.sync.set({"hideDiscordLink": false});
SB.discordButtonContainer.style.display = "none"; SB.discordButtonContainer.style.display = "none";
} }
//converts time in seconds to minutes:seconds //converts time in seconds to minutes:seconds
function getFormattedTime(seconds) { function getFormattedTime(seconds) {
let minutes = Math.floor(seconds / 60); let minutes = Math.floor(seconds / 60);
let secondsDisplay = Math.round(seconds - minutes * 60); let secondsDisplay = Math.round(seconds - minutes * 60);
if (secondsDisplay < 10) { if (secondsDisplay < 10) {
@@ -883,17 +920,17 @@ function getFormattedTime(seconds) {
let formatted = minutes+ ":" + secondsDisplay; let formatted = minutes+ ":" + secondsDisplay;
return formatted; return formatted;
} }
//converts time in seconds to minutes //converts time in seconds to minutes
function getTimeInMinutes(seconds) { function getTimeInMinutes(seconds) {
let minutes = Math.floor(seconds / 60); let minutes = Math.floor(seconds / 60);
return minutes; return minutes;
} }
//converts time in seconds to seconds past the last minute //converts time in seconds to seconds past the last minute
function getTimeInFormattedSeconds(seconds) { function getTimeInFormattedSeconds(seconds) {
let secondsFormatted = (seconds % 60).toFixed(3); let secondsFormatted = (seconds % 60).toFixed(3);
if (secondsFormatted < 10) { if (secondsFormatted < 10) {
@@ -901,9 +938,9 @@ function getTimeInFormattedSeconds(seconds) {
} }
return secondsFormatted; return secondsFormatted;
} }
function sendRequestToServer(type, address, callback) { function sendRequestToServer(type, address, callback) {
let xmlhttp = new XMLHttpRequest(); let xmlhttp = new XMLHttpRequest();
xmlhttp.open(type, serverAddress + address, true); xmlhttp.open(type, serverAddress + address, true);
@@ -920,10 +957,22 @@ function sendRequestToServer(type, address, callback) {
//submit this request //submit this request
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();
} }