From c6cd092c8709f0a39645b806b8ba6508744ec640 Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Fri, 12 Jul 2019 10:42:39 -0400 Subject: [PATCH] Added button on YouTube player and new icons to support that --- content.js | 43 +++++++++++++++---- icons/PlayerStartIconSponsorBlocker256px.png | Bin 0 -> 6225 bytes icons/PlayerStopIconSponsorBlocker256px.png | Bin 0 -> 7317 bytes manifest.json | 5 ++- 4 files changed, 38 insertions(+), 10 deletions(-) create mode 100644 icons/PlayerStartIconSponsorBlocker256px.png create mode 100644 icons/PlayerStopIconSponsorBlocker256px.png diff --git a/content.js b/content.js index a841acba..585255c8 100644 --- a/content.js +++ b/content.js @@ -124,6 +124,31 @@ function goBackToPreviousTime() { } } +//Adds a sponsorship starts button to the player controls +function addPlayerControlsButton(){ + let startSponsorButton = document.createElement("button"); + startSponsorButton.className = "ytp-button"; + startSponsorButton.setAttribute("title", "Sponsor Starts Now"); + startSponsorButton.addEventListener("click", console.log); + + let startSponsorImage = document.createElement("img"); + startSponsorImage.style.height = "60%"; + startSponsorImage.style.top = "0"; + startSponsorImage.style.bottom = "0"; + startSponsorImage.style.display = "block"; + startSponsorImage.style.margin = "auto"; + startSponsorImage.src = chrome.extension.getURL("icons/PlayerStartIconSponsorBlocker256px.png"); + + //add the image to the button + startSponsorButton.appendChild(startSponsorImage); + + let referenceNode = document.getElementsByClassName("ytp-right-controls")[0]; + + referenceNode.prepend(startSponsorButton); +} + +addPlayerControlsButton(); + //Opens the notice that tells the user that a sponsor was just skipped function openSkipNotice(){ if (dontShowNotice) { @@ -131,40 +156,40 @@ function openSkipNotice(){ return; } - var noticeElement = document.createElement("div"); + let noticeElement = document.createElement("div"); noticeElement.id = "sponsorSkipNotice"; noticeElement.className = "sponsorSkipObject"; - var logoElement = document.createElement("img"); + let logoElement = document.createElement("img"); logoElement.id = "sponsorSkipLogo"; logoElement.src = chrome.extension.getURL("icons/LogoSponsorBlocker256px.png"); - var noticeMessage = document.createElement("div"); + let noticeMessage = document.createElement("div"); noticeMessage.id = "sponsorSkipMessage"; noticeMessage.className = "sponsorSkipObject"; noticeMessage.innerText = "Hey, you just skipped a sponsor!"; - var noticeInfo = document.createElement("p"); + let noticeInfo = document.createElement("p"); noticeInfo.id = "sponsorSkipInfo"; noticeInfo.className = "sponsorSkipObject"; noticeInfo.innerText = "This message will disapear in 7 seconds"; - var buttonContainer = document.createElement("div"); + let buttonContainer = document.createElement("div"); buttonContainer.setAttribute("align", "center"); - var goBackButton = document.createElement("button"); + let goBackButton = document.createElement("button"); goBackButton.innerText = "Go back"; goBackButton.className = "sponsorSkipObject"; goBackButton.className = "sponsorSkipButton"; goBackButton.addEventListener("click", goBackToPreviousTime); - var hideButton = document.createElement("button"); + let hideButton = document.createElement("button"); hideButton.innerText = "Dismiss"; hideButton.className = "sponsorSkipObject"; hideButton.className = "sponsorSkipButton"; hideButton.addEventListener("click", closeSkipNotice); - var dontShowAgainButton = document.createElement("button"); + let dontShowAgainButton = document.createElement("button"); dontShowAgainButton.innerText = "Don't Show This Again"; dontShowAgainButton.className = "sponsorSkipObject"; dontShowAgainButton.className = "sponsorSkipDontShowButton"; @@ -181,7 +206,7 @@ function openSkipNotice(){ noticeElement.appendChild(noticeInfo); noticeElement.appendChild(buttonContainer); - var referenceNode = document.getElementById("info"); + let referenceNode = document.getElementById("info"); if (referenceNode == null) { //old YouTube referenceNode = document.getElementById("watch-header"); diff --git a/icons/PlayerStartIconSponsorBlocker256px.png b/icons/PlayerStartIconSponsorBlocker256px.png new file mode 100644 index 0000000000000000000000000000000000000000..3adff0a446a592095f102814361a63d3562c73b4 GIT binary patch literal 6225 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