From b1ce20cd5a877ab783a57caf935c1c7cf9161176 Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Tue, 13 Aug 2019 23:43:02 -0400 Subject: [PATCH] Added basic features for the new voting UI --- _locales/en/messages.json | 4 +- content.css | 79 ++++++++++++++++------ content.js | 135 ++++++++++++++++++++++++++++---------- icons/downvote.png | Bin 6513 -> 5251 bytes icons/upvote.png | Bin 6600 -> 5484 bytes 5 files changed, 163 insertions(+), 55 deletions(-) diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 7a3e9064..07a5d180 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -55,13 +55,13 @@ "message": "Seconds" }, "Hide": { - "message": "Don't Show This Again" + "message": "Never Show" }, "hitGoBack": { "message": "Hit go back to get to where you came from." }, "goBack": { - "message": "Go back" + "message": "Unskip" }, "confirmMSG": { "message": "\n\nTo edit or delete individual values, click the info button or open the extension popup by clicking the extension icon in the top right corner." diff --git a/content.css b/content.css index c05f2f16..b6d3ceb9 100644 --- a/content.css +++ b/content.css @@ -41,16 +41,16 @@ } .sponsorSkipObject { - font-family: 'Source Sans Pro', sans-serif; + font-family: 'Source Sans Pro', sans-serif; + + margin-left: 2px; + margin-right: 2px; } .sponsorSkipLogo { - height: 64px; - position: absolute; - top: 0; - bottom: 0; - margin: auto; - margin-left: 10px; + height: 18px; + + float: left; } @keyframes fadeIn { @@ -58,17 +58,24 @@ to { opacity: 1; } } +.sponsorBlockSpacer { + border-color: #999999; + background-color: #999999; +} + .sponsorSkipNotice { - min-height: 165px; - min-width: 400px; - background-color: rgba(255, 217, 217, 0.8); + min-width: 300px; + background-color: rgba(0, 0, 0, 0.8); position: absolute; - border: 3px solid rgba(0, 0, 0, 0.8); right: 0; - bottom: 90px; - zoom: 85%; + bottom: 100px; + right: 10px; + + border-radius: 10px; animation: fadeIn 0.5s; + + border-spacing: 7px 7px; } /* if two are very close to eachother */ @@ -78,13 +85,43 @@ transition: bottom 0.2s; } +.sponsorSkipNoticeUnskipSection { + float: left; + + border-left: 1px solid #eeeeee; +} + +.sponsorSkipNoticeRightSection { + right: 0; + position: absolute; + + float: right; +} + +.sponsorSkipNoticeCloseButton { + margin-left: 0px; + margin-right: 0px; + padding: 0px; +} + +.sponsorSkipNoticeButton { + background: none; + color: #ffffff; + border: none; + display: inline-block; + + cursor: pointer; + + margin-left: 10px; + margin-right: 10px; +} + .sponsorSkipMessage { - font-size: 18px; - color: #000000; - text-align: center; - margin-top: 10px; + font-size: 14px; font-weight: bold; - margin-top: 4px; + color: #ffffff; + + display: inline-block; } .sponsorSkipInfo { @@ -119,9 +156,11 @@ } .voteButton { - height: 32px; - margin-right: 15px; + height: 18px; cursor: pointer; + + margin-left: 10px; + margin-right: 10px; } .voteButton:hover { filter: brightness(80%); diff --git a/content.js b/content.js index a95b473e..eab8983c 100644 --- a/content.js +++ b/content.js @@ -870,27 +870,67 @@ function openSkipNotice(UUID){ noticeElement.classList.add("sponsorSkipNotice"); noticeElement.style.zIndex = 50 + amountOfPreviousNotices; + // let logoElement = document.createElement("img"); + // logoElement.id = "sponsorSkipLogo" + UUID; + // logoElement.className = "sponsorSkipLogo"; + // logoElement.src = chrome.extension.getURL("icons/LogoSponsorBlocker256px.png"); + + // let noticeMessage = document.createElement("div"); + // noticeMessage.id = "sponsorSkipMessage" + UUID; + // noticeMessage.classList.add("sponsorSkipMessage"); + // noticeMessage.classList.add("sponsorSkipObject"); + // noticeMessage.innerText = "Hey, you just skipped a sponsor!"; + + // let noticeInfo = document.createElement("p"); + // noticeInfo.id = "sponsorSkipInfo" + UUID; + // noticeInfo.classList.add("sponsorSkipInfo"); + // noticeInfo.classList.add("sponsorSkipObject"); + // noticeInfo.innerText = "This message will disapear in 7 seconds"; + + //the row that will contain the info + let firstRow = document.createElement("tr"); + + let logoColumn = document.createElement("td"); + let logoElement = document.createElement("img"); logoElement.id = "sponsorSkipLogo" + UUID; - logoElement.className = "sponsorSkipLogo"; - logoElement.src = chrome.extension.getURL("icons/LogoSponsorBlocker256px.png"); + logoElement.className = "sponsorSkipLogo sponsorSkipObject"; + logoElement.src = chrome.extension.getURL("icons/IconSponsorBlocker256px.png"); - let noticeMessage = document.createElement("div"); + let noticeMessage = document.createElement("span"); noticeMessage.id = "sponsorSkipMessage" + UUID; noticeMessage.classList.add("sponsorSkipMessage"); noticeMessage.classList.add("sponsorSkipObject"); - noticeMessage.innerText = "Hey, you just skipped a sponsor!"; - - let noticeInfo = document.createElement("p"); - noticeInfo.id = "sponsorSkipInfo" + UUID; - noticeInfo.classList.add("sponsorSkipInfo"); - noticeInfo.classList.add("sponsorSkipObject"); - noticeInfo.innerText = "This message will disapear in 7 seconds"; + noticeMessage.innerText = "SponsorBlock - Sponsor Skipped"; + + //create the first column + logoColumn.appendChild(logoElement); + logoColumn.appendChild(noticeMessage); + + //add the x button + let closeButtonContainer = document.createElement("td"); + closeButtonContainer.className = "sponsorSkipNoticeRightSection" + + let hideButton = document.createElement("button"); + hideButton.innerText = "X"; + hideButton.className = "sponsorSkipNoticeButton sponsorSkipNoticeCloseButton"; + hideButton.addEventListener("click", () => closeSkipNotice(UUID)); + + closeButtonContainer.appendChild(hideButton); + + //add all objects to first row + firstRow.appendChild(logoColumn); + firstRow.appendChild(closeButtonContainer); + + let spacer = document.createElement("hr"); + spacer.className = "sponsorBlockSpacer"; + + //the row that will contain the buttons + let secondRow = document.createElement("tr"); //thumbs up and down buttons - let voteButtonsContainer = document.createElement("div"); + let voteButtonsContainer = document.createElement("td"); voteButtonsContainer.id = "sponsorTimesVoteButtonsContainer" + UUID; - voteButtonsContainer.setAttribute("align", "center"); let upvoteButton = document.createElement("img"); upvoteButton.id = "sponsorTimesUpvoteButtonsContainer" + UUID; @@ -908,35 +948,64 @@ function openSkipNotice(UUID){ voteButtonsContainer.appendChild(upvoteButton); voteButtonsContainer.appendChild(downvoteButton); - let buttonContainer = document.createElement("div"); - buttonContainer.setAttribute("align", "center"); + //add unskip button + let unskipContainer = document.createElement("td"); + unskipContainer.className = "sponsorSkipNoticeUnskipSection"; - let goBackButton = document.createElement("button"); - goBackButton.innerText = chrome.i18n.getMessage("goBack"); - goBackButton.className = "sponsorSkipButton"; - goBackButton.addEventListener("click", () => goBackToPreviousTime(UUID)); + let unskipButton = document.createElement("button"); + unskipButton.innerText = chrome.i18n.getMessage("goBack"); + unskipButton.className = "sponsorSkipNoticeButton"; + unskipButton.addEventListener("click", () => goBackToPreviousTime(UUID)); - let hideButton = document.createElement("button"); - hideButton.innerText = chrome.i18n.getMessage("Dismiss"); - hideButton.className = "sponsorSkipButton"; - hideButton.addEventListener("click", () => closeSkipNotice(UUID)); + unskipContainer.appendChild(unskipButton); + + //add don't show again button + let dontshowContainer = document.createElement("td"); + dontshowContainer.className = "sponsorSkipNoticeRightSection"; let dontShowAgainButton = document.createElement("button"); dontShowAgainButton.innerText = chrome.i18n.getMessage("Hide"); - dontShowAgainButton.className = "sponsorSkipDontShowButton"; + dontShowAgainButton.className = "sponsorSkipNoticeButton sponsorSkipNoticeCloseButton"; dontShowAgainButton.addEventListener("click", dontShowNoticeAgain); - buttonContainer.appendChild(goBackButton); - buttonContainer.appendChild(hideButton); - buttonContainer.appendChild(document.createElement("br")); - buttonContainer.appendChild(document.createElement("br")); - buttonContainer.appendChild(dontShowAgainButton); + dontshowContainer.appendChild(dontShowAgainButton); - noticeElement.appendChild(logoElement); - noticeElement.appendChild(noticeMessage); - noticeElement.appendChild(noticeInfo); - noticeElement.appendChild(voteButtonsContainer); - noticeElement.appendChild(buttonContainer); + //add to row + secondRow.appendChild(voteButtonsContainer); + secondRow.appendChild(unskipContainer); + secondRow.appendChild(dontshowContainer); + + // let buttonContainer = document.createElement("div"); + // buttonContainer.setAttribute("align", "center"); + + // let goBackButton = document.createElement("button"); + // goBackButton.innerText = chrome.i18n.getMessage("goBack"); + // goBackButton.className = "sponsorSkipButton"; + // goBackButton.addEventListener("click", () => goBackToPreviousTime(UUID)); + + // let hideButton = document.createElement("button"); + // hideButton.innerText = chrome.i18n.getMessage("Dismiss"); + // hideButton.className = "sponsorSkipButton"; + // hideButton.addEventListener("click", () => closeSkipNotice(UUID)); + + // let dontShowAgainButton = document.createElement("button"); + // dontShowAgainButton.innerText = chrome.i18n.getMessage("Hide"); + // dontShowAgainButton.className = "sponsorSkipDontShowButton"; + // dontShowAgainButton.addEventListener("click", dontShowNoticeAgain); + + // buttonContainer.appendChild(goBackButton); + // buttonContainer.appendChild(hideButton); + // buttonContainer.appendChild(document.createElement("br")); + // buttonContainer.appendChild(document.createElement("br")); + // buttonContainer.appendChild(dontShowAgainButton); + + // noticeElement.appendChild(logoElement); + // noticeElement.appendChild(noticeMessage); + // noticeElement.appendChild(noticeInfo); + + noticeElement.appendChild(firstRow); + noticeElement.appendChild(spacer); + noticeElement.appendChild(secondRow); let referenceNode = document.getElementById("movie_player"); if (referenceNode == null) { diff --git a/icons/downvote.png b/icons/downvote.png index 1af50e786119880f4766255f7ffa1d2b4173cdf9..7d6036e6b3738402ecdef278ac5eaac8443fc98f 100644 GIT binary patch literal 5251 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 T)BXW{Fa(5ce%|$4$c+C5lhJOh literal 6513 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 diff --git a/icons/upvote.png b/icons/upvote.png index 56eb5c5b86886cc06dd95188866649af5d653230..30023f95b5c6c7b8f908734fa7a65d532668ec0c 100644 GIT binary patch literal 5484 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 Q(3er*fN`;XXyc#wf0k(pZvX%Q literal 6600 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