diff options
author | Ajay Ramachandran <[email protected]> | 2019-07-30 18:22:45 -0400 |
---|---|---|
committer | GitHub <[email protected]> | 2019-07-30 18:22:45 -0400 |
commit | 7ed72fad406269a72151e4ee55d7971ed5930897 (patch) | |
tree | b5cc63b7263092cb0b19b1abe2b37ffd441d4979 | |
parent | a1c8ecabca0a9070d26872ea1db0c037da3cf0a7 (diff) | |
parent | a2b4f8d141a5100f97cf98711e6e68f4fe816e36 (diff) | |
download | SponsorBlock-7ed72fad406269a72151e4ee55d7971ed5930897.tar.gz SponsorBlock-7ed72fad406269a72151e4ee55d7971ed5930897.zip |
Merge pull request #52 from ajayyy/experimentalv1.0.21
Firefox fixes
-rw-r--r-- | background.js | 9 | ||||
-rw-r--r-- | content.js | 62 | ||||
-rw-r--r-- | firefox_manifest.json | 6 | ||||
-rw-r--r-- | manifest.json | 8 | ||||
-rw-r--r-- | popup.css | 101 | ||||
-rw-r--r-- | popup.html | 278 | ||||
-rw-r--r-- | popup.js | 1744 |
7 files changed, 1156 insertions, 1052 deletions
diff --git a/background.js b/background.js index adb86553..55729fff 100644 --- a/background.js +++ b/background.js @@ -3,6 +3,9 @@ var previousVideoID = null //the id of this user, randomly generated once per install 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 chrome.tabs.onActivated.addListener( function(activeInfo) { @@ -162,6 +165,12 @@ function videoIDChange(currentVideoID, tabId) { id: currentVideoID }); + //not a url change + if (sponsorVideoID == currentVideoID){ + return; + } + sponsorVideoID = currentVideoID; + //warn them if they had unsubmitted times if (previousVideoID != null) { //get the sponsor times from storage @@ -59,8 +59,10 @@ chrome.storage.sync.get(["dontShowNoticeAgain"], function(result) { } }); -chrome.runtime.onMessage.addListener( // Detect URL Changes - function(request, sender, sendResponse) { +//get messages from the background script and the popup +chrome.runtime.onMessage.addListener(messageListener); + +function messageListener(request, sender, sendResponse) { //message from background script if (request.message == "ytvideoid") { videoIDChange(request.id); @@ -118,7 +120,7 @@ chrome.runtime.onMessage.addListener( // Detect URL Changes if (request.message == "trackViewCount") { trackViewCount = request.value; } -}); +} //check for hotkey pressed document.onkeydown = function(e){ @@ -474,31 +476,43 @@ function openInfoMenu() { //hide info button document.getElementById("infoButton").style.display = "none"; - let popup = document.createElement("div"); - popup.id = "sponsorBlockPopupContainer"; - - let popupFrame = document.createElement("iframe"); - popupFrame.id = "sponsorBlockPopupFrame" - popupFrame.src = chrome.extension.getURL("popup.html"); - popupFrame.className = "popup"; + 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.innerHTML = xmlhttp.responseText + + //close button + let closeButton = document.createElement("div"); + closeButton.innerText = "Close Popup"; + closeButton.classList = "smallLink"; + closeButton.setAttribute("align", "center"); + closeButton.addEventListener("click", closeInfoMenu); + + //add the close button + popup.prepend(closeButton); + + let parentNode = document.getElementById("secondary"); + if (parentNode == null) { + //old youtube theme + parentNode = document.getElementById("watch7-sidebar-contents"); + } - //close button - let closeButton = document.createElement("div"); - closeButton.innerText = "Close Popup"; - closeButton.classList = "smallLink"; - closeButton.setAttribute("align", "center"); - closeButton.addEventListener("click", closeInfoMenu); + //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"); - popup.appendChild(closeButton); - popup.appendChild(popupFrame); + //remove the style sheet and font that are not necessary + popup.querySelector("#sponorBlockPopupFont").remove(); + popup.querySelector("#sponorBlockStyleSheet").remove(); - let parentNode = document.getElementById("secondary"); - if (parentNode == null) { - //old youtube theme - parentNode = document.getElementById("watch7-sidebar-contents"); - } + parentNode.insertBefore(popup, parentNode.firstChild); - parentNode.prepend(popup); + //run the popup init script + runThePopup(); + } + }); } function closeInfoMenu() { diff --git a/firefox_manifest.json b/firefox_manifest.json index d8e2296b..3948c08a 100644 --- a/firefox_manifest.json +++ b/firefox_manifest.json @@ -10,11 +10,13 @@ ], "js": [ "config.js", - "content.js" + "content.js", + "popup.js" ], "css": [ "content.css", - "./libs/Source+Sans+Pro.css" + "./libs/Source+Sans+Pro.css", + "popup.css" ] } ], diff --git a/manifest.json b/manifest.json index b683f4d7..0f427829 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "name": "SponsorBlock for YouTube - Skip Sponsorships", "short_name": "SponsorBlock", - "version": "1.0.16", + "version": "1.0.21", "description": "Skip over sponsorship on YouTube videos. Report sponsors on videos you watch to save the time of others.", "content_scripts": [ { @@ -10,11 +10,13 @@ ], "js": [ "config.js", - "content.js" + "content.js", + "popup.js" ], "css": [ "content.css", - "./libs/Source+Sans+Pro.css" + "./libs/Source+Sans+Pro.css", + "popup.css" ] } ], @@ -1,45 +1,84 @@ -* { +/* reset some properties to default (youtube messes with them */ +p.popupElement { + margin-block-start: 1em; + margin-block-end: 1em; + margin-inline-start: 0px; + margin-inline-end: 0px; +} + +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 { +h1.popupElement { margin-top: 0px; } -body { - font-size: 14px; - min-width: 300px; - background-color: #ffd9d9; +.popupBody { + font-size: 14px; + background-color: #ffd9d9; + padding: 5px; } -.recordingSubtitle { +.recordingSubtitle.popupElement { margin-bottom: 10px; } -.voteButton { +.voteButton.popupElement { height: 32px; margin-right: 15px; cursor: pointer; } -.voteButton:hover { +.voteButton:hover.popupElement { filter: brightness(80%); } -#discordButtonContainer { +#discordButtonContainer.popupElement { font-size: 12px; } -.sponsorTime { +.sponsorTime.popupElement { font-size: 20px; } -.smallLink { +.smallLink.popupElement { font-size: 10px; text-decoration: underline; cursor: pointer; } -.mediumLink { +.mediumLink.popupElement { font-size: 15px; padding-left: 15px; padding-right: 15px; @@ -47,8 +86,8 @@ body { cursor: pointer; } -.greenButton { - background-color:#ec1c1c; +.greenButton.popupElement { + background-color:#ec1c1c; -moz-border-radius:28px; -webkit-border-radius:28px; border-radius:28px; @@ -61,19 +100,19 @@ body { text-decoration:none; text-shadow:0px 0px 0px #662727; } -.greenButton:hover { +.greenButton:hover.popupElement { background-color:#bf2a2a; } -.greenButton:focus { +.greenButton:focus.popupElement { outline: none; background-color:#bf2a2a; } -.greenButton:active { +.greenButton:active.popupElement { position:relative; top:1px; } -.dangerButton { +.dangerButton.popupElement { -moz-box-shadow:inset 0px 1px 0px 0px #cf866c; -webkit-box-shadow:inset 0px 1px 0px 0px #cf866c; box-shadow:inset 0px 1px 0px 0px #cf866c; @@ -90,19 +129,19 @@ body { text-decoration:none; text-shadow:0px 1px 0px #854629; } -.dangerButton:hover { +.dangerButton:hover.popupElement { background-color:#bc3315; } -.dangerButton:focus { +.dangerButton:focus.popupElement { outline: none; background-color:#bc3315; } -.dangerButton:active { +.dangerButton:active.popupElement { position:relative; top:1px; } -.warningButton { +.warningButton.popupElement { -moz-box-shadow:inset 0px 1px 0px 0px #cfbd6c; -webkit-box-shadow:inset 0px 1px 0px 0px #cfbd6c; box-shadow:inset 0px 1px 0px 0px #cfbd6c; @@ -119,19 +158,19 @@ body { text-decoration:none; text-shadow:0px 1px 0px #856829; } -.warningButton:hover { +.warningButton:hover.popupElement { background-color:#bc8215; } -.warningButton:focus { +.warningButton:focus.popupElement { outline: none; background-color:#bc8215; } -.warningButton:active { +.warningButton:active.popupElement { position:relative; top:1px; } -.smallButton { +.smallButton.popupElement { background-color:#f9902d; -moz-border-radius:3px; -webkit-border-radius:3px; @@ -144,14 +183,14 @@ body { padding:6px 10px; text-decoration:none; } -.smallButton:hover { +.smallButton:hover.popupElement { background-color:#fa9806; } -.smallButton:focus { +.smallButton:focus.popupElement { outline: none; background-color:#fa9806; } -.smallButton:active { +.smallButton:active.popupElement { position:relative; top:1px; -} +}
\ No newline at end of file @@ -1,182 +1,184 @@ <html> <head> <title>Set Page Color Popup</title> - <link rel="stylesheet" type="text/css" href="/libs/Source+Sans+Pro.css"/> - <link rel="stylesheet" type="text/css" href="popup.css"/> + <link id="sponorBlockPopupFont" rel="stylesheet" type="text/css" href="/libs/Source+Sans+Pro.css"/> + <link id="sponorBlockStyleSheet" rel="stylesheet" type="text/css" href="popup.css"/> </head> - <center> - <div id="app"> - <img src="icons/LogoSponsorBlocker256px.png" height="64px"/> + <body class="popupBody"> + <center> + <div id="app" class="popupBody"> + <img src="icons/LogoSponsorBlocker256px.png" height="64px" id="sponsorBlockPopupLogo"/> - <h1>SponsorBlock</h1> + <h1 class="popupElement">SponsorBlock</h1> - <!-- Loading text --> - <p id="loadingIndicator">Loading...</p> + <!-- Loading text --> + <p id="loadingIndicator" class="popupElement">Loading...</p> - <!-- Hidden until loading complete --> - <div id="mainControls" class="main" style="display: none"> - <!-- If the video was found in the database --> - <div id="videoFound"> - - </div> - - <div id="downloadedSponsorMessageTimes"> - - </div> - - <br/> - - <button id="reportAnIssue" class="dangerButton">Vote On A Sponsor Time</button> - - <div id="issueReporterContainer" style="display: none"> - - <h3 style="margin-top: 0px">Vote On A Sponsor Time</h3> + <!-- Hidden until loading complete --> + <div id="mainControls" class="main popupElement" style="display: none"> + <!-- If the video was found in the database --> + <div id="videoFound"> + + </div> - <div id="issueReporterTimeButtons"> + <div id="downloadedSponsorMessageTimes" class="popupElement"> </div> - </div> + <br/> - <h2 class="recordingSubtitle">Record the times of a sponsorship</h2> - - <p> - <span id=sponsorTimesContributionsContainer style="display: none"> - So far, you've submitted - <span id="sponsorTimesContributionsDisplay"> - 0 - </span> - <span id="sponsorTimesContributionsDisplayEndWord"> - sponsors. - </span> - </span> - - <span id=sponsorTimesViewsContainer style="display: none"> - You have saved people from - <span id="sponsorTimesViewsDisplay"> - 0 - </span> - <span id="sponsorTimesViewsDisplayEndWord"> - sponsor segments. - </span> - </span> - </p> - - <p> - Click the button below when the sponsorship starts and ends to record and - submit it to the database. - </p> - - <div> - <button id="sponsorStart" class="greenButton">Sponsorship Starts Now</button> - </div> + <button id="reportAnIssue" class="dangerButton popupElement">Vote On A Sponsor Time</button> - <sub>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"> - <h3>Latest Sponsor Message Times Chosen</h3> - <b> - <div id="sponsorMessageTimes"> - - </div> - </b> - - <button id="clearTimes" class="smallButton">Clear Times</button> - - <br/> - <br/> + <div id="issueReporterContainer" class="popupElement" style="display: none"> - <div id="submitTimesContainer" style="display: none"> - <button id="submitTimes" class="smallButton">Submit Times</button> + <h3 style="margin-top: 0px" class="popupElement">Vote On A Sponsor Time</h3> - <div id="submitTimesInfoMessageContainer" style="display: none"> - <h3 id="submitTimesInfoMessage"> + <div id="issueReporterTimeButtons" class="popupElement"> - </h3> </div> </div> - - </div> - <div id="discordButtonContainer" style="display: none"> - <br/> + <h2 class="recordingSubtitle popupElement">Record the times of a sponsorship</h2> + + <p class="popupElement"> + <span id=sponsorTimesContributionsContainer class="popupElement" style="display: none"> + So far, you've submitted + <span id="sponsorTimesContributionsDisplay" class="popupElement"> + 0 + </span> + <span id="sponsorTimesContributionsDisplayEndWord" class="popupElement"> + sponsors. + </span> + </span> + + <span id=sponsorTimesViewsContainer class="popupElement" style="display: none"> + You have saved people from + <span id="sponsorTimesViewsDisplay" class="popupElement"> + 0 + </span> + <span id="sponsorTimesViewsDisplayEndWord" class="popupElement"> + sponsor segments. + </span> + </span> + </p> + + <p class="popupElement"> + Click the button below when the sponsorship starts and ends to record and + submit it to the database. + </p> + + <div> + <button id="sponsorStart" class="greenButton popupElement">Sponsorship Starts Now</button> + </div> - <a href="https://discord.gg/QnmVMpU" target="_blank"><img src="https://www.logolynx.com/images/logolynx/1b/1bcc0f0aefe71b2c8ce66ffe8645d365.png" height="32px"/></a> + <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" class="popupElement" style="display: none"> + <h3 class="popupElement">Latest Sponsor Message Times Chosen</h3> + <b> + <div id="sponsorMessageTimes" class="popupElement"> + + </div> + </b> + + <button id="clearTimes" class="smallButton popupElement">Clear Times</button> + + <br/> + <br/> - <br/> + <div id="submitTimesContainer" class="popupElement" style="display: none"> + <button id="submitTimes" class="smallButton popupElement">Submit Times</button> - Come join the official discord server to give suggestions and feedback! + <div id="submitTimesInfoMessageContainer" class="popupElement" style="display: none"> + <h3 id="submitTimesInfoMessage" class="popupElement"> - <br/> + </h3> + </div> - <span id="hideDiscordButton" class="smallLink">Hide this</span> - </div> + </div> + + </div> - <div id="optionsButtonContainer"> - <br/> + <div id="discordButtonContainer" class="popupElement" style="display: none"> <br/> - - <button id="optionsButton" class="dangerButton">Options</button> - </div> - <div id="options" style="display: none"> - <br/> + <a href="https://discord.gg/QnmVMpU" class="popupElement" target="_blank"><img src="https://www.logolynx.com/images/logolynx/1b/1bcc0f0aefe71b2c8ce66ffe8645d365.png" height="32px"/></a> - <h3>Options</h3> - - <button id="hideVideoPlayerControls" class="warningButton">Hide Buttons On YouTube Player</button> - <button id="showVideoPlayerControls" style="display: none" class="warningButton">Show Buttons On YouTube Player</button> <br/> - <sub> - 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, - use the button that appears on the notice saying "Don't show this again". You can always enable these settings again - later. - </sub> - <br/> - <br/> + Come join the official discord server to give suggestions and feedback! - <button id="hideInfoButtonPlayerControls" class="warningButton">Hide Info Button On YouTube Player</button> - <button id="showInfoButtonPlayerControls" style="display: none" class="warningButton">Show Info Button On YouTube Player</button> <br/> - <sub> - This is the button that opens up a popup in the YouTube page. - </sub> - <br/> - <br/> + <span id="hideDiscordButton" class="smallLink popupElement">Hide this</span> + </div> - <button id="hideDeleteButtonPlayerControls" class="warningButton">Hide Delete Button On YouTube Player</button> - <button id="showDeleteButtonPlayerControls" style="display: none" class="warningButton">Show Delete Button On YouTube Player</button> - <br/> - <sub> - This is the button that allows you to clear all sponsors on the YouTube player. - </sub> + <div id="optionsButtonContainer" class="popupElement"> + <br/> + <br/> + + <button id="optionsButton" class="dangerButton popupElement">Options</button> + </div> - <br/> - <br/> + <div id="options" class="popupElement" style="display: none"> + <br/> - <button id="disableSponsorViewTracking" class="warningButton">Disable Sponsor View Tracking</button> - <button id="enableSponsorViewTracking" style="display: none" class="warningButton">Enable Sponsor View Tracking</button> - <br/> - <sub> - 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 - to the server each time you skip a sponsor. Hopefully most people don't change this setting so that the view numbers - are accurate. :) - </sub> - - <br/> - <br/> + <h3>Options</h3> + + <button id="hideVideoPlayerControls" class="warningButton popupElement">Hide Buttons On YouTube Player</button> + <button id="showVideoPlayerControls" style="display: none" class="warningButton popupElement">Show Buttons On YouTube Player</button> + <br/> + <sub class="popupElement"> + 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, + use the button that appears on the notice saying "Don't show this again". You can always enable these settings again + later. + </sub> + + <br/> + <br/> + + <button id="hideInfoButtonPlayerControls" class="warningButton popupElement">Hide Info Button On YouTube Player</button> + <button id="showInfoButtonPlayerControls" style="display: none" class="warningButton popupElement">Show Info Button On YouTube Player</button> + <br/> + <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 + 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 + are accurate. :) + </sub> + + <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> - </center> + </center> + </body> <!-- Scripts that need to load after the html --> <script src="config.js"></script> @@ -1,927 +1,963 @@ -// References -var SB = {}; - -SB.sponsorStart = document.getElementById("sponsorStart"); -SB.clearTimes = document.getElementById("clearTimes"); -SB.submitTimes = document.getElementById("submitTimes"); -SB.showNoticeAgain = document.getElementById("showNoticeAgain"); -SB.hideVideoPlayerControls = document.getElementById("hideVideoPlayerControls"); -SB.showVideoPlayerControls = document.getElementById("showVideoPlayerControls"); -SB.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.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"); - -//setup click listeners -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); - - -//if true, the button now selects the end time -var startTimeChosen = false; - -//the start and end time pairs (2d) -var sponsorTimes = []; - -//current video ID of this tab -var currentVideoID = null; - -//is this a YouTube tab? -var isYouTubeTab = false; - -//see if discord link can be shown -chrome.storage.sync.get(["hideDiscordLink"], function(result) { - let hideDiscordLink = result.hideDiscordLink; - if (hideDiscordLink == undefined || !hideDiscordLink) { - chrome.storage.sync.get(["hideDiscordLaunches"], function(result) { - let hideDiscordLaunches = result.hideDiscordLaunches; - //only if less than 5 launches - if (hideDiscordLaunches == undefined || hideDiscordLaunches < 10) { - SB.discordButtonContainer.style.display = null; - - if (hideDiscordLaunches == undefined) { - hideDiscordButton = 1; - } - - chrome.storage.sync.set({"hideDiscordLaunches": hideDiscordButton + 1}); +//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); } - }); - } -}); - -//if the don't show notice again variable is true, an option to -// disable should be available -chrome.storage.sync.get(["dontShowNoticeAgain"], function(result) { - let dontShowNoticeAgain = result.dontShowNoticeAgain; - if (dontShowNoticeAgain != undefined && dontShowNoticeAgain) { - SB.showNoticeAgain.style.display = "unset"; - } -}); - -//show proper video player controls options -chrome.storage.sync.get(["hideVideoPlayerControls"], function(result) { - let hideVideoPlayerControls = result.hideVideoPlayerControls; - if (hideVideoPlayerControls != undefined && hideVideoPlayerControls) { - SB.hideVideoPlayerControls.style.display = "none"; - 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 -chrome.storage.sync.get(["trackViewCount"], function(result) { - let trackViewCount = result.trackViewCount; - if (trackViewCount != undefined && !trackViewCount) { - SB.disableSponsorViewTracking.style.display = "none"; - SB.enableSponsorViewTracking.style.display = "unset"; + + //add a dummy query method + chrome.tabs.query = function(config, callback) { + callback([{ + url: document.URL, + id: -1 + }]); + } + + inPopup = false; } -}); - -//get the amount of times this user has contributed and display it to thank them -chrome.storage.sync.get(["sponsorTimesContributed"], function(result) { - if (result.sponsorTimesContributed != undefined) { - if (result.sponsorTimesContributed > 1) { - SB.sponsorTimesContributionsDisplayEndWord.innerText = "sponsors." - } else { - SB.sponsorTimesContributionsDisplayEndWord.innerText = "sponsor." + + // References + let SB = {}; + + SB.sponsorStart = document.getElementById("sponsorStart"); + SB.clearTimes = document.getElementById("clearTimes"); + SB.submitTimes = document.getElementById("submitTimes"); + SB.showNoticeAgain = document.getElementById("showNoticeAgain"); + SB.hideVideoPlayerControls = document.getElementById("hideVideoPlayerControls"); + SB.showVideoPlayerControls = document.getElementById("showVideoPlayerControls"); + SB.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.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"); + + //setup click listeners + 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); + + + //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; + if (hideDiscordLink == undefined || !hideDiscordLink) { + chrome.storage.sync.get(["hideDiscordLaunches"], function(result) { + let hideDiscordLaunches = result.hideDiscordLaunches; + //only if less than 5 launches + if (hideDiscordLaunches == undefined || hideDiscordLaunches < 10) { + SB.discordButtonContainer.style.display = null; + + if (hideDiscordLaunches == undefined) { + hideDiscordButton = 1; + } + + chrome.storage.sync.set({"hideDiscordLaunches": hideDiscordButton + 1}); + } + }); } - SB.sponsorTimesContributionsDisplay.innerText = result.sponsorTimesContributed; - SB.sponsorTimesContributionsContainer.style.display = "unset"; - - //get the userID - chrome.storage.sync.get(["userID"], function(result) { - let userID = result.userID; - if (userID != undefined) { - //there are probably some views on these submissions then - //get the amount of views from the sponsors submitted - sendRequestToServer("GET", "/api/getViewsForUser?userID=" + userID, function(xmlhttp) { - if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { - let viewCount = JSON.parse(xmlhttp.responseText).viewCount; - if (viewCount != 0) { - if (viewCount > 1) { - SB.sponsorTimesViewsDisplayEndWord.innerText = "sponsor segments." - } else { - SB.sponsorTimesViewsDisplayEndWord.innerText = "sponsor segment." + }); + + //if the don't show notice again letiable is true, an option to + // disable should be available + chrome.storage.sync.get(["dontShowNoticeAgain"], function(result) { + let dontShowNoticeAgain = result.dontShowNoticeAgain; + if (dontShowNoticeAgain != undefined && dontShowNoticeAgain) { + SB.showNoticeAgain.style.display = "unset"; + } + }); + + //show proper video player controls options + chrome.storage.sync.get(["hideVideoPlayerControls"], function(result) { + let hideVideoPlayerControls = result.hideVideoPlayerControls; + if (hideVideoPlayerControls != undefined && hideVideoPlayerControls) { + SB.hideVideoPlayerControls.style.display = "none"; + 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 + chrome.storage.sync.get(["trackViewCount"], function(result) { + let trackViewCount = result.trackViewCount; + if (trackViewCount != undefined && !trackViewCount) { + SB.disableSponsorViewTracking.style.display = "none"; + SB.enableSponsorViewTracking.style.display = "unset"; + } + }); + + //get the amount of times this user has contributed and display it to thank them + chrome.storage.sync.get(["sponsorTimesContributed"], function(result) { + if (result.sponsorTimesContributed != undefined) { + if (result.sponsorTimesContributed > 1) { + SB.sponsorTimesContributionsDisplayEndWord.innerText = "sponsors." + } else { + SB.sponsorTimesContributionsDisplayEndWord.innerText = "sponsor." + } + SB.sponsorTimesContributionsDisplay.innerText = result.sponsorTimesContributed; + SB.sponsorTimesContributionsContainer.style.display = "unset"; + + //get the userID + chrome.storage.sync.get(["userID"], function(result) { + let userID = result.userID; + if (userID != undefined) { + //there are probably some views on these submissions then + //get the amount of views from the sponsors submitted + sendRequestToServer("GET", "/api/getViewsForUser?userID=" + userID, function(xmlhttp) { + if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { + let viewCount = JSON.parse(xmlhttp.responseText).viewCount; + if (viewCount != 0) { + if (viewCount > 1) { + SB.sponsorTimesViewsDisplayEndWord.innerText = "sponsor segments." + } else { + SB.sponsorTimesViewsDisplayEndWord.innerText = "sponsor segment." + } + SB.sponsorTimesViewsDisplay.innerText = viewCount; + SB.sponsorTimesViewsContainer.style.display = "unset"; } - SB.sponsorTimesViewsDisplay.innerText = viewCount; - SB.sponsorTimesViewsContainer.style.display = "unset"; } - } - }); + }); + } + }); + } + }); + + + chrome.tabs.query({ + active: true, + currentWindow: true + }, loadTabData); + + + function loadTabData(tabs) { + //set current videoID + currentVideoID = getYouTubeVideoID(tabs[0].url); + + if (!currentVideoID) { + //this isn't a YouTube video then + displayNoVideo(); + return; + } + + //load video times for this video + let sponsorTimeKey = "sponsorTimes" + currentVideoID; + chrome.storage.sync.get([sponsorTimeKey], function(result) { + let sponsorTimesStorage = result[sponsorTimeKey]; + if (sponsorTimesStorage != undefined && sponsorTimesStorage.length > 0) { + if (sponsorTimesStorage[sponsorTimesStorage.length - 1] != undefined && sponsorTimesStorage[sponsorTimesStorage.length - 1].length < 2) { + startTimeChosen = true; + SB.sponsorStart.innerHTML = "Sponsorship Ends Now"; + } + + sponsorTimes = sponsorTimesStorage; + + displaySponsorTimes(); + + //show submission section + document.getElementById("submissionSection").style.display = "unset"; + + showSubmitTimesIfNecessary(); } }); + + //check if this video's sponsors are known + chrome.tabs.sendMessage( + tabs[0].id, + {message: 'isInfoFound'}, + infoFound + ); } -}); - - -chrome.tabs.query({ - active: true, - currentWindow: true -}, loadTabData); - -function loadTabData(tabs) { - //set current videoID - currentVideoID = getYouTubeVideoID(tabs[0].url); - - if (!currentVideoID) { - //this isn't a YouTube video then - displayNoVideo(); - return; - } - - //load video times for this video - let sponsorTimeKey = "sponsorTimes" + currentVideoID; - chrome.storage.sync.get([sponsorTimeKey], function(result) { - let sponsorTimesStorage = result[sponsorTimeKey]; - if (sponsorTimesStorage != undefined && sponsorTimesStorage.length > 0) { - if (sponsorTimesStorage[sponsorTimesStorage.length - 1] != undefined && sponsorTimesStorage[sponsorTimesStorage.length - 1].length < 2) { - startTimeChosen = true; - SB.sponsorStart.innerHTML = "Sponsorship Ends Now"; + + function infoFound(request) { + if(chrome.runtime.lastError) { + //This page doesn't have the injected content script, or at least not yet + displayNoVideo(); + return; + } + + //if request is undefined, then the page currently being browsed is not YouTube + if (request != undefined) { + //this must be a YouTube video + //set letiable + isYouTubeTab = true; + + //remove loading text + document.getElementById("mainControls").style.display = "unset" + document.getElementById("loadingIndicator").innerHTML = ""; + + if (request.found) { + document.getElementById("videoFound").innerHTML = "This video's sponsors are in the database!" + + displayDownloadedSponsorTimes(request); + } else { + document.getElementById("videoFound").innerHTML = "No sponsors found" } - - sponsorTimes = sponsorTimesStorage; - - displaySponsorTimes(); - - //show submission section - document.getElementById("submissionSection").style.display = "unset"; - - showSubmitTimesIfNecessary(); } - }); - - //check if this video's sponsors are known - chrome.tabs.sendMessage( - tabs[0].id, - {message: 'isInfoFound'}, - infoFound - ); -} - -function infoFound(request) { - if(chrome.runtime.lastError) { - //This page doesn't have the injected content script, or at least not yet - displayNoVideo(); - return; } - - //if request is undefined, then the page currently being browsed is not YouTube - if (request != undefined) { - //this must be a YouTube video - //set variable - isYouTubeTab = true; - - //remove loading text - document.getElementById("mainControls").style.display = "unset" - document.getElementById("loadingIndicator").innerHTML = ""; - - if (request.found) { - document.getElementById("videoFound").innerHTML = "This video's sponsors are in the database!" - - displayDownloadedSponsorTimes(request); - } else { - document.getElementById("videoFound").innerHTML = "No sponsors found" + + function setVideoID(request) { + //if request is undefined, then the page currently being browsed is not YouTube + if (request != undefined) { + videoID = request.videoID; } } -} - -function setVideoID(request) { - //if request is undefined, then the page currently being browsed is not YouTube - if (request != undefined) { - videoID = request.videoID; - } -} - -function sendSponsorStartMessage() { - //the content script will get the message if a YouTube page is open - chrome.tabs.query({ - active: true, - currentWindow: true - }, tabs => { - chrome.tabs.sendMessage( - tabs[0].id, - {from: 'popup', message: 'sponsorStart'}, - startSponsorCallback - ); - }); -} - -function startSponsorCallback(response) { - let sponsorTimesIndex = sponsorTimes.length - (startTimeChosen ? 1 : 0); - - if (sponsorTimes[sponsorTimesIndex] == undefined) { - sponsorTimes[sponsorTimesIndex] = []; + + function sendSponsorStartMessage() { + //the content script will get the message if a YouTube page is open + chrome.tabs.query({ + active: true, + currentWindow: true + }, tabs => { + chrome.tabs.sendMessage( + tabs[0].id, + {from: 'popup', message: 'sponsorStart'}, + startSponsorCallback + ); + }); } - - sponsorTimes[sponsorTimesIndex][startTimeChosen ? 1 : 0] = response.time; - - let sponsorTimeKey = "sponsorTimes" + currentVideoID; - chrome.storage.sync.set({[sponsorTimeKey]: sponsorTimes}); - - updateStartTimeChosen(); - - //display video times on screen - displaySponsorTimes(); - - //show submission section - document.getElementById("submissionSection").style.display = "unset"; - - showSubmitTimesIfNecessary(); -} - -//display the video times from the array -function displaySponsorTimes() { - //set it to the message - let sponsorMessageTimes = document.getElementById("sponsorMessageTimes"); - - //remove all children - while (sponsorMessageTimes.firstChild) { - sponsorMessageTimes.removeChild(sponsorMessageTimes.firstChild); + + function startSponsorCallback(response) { + let sponsorTimesIndex = sponsorTimes.length - (startTimeChosen ? 1 : 0); + + if (sponsorTimes[sponsorTimesIndex] == undefined) { + sponsorTimes[sponsorTimesIndex] = []; + } + + sponsorTimes[sponsorTimesIndex][startTimeChosen ? 1 : 0] = response.time; + + let sponsorTimeKey = "sponsorTimes" + currentVideoID; + chrome.storage.sync.set({[sponsorTimeKey]: sponsorTimes}); + + updateStartTimeChosen(); + + //display video times on screen + displaySponsorTimes(); + + //show submission section + document.getElementById("submissionSection").style.display = "unset"; + + showSubmitTimesIfNecessary(); } - - //add sponsor times - sponsorMessageTimes.appendChild(getSponsorTimesMessageDiv(sponsorTimes)); -} - -//display the video times from the array at the top, in a different section -function displayDownloadedSponsorTimes(request) { - if (request.sponsorTimes != undefined) { + + //display the video times from the array + function displaySponsorTimes() { //set it to the message - document.getElementById("downloadedSponsorMessageTimes").innerHTML = getSponsorTimesMessage(request.sponsorTimes); - - //add them as buttons to the issue reporting container - let container = document.getElementById("issueReporterTimeButtons"); - for (let i = 0; i < request.sponsorTimes.length; i++) { - let sponsorTimeButton = document.createElement("button"); - sponsorTimeButton.className = "warningButton"; - sponsorTimeButton.innerText = getFormattedTime(request.sponsorTimes[i][0]) + " to " + getFormattedTime(request.sponsorTimes[i][1]); - - let votingButtons = document.createElement("div"); - - let UUID = request.UUIDs[i]; - - //thumbs up and down buttons - let voteButtonsContainer = document.createElement("div"); - voteButtonsContainer.id = "sponsorTimesVoteButtonsContainer" + UUID; - voteButtonsContainer.setAttribute("align", "center"); - voteButtonsContainer.style.display = "none" - - let upvoteButton = document.createElement("img"); - upvoteButton.id = "sponsorTimesUpvoteButtonsContainer" + UUID; - upvoteButton.className = "voteButton"; - upvoteButton.src = chrome.extension.getURL("icons/upvote.png"); - upvoteButton.addEventListener("click", () => vote(1, UUID)); - - let downvoteButton = document.createElement("img"); - downvoteButton.id = "sponsorTimesDownvoteButtonsContainer" + UUID; - downvoteButton.className = "voteButton"; - downvoteButton.src = chrome.extension.getURL("icons/downvote.png"); - downvoteButton.addEventListener("click", () => vote(0, UUID)); - - //add thumbs up and down buttons to the container - voteButtonsContainer.appendChild(document.createElement("br")); - voteButtonsContainer.appendChild(document.createElement("br")); - voteButtonsContainer.appendChild(upvoteButton); - voteButtonsContainer.appendChild(downvoteButton); - - //add click listener to open up vote panel - sponsorTimeButton.addEventListener("click", function() { - voteButtonsContainer.style.display = "unset"; - }); - - container.appendChild(sponsorTimeButton); - container.appendChild(voteButtonsContainer); - - //if it is not the last iteration - if (i != request.sponsorTimes.length - 1) { - container.appendChild(document.createElement("br")); - container.appendChild(document.createElement("br")); + let sponsorMessageTimes = document.getElementById("sponsorMessageTimes"); + + //remove all children + while (sponsorMessageTimes.firstChild) { + sponsorMessageTimes.removeChild(sponsorMessageTimes.firstChild); + } + + //add sponsor times + sponsorMessageTimes.appendChild(getSponsorTimesMessageDiv(sponsorTimes)); + } + + //display the video times from the array at the top, in a different section + function displayDownloadedSponsorTimes(request) { + if (request.sponsorTimes != undefined) { + //set it to the message + document.getElementById("downloadedSponsorMessageTimes").innerHTML = getSponsorTimesMessage(request.sponsorTimes); + + //add them as buttons to the issue reporting container + let container = document.getElementById("issueReporterTimeButtons"); + for (let i = 0; i < request.sponsorTimes.length; i++) { + let sponsorTimeButton = document.createElement("button"); + sponsorTimeButton.className = "warningButton popupElement"; + sponsorTimeButton.innerText = getFormattedTime(request.sponsorTimes[i][0]) + " to " + getFormattedTime(request.sponsorTimes[i][1]); + + let votingButtons = document.createElement("div"); + + let UUID = request.UUIDs[i]; + + //thumbs up and down buttons + let voteButtonsContainer = document.createElement("div"); + voteButtonsContainer.id = "sponsorTimesVoteButtonsContainer" + UUID; + voteButtonsContainer.setAttribute("align", "center"); + voteButtonsContainer.style.display = "none" + + let upvoteButton = document.createElement("img"); + upvoteButton.id = "sponsorTimesUpvoteButtonsContainer" + UUID; + upvoteButton.className = "voteButton popupElement"; + upvoteButton.src = chrome.extension.getURL("icons/upvote.png"); + upvoteButton.addEventListener("click", () => vote(1, UUID)); + + let downvoteButton = document.createElement("img"); + downvoteButton.id = "sponsorTimesDownvoteButtonsContainer" + UUID; + downvoteButton.className = "voteButton popupElement"; + downvoteButton.src = chrome.extension.getURL("icons/downvote.png"); + downvoteButton.addEventListener("click", () => vote(0, UUID)); + + //add thumbs up and down buttons to the container + voteButtonsContainer.appendChild(document.createElement("br")); + voteButtonsContainer.appendChild(document.createElement("br")); + voteButtonsContainer.appendChild(upvoteButton); + voteButtonsContainer.appendChild(downvoteButton); + + //add click listener to open up vote panel + sponsorTimeButton.addEventListener("click", function() { + voteButtonsContainer.style.display = "unset"; + }); + + container.appendChild(sponsorTimeButton); + container.appendChild(voteButtonsContainer); + + //if it is not the last iteration + if (i != request.sponsorTimes.length - 1) { + container.appendChild(document.createElement("br")); + container.appendChild(document.createElement("br")); + } } } } -} - -//get the message that visually displays the video times -function getSponsorTimesMessage(sponsorTimes) { - let sponsorTimesMessage = ""; - - for (let i = 0; i < sponsorTimes.length; i++) { - for (let s = 0; s < sponsorTimes[i].length; s++) { - let timeMessage = getFormattedTime(sponsorTimes[i][s]); - //if this is an end time - if (s == 1) { - timeMessage = " to " + timeMessage; - } else if (i > 0) { - //add commas if necessary - timeMessage = ", " + timeMessage; + + //get the message that visually displays the video times + function getSponsorTimesMessage(sponsorTimes) { + let sponsorTimesMessage = ""; + + for (let i = 0; i < sponsorTimes.length; i++) { + for (let s = 0; s < sponsorTimes[i].length; s++) { + let timeMessage = getFormattedTime(sponsorTimes[i][s]); + //if this is an end time + if (s == 1) { + timeMessage = " to " + timeMessage; + } else if (i > 0) { + //add commas if necessary + timeMessage = ", " + timeMessage; + } + + sponsorTimesMessage += timeMessage; } - - sponsorTimesMessage += timeMessage; } + + return sponsorTimesMessage; } - - return sponsorTimesMessage; -} - -//get the message that visually displays the video times -//this version is a div that contains each with delete buttons -function getSponsorTimesMessageDiv(sponsorTimes) { - // let sponsorTimesMessage = ""; - let sponsorTimesContainer = document.createElement("div"); - sponsorTimesContainer.id = "sponsorTimesContainer"; - - for (let i = 0; i < sponsorTimes.length; i++) { - let currentSponsorTimeContainer = document.createElement("div"); - currentSponsorTimeContainer.id = "sponsorTimeContainer" + i; - currentSponsorTimeContainer.className = "sponsorTime"; - let currentSponsorTimeMessage = ""; - - let deleteButton = document.createElement("span"); - deleteButton.id = "sponsorTimeDeleteButton" + i; - deleteButton.innerText = "Delete"; - deleteButton.className = "mediumLink"; - let index = i; - deleteButton.addEventListener("click", () => deleteSponsorTime(index)); - - let spacer = document.createElement("span"); - spacer.innerText = " "; - - let editButton = document.createElement("span"); - editButton.id = "sponsorTimeEditButton" + i; - editButton.innerText = "Edit"; - editButton.className = "mediumLink"; - editButton.addEventListener("click", () => editSponsorTime(index)); - - for (let s = 0; s < sponsorTimes[i].length; s++) { - let timeMessage = getFormattedTime(sponsorTimes[i][s]); - //if this is an end time - if (s == 1) { - timeMessage = " to " + timeMessage; - } else if (i > 0) { - //add commas if necessary - timeMessage = timeMessage; + + //get the message that visually displays the video times + //this version is a div that contains each with delete buttons + function getSponsorTimesMessageDiv(sponsorTimes) { + // let sponsorTimesMessage = ""; + let sponsorTimesContainer = document.createElement("div"); + sponsorTimesContainer.id = "sponsorTimesContainer"; + + for (let i = 0; i < sponsorTimes.length; i++) { + let currentSponsorTimeContainer = document.createElement("div"); + currentSponsorTimeContainer.id = "sponsorTimeContainer" + i; + currentSponsorTimeContainer.className = "sponsorTime popupElement"; + let currentSponsorTimeMessage = ""; + + let deleteButton = document.createElement("span"); + deleteButton.id = "sponsorTimeDeleteButton" + i; + deleteButton.innerText = "Delete"; + deleteButton.className = "mediumLink popupElement"; + let index = i; + deleteButton.addEventListener("click", () => deleteSponsorTime(index)); + + let spacer = document.createElement("span"); + spacer.innerText = " "; + + let editButton = document.createElement("span"); + editButton.id = "sponsorTimeEditButton" + i; + editButton.innerText = "Edit"; + editButton.className = "mediumLink popupElement"; + editButton.addEventListener("click", () => editSponsorTime(index)); + + for (let s = 0; s < sponsorTimes[i].length; s++) { + let timeMessage = getFormattedTime(sponsorTimes[i][s]); + //if this is an end time + if (s == 1) { + timeMessage = " to " + timeMessage; + } else if (i > 0) { + //add commas if necessary + timeMessage = timeMessage; + } + + currentSponsorTimeMessage += timeMessage; + } + + currentSponsorTimeContainer.innerText = currentSponsorTimeMessage; + currentSponsorTimeContainer.addEventListener("click", () => editSponsorTime(index)); + + sponsorTimesContainer.appendChild(currentSponsorTimeContainer); + sponsorTimesContainer.appendChild(deleteButton); + + //only if it is a complete sponsor time + if (sponsorTimes[i].length > 1) { + sponsorTimesContainer.appendChild(editButton); } - - currentSponsorTimeMessage += timeMessage; } - - currentSponsorTimeContainer.innerText = currentSponsorTimeMessage; - currentSponsorTimeContainer.addEventListener("click", () => editSponsorTime(index)); - - sponsorTimesContainer.appendChild(currentSponsorTimeContainer); - sponsorTimesContainer.appendChild(deleteButton); - - //only if it is a complete sponsor time - if (sponsorTimes[i].length > 1) { - sponsorTimesContainer.appendChild(editButton); + + return sponsorTimesContainer; + } + + function editSponsorTime(index) { + if (document.getElementById("startTimeMinutes" + index) != null) { + //already open + return; } + + let sponsorTimeContainer = document.getElementById("sponsorTimeContainer" + index); + + //get sponsor time minutes and seconds boxes + let startTimeMinutes = document.createElement("input"); + startTimeMinutes.id = "startTimeMinutes" + index; + startTimeMinutes.className = "sponsorTime popupElement"; + startTimeMinutes.type = "text"; + startTimeMinutes.value = getTimeInMinutes(sponsorTimes[index][0]); + startTimeMinutes.style.width = "45px"; + + let startTimeSeconds = document.createElement("input"); + startTimeSeconds.id = "startTimeSeconds" + index; + startTimeSeconds.className = "sponsorTime popupElement"; + startTimeSeconds.type = "text"; + startTimeSeconds.value = getTimeInFormattedSeconds(sponsorTimes[index][0]); + startTimeSeconds.style.width = "60px"; + + let endTimeMinutes = document.createElement("input"); + endTimeMinutes.id = "endTimeMinutes" + index; + endTimeMinutes.className = "sponsorTime popupElement"; + endTimeMinutes.type = "text"; + endTimeMinutes.value = getTimeInMinutes(sponsorTimes[index][1]); + endTimeMinutes.style.width = "45px"; + + let endTimeSeconds = document.createElement("input"); + endTimeSeconds.id = "endTimeSeconds" + index; + endTimeSeconds.className = "sponsorTime popupElement"; + endTimeSeconds.type = "text"; + endTimeSeconds.value = getTimeInFormattedSeconds(sponsorTimes[index][1]); + endTimeSeconds.style.width = "60px"; + + let colonText = document.createElement("span"); + colonText.innerText = ":"; + + let toText = document.createElement("span"); + toText.innerText = " to "; + + //remove all children to replace + while (sponsorTimeContainer.firstChild) { + sponsorTimeContainer.removeChild(sponsorTimeContainer.firstChild); + } + + sponsorTimeContainer.appendChild(startTimeMinutes); + sponsorTimeContainer.appendChild(colonText); + sponsorTimeContainer.appendChild(startTimeSeconds); + sponsorTimeContainer.appendChild(toText); + sponsorTimeContainer.appendChild(endTimeMinutes); + sponsorTimeContainer.appendChild(colonText); + sponsorTimeContainer.appendChild(endTimeSeconds); + + //add save button and remove edit button + let saveButton = document.createElement("span"); + saveButton.id = "sponsorTimeSaveButton" + index; + saveButton.innerText = "Save"; + saveButton.className = "mediumLink popupElement"; + saveButton.addEventListener("click", () => saveSponsorTimeEdit(index)); + + let editButton = document.getElementById("sponsorTimeEditButton" + index); + let sponsorTimesContainer = document.getElementById("sponsorTimesContainer"); + + editButton.remove(); + sponsorTimesContainer.appendChild(saveButton); } - - return sponsorTimesContainer; -} - -function editSponsorTime(index) { - if (document.getElementById("startTimeMinutes" + index) != null) { - //already open - return; + + function saveSponsorTimeEdit(index) { + let startTimeMinutes = document.getElementById("startTimeMinutes" + index); + let startTimeSeconds = document.getElementById("startTimeSeconds" + index); + + let endTimeMinutes = document.getElementById("endTimeMinutes" + index); + let endTimeSeconds = document.getElementById("endTimeSeconds" + index); + + sponsorTimes[index][0] = parseInt(startTimeMinutes.value) * 60 + parseFloat(startTimeSeconds.value); + sponsorTimes[index][1] = parseInt(endTimeMinutes.value) * 60 + parseFloat(endTimeSeconds.value); + + //save this + let sponsorTimeKey = "sponsorTimes" + currentVideoID; + chrome.storage.sync.set({[sponsorTimeKey]: sponsorTimes}); + + displaySponsorTimes(); } - - let sponsorTimeContainer = document.getElementById("sponsorTimeContainer" + index); - - //get sponsor time minutes and seconds boxes - let startTimeMinutes = document.createElement("input"); - startTimeMinutes.id = "startTimeMinutes" + index; - startTimeMinutes.className = "sponsorTime"; - startTimeMinutes.type = "text"; - startTimeMinutes.value = getTimeInMinutes(sponsorTimes[index][0]); - startTimeMinutes.style.width = "45"; - - let startTimeSeconds = document.createElement("input"); - startTimeSeconds.id = "startTimeSeconds" + index; - startTimeSeconds.className = "sponsorTime"; - startTimeSeconds.type = "text"; - startTimeSeconds.value = getTimeInFormattedSeconds(sponsorTimes[index][0]); - startTimeSeconds.style.width = "60"; - - let endTimeMinutes = document.createElement("input"); - endTimeMinutes.id = "endTimeMinutes" + index; - endTimeMinutes.className = "sponsorTime"; - endTimeMinutes.type = "text"; - endTimeMinutes.value = getTimeInMinutes(sponsorTimes[index][1]); - endTimeMinutes.style.width = "45"; - - let endTimeSeconds = document.createElement("input"); - endTimeSeconds.id = "endTimeSeconds" + index; - endTimeSeconds.className = "sponsorTime"; - endTimeSeconds.type = "text"; - endTimeSeconds.value = getTimeInFormattedSeconds(sponsorTimes[index][1]); - endTimeSeconds.style.width = "60"; - - let colonText = document.createElement("span"); - colonText.innerText = ":"; - - let toText = document.createElement("span"); - toText.innerText = " to "; - - //remove all children to replace - while (sponsorTimeContainer.firstChild) { - sponsorTimeContainer.removeChild(sponsorTimeContainer.firstChild); + + //deletes the sponsor time submitted at an index + function deleteSponsorTime(index) { + //if it is not a complete sponsor time + if (sponsorTimes[index].length < 2) { + chrome.tabs.query({ + active: true, + currentWindow: true + }, function(tabs) { + chrome.tabs.sendMessage(tabs[0].id, { + message: "changeStartSponsorButton", + showStartSponsor: true, + uploadButtonVisible: false + }); + }); + + resetStartTimeChosen(); + } + + sponsorTimes.splice(index, 1); + + //save this + let sponsorTimeKey = "sponsorTimes" + currentVideoID; + chrome.storage.sync.set({[sponsorTimeKey]: sponsorTimes}); + + //update display + displaySponsorTimes(); + + //if they are all removed + if (sponsorTimes.length == 0) { + //update chrome tab + chrome.tabs.query({ + active: true, + currentWindow: true + }, function(tabs) { + chrome.tabs.sendMessage(tabs[0].id, { + message: "changeStartSponsorButton", + showStartSponsor: true, + uploadButtonVisible: false + }); + }); + + //hide submission section + document.getElementById("submissionSection").style.display = "none"; + } } - - sponsorTimeContainer.appendChild(startTimeMinutes); - sponsorTimeContainer.appendChild(colonText); - sponsorTimeContainer.appendChild(startTimeSeconds); - sponsorTimeContainer.appendChild(toText); - sponsorTimeContainer.appendChild(endTimeMinutes); - sponsorTimeContainer.appendChild(colonText); - sponsorTimeContainer.appendChild(endTimeSeconds); - - //add save button and remove edit button - let saveButton = document.createElement("span"); - saveButton.id = "sponsorTimeSaveButton" + index; - saveButton.innerText = "Save"; - saveButton.className = "mediumLink"; - saveButton.addEventListener("click", () => saveSponsorTimeEdit(index)); - - let editButton = document.getElementById("sponsorTimeEditButton" + index); - let sponsorTimesContainer = document.getElementById("sponsorTimesContainer"); - - sponsorTimesContainer.removeChild(editButton); - sponsorTimesContainer.appendChild(saveButton); -} - -function saveSponsorTimeEdit(index) { - let startTimeMinutes = document.getElementById("startTimeMinutes" + index); - let startTimeSeconds = document.getElementById("startTimeSeconds" + index); - - let endTimeMinutes = document.getElementById("endTimeMinutes" + index); - let endTimeSeconds = document.getElementById("endTimeSeconds" + index); - - sponsorTimes[index][0] = parseInt(startTimeMinutes.value) * 60 + parseFloat(startTimeSeconds.value); - sponsorTimes[index][1] = parseInt(endTimeMinutes.value) * 60 + parseFloat(endTimeSeconds.value); - - //save this - let sponsorTimeKey = "sponsorTimes" + currentVideoID; - chrome.storage.sync.set({[sponsorTimeKey]: sponsorTimes}); - - displaySponsorTimes(); -} - -//deletes the sponsor time submitted at an index -function deleteSponsorTime(index) { - //if it is not a complete sponsor time - if (sponsorTimes[index].length < 2) { + + function clearTimes() { + //send new sponsor time state to tab + if (sponsorTimes.length > 0) { + chrome.tabs.query({ + active: true, + currentWindow: true + }, function(tabs) { + chrome.tabs.sendMessage(tabs[0].id, { + message: "changeStartSponsorButton", + showStartSponsor: true, + uploadButtonVisible: false + }); + }); + } + + //reset sponsorTimes + sponsorTimes = []; + + let sponsorTimeKey = "sponsorTimes" + currentVideoID; + chrome.storage.sync.set({[sponsorTimeKey]: sponsorTimes}); + + displaySponsorTimes(); + + //hide submission section + document.getElementById("submissionSection").style.display = "none"; + + resetStartTimeChosen(); + } + + function submitTimes() { + //make info message say loading + document.getElementById("submitTimesInfoMessage").innerText = "Loading..."; + document.getElementById("submitTimesInfoMessageContainer").style.display = "unset"; + + if (sponsorTimes.length > 0) { + chrome.runtime.sendMessage({ + message: "submitTimes", + videoID: currentVideoID + }, function(response) { + if (response != undefined) { + if (response.statusCode == 200) { + //hide loading message + document.getElementById("submitTimesInfoMessageContainer").style.display = "none"; + + clearTimes(); + } else if(response.statusCode == 400) { + document.getElementById("submitTimesInfoMessage").innerText = "Server said this request was invalid"; + document.getElementById("submitTimesInfoMessageContainer").style.display = "unset"; + } else if(response.statusCode == 429) { + document.getElementById("submitTimesInfoMessage").innerText = "You have submitted too many sponsor times for this one video, are you sure there are this many?"; + document.getElementById("submitTimesInfoMessageContainer").style.display = "unset"; + } else if(response.statusCode == 409) { + document.getElementById("submitTimesInfoMessage").innerText = "This has already been submitted before"; + 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 { + 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"; + } + } + }); + } + } + + function showNoticeAgain() { + chrome.storage.sync.set({"dontShowNoticeAgain": false}); + chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) { chrome.tabs.sendMessage(tabs[0].id, { - message: "changeStartSponsorButton", - showStartSponsor: true, - uploadButtonVisible: false + message: "showNoticeAgain" }); }); - - resetStartTimeChosen(); + + SB.showNoticeAgain.style.display = "none"; } - - sponsorTimes.splice(index, 1); - - //save this - let sponsorTimeKey = "sponsorTimes" + currentVideoID; - chrome.storage.sync.set({[sponsorTimeKey]: sponsorTimes}); - - //update display - displaySponsorTimes(); - - //if they are all removed - if (sponsorTimes.length == 0) { - //update chrome tab + + function hideVideoPlayerControls() { + chrome.storage.sync.set({"hideVideoPlayerControls": true}); + chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) { chrome.tabs.sendMessage(tabs[0].id, { - message: "changeStartSponsorButton", - showStartSponsor: true, - uploadButtonVisible: false + message: "changeVideoPlayerControlsVisibility", + value: true }); }); - - //hide submission section - document.getElementById("submissionSection").style.display = "none"; + + SB.hideVideoPlayerControls.style.display = "none"; + SB.showVideoPlayerControls.style.display = "unset"; } -} - -function clearTimes() { - //send new sponsor time state to tab - if (sponsorTimes.length > 0) { + + function showVideoPlayerControls() { + chrome.storage.sync.set({"hideVideoPlayerControls": false}); + chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) { chrome.tabs.sendMessage(tabs[0].id, { - message: "changeStartSponsorButton", - showStartSponsor: true, - uploadButtonVisible: false + message: "changeVideoPlayerControlsVisibility", + value: false }); }); + + SB.hideVideoPlayerControls.style.display = "unset"; + SB.showVideoPlayerControls.style.display = "none"; } - - //reset sponsorTimes - sponsorTimes = []; - - let sponsorTimeKey = "sponsorTimes" + currentVideoID; - chrome.storage.sync.set({[sponsorTimeKey]: sponsorTimes}); - - displaySponsorTimes(); - - //hide submission section - document.getElementById("submissionSection").style.display = "none"; - - resetStartTimeChosen(); -} - -function submitTimes() { - //make info message say loading - document.getElementById("submitTimesInfoMessage").innerText = "Loading..."; - document.getElementById("submitTimesInfoMessageContainer").style.display = "unset"; - - if (sponsorTimes.length > 0) { - chrome.runtime.sendMessage({ - message: "submitTimes", - videoID: currentVideoID - }, function(response) { - if (response != undefined) { - if (response.statusCode == 200) { - //hide loading message - document.getElementById("submitTimesInfoMessageContainer").style.display = "none"; - - clearTimes(); - } else if(response.statusCode == 400) { - document.getElementById("submitTimesInfoMessage").innerText = "Server said this request was invalid"; - document.getElementById("submitTimesInfoMessageContainer").style.display = "unset"; - } else if(response.statusCode == 429) { - document.getElementById("submitTimesInfoMessage").innerText = "You have submitted too many sponsor times for this one video, are you sure there are this many?"; - document.getElementById("submitTimesInfoMessageContainer").style.display = "unset"; - } else if(response.statusCode == 409) { - document.getElementById("submitTimesInfoMessage").innerText = "This has already been submitted before"; - 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 { - 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"; - } - } + + 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 showNoticeAgain() { - chrome.storage.sync.set({"dontShowNoticeAgain": false}); - - chrome.tabs.query({ - active: true, - currentWindow: true - }, function(tabs) { - chrome.tabs.sendMessage(tabs[0].id, { - message: "showNoticeAgain" - }); - }); - - SB.showNoticeAgain.style.display = "none"; -} - -function hideVideoPlayerControls() { - chrome.storage.sync.set({"hideVideoPlayerControls": true}); - - chrome.tabs.query({ - active: true, - currentWindow: true - }, function(tabs) { - chrome.tabs.sendMessage(tabs[0].id, { - message: "changeVideoPlayerControlsVisibility", - value: true - }); - }); - - SB.hideVideoPlayerControls.style.display = "none"; - SB.showVideoPlayerControls.style.display = "unset"; -} - -function showVideoPlayerControls() { - chrome.storage.sync.set({"hideVideoPlayerControls": false}); - - chrome.tabs.query({ - active: true, - currentWindow: true - }, function(tabs) { - chrome.tabs.sendMessage(tabs[0].id, { - message: "changeVideoPlayerControlsVisibility", - value: false - }); - }); - - SB.hideVideoPlayerControls.style.display = "unset"; - 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 + + 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.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 = "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() { - chrome.storage.sync.set({"trackViewCount": false}); - - chrome.tabs.query({ - active: true, - currentWindow: true - }, function(tabs) { - chrome.tabs.sendMessage(tabs[0].id, { - message: "trackViewCount", - value: false + + SB.hideDeleteButtonPlayerControls.style.display = "unset"; + SB.showDeleteButtonPlayerControls.style.display = "none"; + } + + function disableSponsorViewTracking() { + chrome.storage.sync.set({"trackViewCount": false}); + + chrome.tabs.query({ + active: true, + currentWindow: true + }, function(tabs) { + chrome.tabs.sendMessage(tabs[0].id, { + message: "trackViewCount", + value: false + }); }); - }); - - SB.disableSponsorViewTracking.style.display = "none"; - SB.enableSponsorViewTracking.style.display = "unset"; -} - -function enableSponsorViewTracking() { - chrome.storage.sync.set({"trackViewCount": true}); - - chrome.tabs.query({ - active: true, - currentWindow: true - }, function(tabs) { - chrome.tabs.sendMessage(tabs[0].id, { - message: "trackViewCount", - value: true + + SB.disableSponsorViewTracking.style.display = "none"; + SB.enableSponsorViewTracking.style.display = "unset"; + } + + function enableSponsorViewTracking() { + chrome.storage.sync.set({"trackViewCount": true}); + + chrome.tabs.query({ + active: true, + currentWindow: true + }, function(tabs) { + chrome.tabs.sendMessage(tabs[0].id, { + message: "trackViewCount", + value: true + }); }); - }); - - SB.enableSponsorViewTracking.style.display = "none"; - SB.disableSponsorViewTracking.style.display = "unset"; -} - -function updateStartTimeChosen() { - //update startTimeChosen variable - if (!startTimeChosen) { - startTimeChosen = true; - SB.sponsorStart.innerHTML = "Sponsorship Ends Now"; - } else { - resetStartTimeChosen(); + + SB.enableSponsorViewTracking.style.display = "none"; + SB.disableSponsorViewTracking.style.display = "unset"; } -} - -//set it to false -function resetStartTimeChosen() { - startTimeChosen = false; - SB.sponsorStart.innerHTML = "Sponsorship Starts Now"; -} - -//hides and shows the submit times button when needed -function showSubmitTimesIfNecessary() { - //check if an end time has been specified for the latest sponsor time - if (sponsorTimes.length > 0 && sponsorTimes[sponsorTimes.length - 1].length > 1) { - //show submit times button - document.getElementById("submitTimesContainer").style.display = "unset"; - } else { - //hide submit times button - document.getElementById("submitTimesContainer").style.display = "none"; + + function updateStartTimeChosen() { + //update startTimeChosen letiable + if (!startTimeChosen) { + startTimeChosen = true; + SB.sponsorStart.innerHTML = "Sponsorship Ends Now"; + } else { + resetStartTimeChosen(); + } } -} - -//make the options div visisble -function openOptions() { - document.getElementById("optionsButtonContainer").style.display = "none"; - document.getElementById("options").style.display = "unset"; -} - -//this is not a YouTube video page -function displayNoVideo() { - document.getElementById("loadingIndicator").innerHTML = "This probably isn't a YouTube tab, or you clicked too early. " + - "If you know this is a YouTube tab, close this popup and open it again."; -} - -function reportAnIssue() { - document.getElementById("issueReporterContainer").style.display = "unset"; - SB.reportAnIssue.style.display = "none"; -} - -function addVoteMessage(message, UUID) { - let container = document.getElementById("sponsorTimesVoteButtonsContainer" + UUID); - //remove all children - while (container.firstChild) { - container.removeChild(container.firstChild); + + //set it to false + function resetStartTimeChosen() { + startTimeChosen = false; + SB.sponsorStart.innerHTML = "Sponsorship Starts Now"; } - - let thanksForVotingText = document.createElement("h2"); - thanksForVotingText.innerText = message; - //there are already breaks there - thanksForVotingText.style.marginBottom = "0px"; - - container.appendChild(thanksForVotingText); -} - -function vote(type, UUID) { - //add loading info - addVoteMessage("Loading...", UUID) - - //send the vote message to the tab - chrome.runtime.sendMessage({ - message: "submitVote", - type: type, - UUID: UUID - }, function(response) { - if (response != undefined) { - //see if it was a success or failure - if (response.successType == 1) { - //success - addVoteMessage("Thanks for voting!", UUID) - } else if (response.successType == 0) { - //failure: duplicate vote - addVoteMessage("You have already voted this way before.", UUID) - } else if (response.successType == -1) { - if (response.statusCode == 502) { - 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) + + //hides and shows the submit times button when needed + function showSubmitTimesIfNecessary() { + //check if an end time has been specified for the latest sponsor time + if (sponsorTimes.length > 0 && sponsorTimes[sponsorTimes.length - 1].length > 1) { + //show submit times button + document.getElementById("submitTimesContainer").style.display = "unset"; + } else { + //hide submit times button + document.getElementById("submitTimesContainer").style.display = "none"; + } + } + + //make the options div visisble + function openOptions() { + document.getElementById("optionsButtonContainer").style.display = "none"; + document.getElementById("options").style.display = "unset"; + } + + //this is not a YouTube video page + function displayNoVideo() { + document.getElementById("loadingIndicator").innerHTML = "This probably isn't a YouTube tab, or you clicked too early. " + + "If you know this is a YouTube tab, close this popup and open it again."; + } + + function reportAnIssue() { + document.getElementById("issueReporterContainer").style.display = "unset"; + SB.reportAnIssue.style.display = "none"; + } + + function addVoteMessage(message, UUID) { + let container = document.getElementById("sponsorTimesVoteButtonsContainer" + UUID); + //remove all children + while (container.firstChild) { + container.removeChild(container.firstChild); + } + + let thanksForVotingText = document.createElement("h2"); + thanksForVotingText.innerText = message; + //there are already breaks there + thanksForVotingText.style.marginBottom = "0px"; + + container.appendChild(thanksForVotingText); + } + + function vote(type, UUID) { + //add loading info + addVoteMessage("Loading...", UUID) + + //send the vote message to the tab + chrome.runtime.sendMessage({ + message: "submitVote", + type: type, + UUID: UUID + }, function(response) { + if (response != undefined) { + //see if it was a success or failure + if (response.successType == 1) { + //success + addVoteMessage("Thanks for voting!", UUID) + } else if (response.successType == 0) { + //failure: duplicate vote + addVoteMessage("You have already voted this way before.", UUID) + } else if (response.successType == -1) { + if (response.statusCode == 502) { + 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) + } } } + }); + } + + function hideDiscordButton() { + chrome.storage.sync.set({"hideDiscordLink": false}); + + SB.discordButtonContainer.style.display = "none"; + } + + //converts time in seconds to minutes:seconds + function getFormattedTime(seconds) { + let minutes = Math.floor(seconds / 60); + let secondsDisplay = Math.round(seconds - minutes * 60); + if (secondsDisplay < 10) { + //add a zero + secondsDisplay = "0" + secondsDisplay; } - }); -} - -function hideDiscordButton() { - chrome.storage.sync.set({"hideDiscordLink": false}); - - SB.discordButtonContainer.style.display = "none"; -} - -//converts time in seconds to minutes:seconds -function getFormattedTime(seconds) { - let minutes = Math.floor(seconds / 60); - let secondsDisplay = Math.round(seconds - minutes * 60); - if (secondsDisplay < 10) { - //add a zero - secondsDisplay = "0" + secondsDisplay; + + let formatted = minutes+ ":" + secondsDisplay; + + return formatted; } - - let formatted = minutes+ ":" + secondsDisplay; - - return formatted; -} - -//converts time in seconds to minutes -function getTimeInMinutes(seconds) { - let minutes = Math.floor(seconds / 60); - - return minutes; -} - -//converts time in seconds to seconds past the last minute -function getTimeInFormattedSeconds(seconds) { - let secondsFormatted = (seconds % 60).toFixed(3); - - if (secondsFormatted < 10) { - secondsFormatted = "0" + secondsFormatted; + + //converts time in seconds to minutes + function getTimeInMinutes(seconds) { + let minutes = Math.floor(seconds / 60); + + return minutes; } - - return secondsFormatted; -} - -function sendRequestToServer(type, address, callback) { - let xmlhttp = new XMLHttpRequest(); - - xmlhttp.open(type, serverAddress + address, true); - - if (callback != undefined) { - xmlhttp.onreadystatechange = function () { - callback(xmlhttp, false); - }; - xmlhttp.onerror = function(ev) { - callback(xmlhttp, true); - }; + //converts time in seconds to seconds past the last minute + function getTimeInFormattedSeconds(seconds) { + let secondsFormatted = (seconds % 60).toFixed(3); + + if (secondsFormatted < 10) { + secondsFormatted = "0" + secondsFormatted; + } + + return secondsFormatted; } - - //submit this request - xmlhttp.send(); + + function sendRequestToServer(type, address, callback) { + let xmlhttp = new XMLHttpRequest(); + + xmlhttp.open(type, serverAddress + address, true); + + if (callback != undefined) { + xmlhttp.onreadystatechange = function () { + callback(xmlhttp, false); + }; + + xmlhttp.onerror = function(ev) { + callback(xmlhttp, true); + }; + } + + //submit this request + xmlhttp.send(); + } + + function getYouTubeVideoID(url) { // Returns with video id else returns false + var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/; + var match = url.match(regExp); + var id = new URL(url).searchParams.get("v"); + return (match && match[7].length == 11) ? id : false; + } + +//end of function } -function getYouTubeVideoID(url) { // Returns with video id else returns false - var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/; - var match = url.match(regExp); - var id = new URL(url).searchParams.get("v"); - return (match && match[7].length == 11) ? id : false; +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(); } + |