diff --git a/Extensions/combined/dist/chrome/bundled-content-script.js b/Extensions/combined/dist/chrome/bundled-content-script.js index 4685457..418a10d 100644 --- a/Extensions/combined/dist/chrome/bundled-content-script.js +++ b/Extensions/combined/dist/chrome/bundled-content-script.js @@ -96,11 +96,13 @@ function cLog(message, writer) { function sendVote(vote) { - getBrowser().runtime.sendMessage({ - message: "send_vote", - vote: vote, - videoId: getVideoId(window.location.href) - }); + if (extConfig.disableVoteSubmission !== true) { + getBrowser().runtime.sendMessage({ + message: "send_vote", + vote: vote, + videoId: getVideoId(window.location.href) + }); + } } function sendVideoIds() { @@ -118,7 +120,7 @@ function sendVideoIds() { }); } -function likeClicked(storedData) { +function likeClicked() { if (checkForSignInButton() === false) { if (storedData.previousState === DISLIKED_STATE) { sendVote(1); @@ -141,7 +143,7 @@ function likeClicked(storedData) { } } -function dislikeClicked(storedData) { +function dislikeClicked() { if (checkForSignInButton() == false) { if (storedData.previousState === NEUTRAL_STATE) { sendVote(-1); @@ -166,6 +168,26 @@ function dislikeClicked(storedData) { } } +function addLikeDislikeEventListener() { + var buttons = buttons_getButtons(); + + if (!window.returnDislikeButtonlistenersSet) { + buttons.children[0].addEventListener("click", likeClicked); + buttons.children[1].addEventListener("click", dislikeClicked); + window.returnDislikeButtonlistenersSet = true; + } +} + +function storageChangeHandler(changes, area) { + if (changes.disableVoteSubmission !== undefined) { + handleDisableVoteSubmissionChangeEvent(changes.disableVoteSubmission.newValue); + } +} + +function handleDisableVoteSubmissionChangeEvent(value) { + extConfig.disableVoteSubmission = value; +} + ;// CONCATENATED MODULE: ./Extensions/combined/src/state.js @@ -175,6 +197,14 @@ function dislikeClicked(storedData) { var LIKED_STATE = "LIKED_STATE"; var DISLIKED_STATE = "DISLIKED_STATE"; var NEUTRAL_STATE = "NEUTRAL_STATE"; +var extConfig = { + disableVoteSubmission: false +}; +var storedData = { + likes: 0, + dislikes: 0, + previousState: NEUTRAL_STATE +}; function isMobile() { return location.hostname == "m.youtube.com"; @@ -262,13 +292,29 @@ function setState(storedData) { }); } -function setInitialState(storedData) { +function setInitialState() { setState(storedData); setTimeout(function () { sendVideoIds(); }, 1500); } +function initExtConfig() { + initializeDisableVoteSubmission(); +} + +function initializeDisableVoteSubmission() { + getBrowser().storage.sync.get(['disableVoteSubmission'], function (res) { + if (res.disableVoteSubmission === undefined) { + getBrowser().storage.sync.set({ + disableVoteSubmission: false + }); + } else { + extConfig.disableVoteSubmission = res.disableVoteSubmission; + } + }); +} + ;// CONCATENATED MODULE: ./Extensions/combined/src/buttons.js @@ -313,11 +359,7 @@ function checkForSignInButton() { -var storedData = { - likes: 0, - dislikes: 0, - previousState: NEUTRAL_STATE -}; +initExtConfig(); var jsInitChecktimer = null; function setEventListeners(evt) { @@ -327,19 +369,9 @@ function setEventListeners(evt) { if ((_getButtons = buttons_getButtons()) !== null && _getButtons !== void 0 && _getButtons.offsetParent && isVideoLoaded()) { clearInterval(jsInitChecktimer); jsInitChecktimer = null; - var buttons = buttons_getButtons(); - - if (!window.returnDislikeButtonlistenersSet) { - buttons.children[0].addEventListener("click", function () { - return likeClicked(storedData); - }); - buttons.children[1].addEventListener("click", function () { - return dislikeClicked(storedData); - }); - window.returnDislikeButtonlistenersSet = true; - } - - setInitialState(storedData); + addLikeDislikeEventListener(); + setInitialState(); + getBrowser().storage.onChanged.addListener(storageChangeHandler); } } diff --git a/Extensions/combined/dist/chrome/icons/icon_hold128.png b/Extensions/combined/dist/chrome/icons/icon_hold128.png new file mode 100644 index 0000000..359a686 Binary files /dev/null and b/Extensions/combined/dist/chrome/icons/icon_hold128.png differ diff --git a/Extensions/combined/dist/chrome/icons/server.png b/Extensions/combined/dist/chrome/icons/server.png new file mode 100644 index 0000000..4a104f0 Binary files /dev/null and b/Extensions/combined/dist/chrome/icons/server.png differ diff --git a/Extensions/combined/dist/chrome/popup.css b/Extensions/combined/dist/chrome/popup.css index 3075989..db57f13 100644 --- a/Extensions/combined/dist/chrome/popup.css +++ b/Extensions/combined/dist/chrome/popup.css @@ -17,7 +17,7 @@ body { color: var(--white); min-width: 300px; padding: 0.5em; - font-family: 'Roboto', Arial, Helvetica, sans-serif; + font-family: "Roboto", Arial, Helvetica, sans-serif; font-size: 14px; } @@ -33,8 +33,9 @@ button { border: none; border-radius: 4px; font-weight: 500; - box-shadow: 0 2px 4px -1px rgb(0 0 0 / 20%), 0 4px 5px 0 rgb(0 0 0 / 14%), 0 1px 10px 0 rgb(0 0 0 / 12%); - transition: .4s; + box-shadow: 0 2px 4px -1px rgb(0 0 0 / 20%), 0 4px 5px 0 rgb(0 0 0 / 14%), + 0 1px 10px 0 rgb(0 0 0 / 12%); + transition: 0.4s; } button:hover { diff --git a/Extensions/combined/dist/chrome/popup.html b/Extensions/combined/dist/chrome/popup.html index d97cd65..c8a9c0d 100644 --- a/Extensions/combined/dist/chrome/popup.html +++ b/Extensions/combined/dist/chrome/popup.html @@ -4,44 +4,56 @@ Return YouTube Dislike - - - + + +
- + + + +

Return YouTube Dislike

+ +

API Status:

by Dmitrii Selivanov & Community

-

+

+ -
- -
- -
+
+
+ +
Settings
+ Disable like/dislike submission + +
-
diff --git a/Extensions/combined/dist/chrome/popup.js b/Extensions/combined/dist/chrome/popup.js index c05ea5f..9f09cdf 100644 --- a/Extensions/combined/dist/chrome/popup.js +++ b/Extensions/combined/dist/chrome/popup.js @@ -3,12 +3,14 @@ const config = { advanced: false, showAdvancedMessage: "Show Settings", hideAdvancedMessage: "Hide Settings", + disableVoteSubmission: false, links: { website: "https://returnyoutubedislike.com", github: "https://github.com/Anarios/return-youtube-dislike", discord: "https://discord.gg/mYnESY4Md5", - donate: 'https://returnyoutubedislike.com/donate' + donate: "https://returnyoutubedislike.com/donate", + faq: "https://returnyoutubedislike.com/faq", }, }; @@ -25,14 +27,21 @@ document.getElementById("link_discord").addEventListener("click", () => { chrome.tabs.create({ url: config.links.discord }); }); +document.getElementById("link_faq").addEventListener("click", () => { + chrome.tabs.create({ url: config.links.faq }); +}); + document.getElementById("link_donate").addEventListener("click", () => { chrome.tabs.create({ url: config.links.donate }); }); +document + .getElementById("disable_vote_submission") + .addEventListener("click", (ev) => { + chrome.storage.sync.set({ disableVoteSubmission: ev.target.checked }); + }); -chrome.runtime.sendMessage({ message: 'get_auth_token' }); /* Advanced Toggle */ -/* Not currently used in this version const advancedToggle = document.getElementById("advancedToggle"); advancedToggle.addEventListener("click", () => { const adv = document.getElementById("advancedSettings"); @@ -46,7 +55,48 @@ advancedToggle.addEventListener("click", () => { config.advanced = true; } }); -*/ + +initConfig(); + +function initConfig() { + initializeDisableVoteSubmission(); +} + +function initializeDisableVoteSubmission() { + chrome.storage.sync.get(["disableVoteSubmission"], (res) => { + handleDisableVoteSubmissionChangeEvent(res.disableVoteSubmission); + }); +} + +chrome.storage.onChanged.addListener(storageChangeHandler); + +function storageChangeHandler(changes, area) { + if (changes.disableVoteSubmission !== undefined) { + handleDisableVoteSubmissionChangeEvent( + changes.disableVoteSubmission.newValue + ); + } +} + +function handleDisableVoteSubmissionChangeEvent(value) { + config.disableVoteSubmission = value; + document.getElementById("disable_vote_submission").checked = value; +} + +(async function getStatus() { + let status = document.getElementById("status"); + let resp = await fetch( + "https://returnyoutubedislikeapi.com/votes?videoId=YbJOTdZBX1g" + ); + let result = await resp.status; + if (result === 200) { + status.innerText = "Online"; + status.style.color = "green"; + } else { + status.innerText = "Offline"; + status.style.color = "red"; + } +})(); /* popup-script.js document.querySelector('#login') diff --git a/Extensions/combined/dist/chrome/ryd.background.js b/Extensions/combined/dist/chrome/ryd.background.js index f2f8b36..e332d8d 100644 --- a/Extensions/combined/dist/chrome/ryd.background.js +++ b/Extensions/combined/dist/chrome/ryd.background.js @@ -1,12 +1,17 @@ const apiUrl = "https://returnyoutubedislikeapi.com"; +const voteDisabledIconName = 'icon_hold128.png'; +const defaultIconName = 'icon128.png'; let api; -if (typeof chrome !== "undefined" && typeof chrome.runtime !== "undefined") - api = chrome; -else if ( - typeof browser !== "undefined" && - typeof browser.runtime !== "undefined" -) - api = browser; + +/** stores extension's global config */ +let extConfig = { + disableVoteSubmission: false +} + +if (isChrome()) api = chrome; +else if (isFirefox()) api = browser; + +initExtConfig() api.runtime.onMessage.addListener((request, sender, sendResponse) => { if (request.message === "get_auth_token") { @@ -218,3 +223,50 @@ function generateUserID(length = 36) { return result; } } + +function storageChangeHandler(changes, area) { + if (changes.disableVoteSubmission !== undefined) { + handleDisableVoteSubmissionChangeEvent(changes.disableVoteSubmission.newValue); + } +} + +function handleDisableVoteSubmissionChangeEvent(value) { + extConfig.disableVoteSubmission = value; + if (value === true) { + changeIcon(voteDisabledIconName); + } else { + changeIcon(defaultIconName); + } +} + +function changeIcon(iconName) { + if (api.action !== undefined) api.action.setIcon({path: "/icons/" + iconName}); + else if (api.browserAction !== undefined) api.browserAction.setIcon({path: "/icons/" + iconName}); + else console.log('changing icon is not supported'); +} + +api.storage.onChanged.addListener(storageChangeHandler); + +function initExtConfig() { + initializeDisableVoteSubmission(); +} + +function initializeDisableVoteSubmission() { + api.storage.sync.get(['disableVoteSubmission'], (res) => { + if (res.disableVoteSubmission === undefined) { + api.storage.sync.set({disableVoteSubmission: false}); + } + else { + extConfig.disableVoteSubmission = res.disableVoteSubmission; + if (res.disableVoteSubmission) changeIcon(voteDisabledIconName); + } + }); +} + +function isChrome() { + return typeof chrome !== "undefined" && typeof chrome.runtime !== "undefined"; +} + +function isFirefox() { + return typeof browser !== "undefined" && typeof browser.runtime !== "undefined"; +} \ No newline at end of file diff --git a/Extensions/combined/dist/firefox/bundled-content-script.js b/Extensions/combined/dist/firefox/bundled-content-script.js index 4685457..418a10d 100644 --- a/Extensions/combined/dist/firefox/bundled-content-script.js +++ b/Extensions/combined/dist/firefox/bundled-content-script.js @@ -96,11 +96,13 @@ function cLog(message, writer) { function sendVote(vote) { - getBrowser().runtime.sendMessage({ - message: "send_vote", - vote: vote, - videoId: getVideoId(window.location.href) - }); + if (extConfig.disableVoteSubmission !== true) { + getBrowser().runtime.sendMessage({ + message: "send_vote", + vote: vote, + videoId: getVideoId(window.location.href) + }); + } } function sendVideoIds() { @@ -118,7 +120,7 @@ function sendVideoIds() { }); } -function likeClicked(storedData) { +function likeClicked() { if (checkForSignInButton() === false) { if (storedData.previousState === DISLIKED_STATE) { sendVote(1); @@ -141,7 +143,7 @@ function likeClicked(storedData) { } } -function dislikeClicked(storedData) { +function dislikeClicked() { if (checkForSignInButton() == false) { if (storedData.previousState === NEUTRAL_STATE) { sendVote(-1); @@ -166,6 +168,26 @@ function dislikeClicked(storedData) { } } +function addLikeDislikeEventListener() { + var buttons = buttons_getButtons(); + + if (!window.returnDislikeButtonlistenersSet) { + buttons.children[0].addEventListener("click", likeClicked); + buttons.children[1].addEventListener("click", dislikeClicked); + window.returnDislikeButtonlistenersSet = true; + } +} + +function storageChangeHandler(changes, area) { + if (changes.disableVoteSubmission !== undefined) { + handleDisableVoteSubmissionChangeEvent(changes.disableVoteSubmission.newValue); + } +} + +function handleDisableVoteSubmissionChangeEvent(value) { + extConfig.disableVoteSubmission = value; +} + ;// CONCATENATED MODULE: ./Extensions/combined/src/state.js @@ -175,6 +197,14 @@ function dislikeClicked(storedData) { var LIKED_STATE = "LIKED_STATE"; var DISLIKED_STATE = "DISLIKED_STATE"; var NEUTRAL_STATE = "NEUTRAL_STATE"; +var extConfig = { + disableVoteSubmission: false +}; +var storedData = { + likes: 0, + dislikes: 0, + previousState: NEUTRAL_STATE +}; function isMobile() { return location.hostname == "m.youtube.com"; @@ -262,13 +292,29 @@ function setState(storedData) { }); } -function setInitialState(storedData) { +function setInitialState() { setState(storedData); setTimeout(function () { sendVideoIds(); }, 1500); } +function initExtConfig() { + initializeDisableVoteSubmission(); +} + +function initializeDisableVoteSubmission() { + getBrowser().storage.sync.get(['disableVoteSubmission'], function (res) { + if (res.disableVoteSubmission === undefined) { + getBrowser().storage.sync.set({ + disableVoteSubmission: false + }); + } else { + extConfig.disableVoteSubmission = res.disableVoteSubmission; + } + }); +} + ;// CONCATENATED MODULE: ./Extensions/combined/src/buttons.js @@ -313,11 +359,7 @@ function checkForSignInButton() { -var storedData = { - likes: 0, - dislikes: 0, - previousState: NEUTRAL_STATE -}; +initExtConfig(); var jsInitChecktimer = null; function setEventListeners(evt) { @@ -327,19 +369,9 @@ function setEventListeners(evt) { if ((_getButtons = buttons_getButtons()) !== null && _getButtons !== void 0 && _getButtons.offsetParent && isVideoLoaded()) { clearInterval(jsInitChecktimer); jsInitChecktimer = null; - var buttons = buttons_getButtons(); - - if (!window.returnDislikeButtonlistenersSet) { - buttons.children[0].addEventListener("click", function () { - return likeClicked(storedData); - }); - buttons.children[1].addEventListener("click", function () { - return dislikeClicked(storedData); - }); - window.returnDislikeButtonlistenersSet = true; - } - - setInitialState(storedData); + addLikeDislikeEventListener(); + setInitialState(); + getBrowser().storage.onChanged.addListener(storageChangeHandler); } } diff --git a/Extensions/combined/dist/firefox/icons/icon_hold128.png b/Extensions/combined/dist/firefox/icons/icon_hold128.png new file mode 100644 index 0000000..359a686 Binary files /dev/null and b/Extensions/combined/dist/firefox/icons/icon_hold128.png differ diff --git a/Extensions/combined/dist/firefox/icons/server.png b/Extensions/combined/dist/firefox/icons/server.png new file mode 100644 index 0000000..4a104f0 Binary files /dev/null and b/Extensions/combined/dist/firefox/icons/server.png differ diff --git a/Extensions/combined/dist/firefox/popup.css b/Extensions/combined/dist/firefox/popup.css index 3075989..db57f13 100644 --- a/Extensions/combined/dist/firefox/popup.css +++ b/Extensions/combined/dist/firefox/popup.css @@ -17,7 +17,7 @@ body { color: var(--white); min-width: 300px; padding: 0.5em; - font-family: 'Roboto', Arial, Helvetica, sans-serif; + font-family: "Roboto", Arial, Helvetica, sans-serif; font-size: 14px; } @@ -33,8 +33,9 @@ button { border: none; border-radius: 4px; font-weight: 500; - box-shadow: 0 2px 4px -1px rgb(0 0 0 / 20%), 0 4px 5px 0 rgb(0 0 0 / 14%), 0 1px 10px 0 rgb(0 0 0 / 12%); - transition: .4s; + box-shadow: 0 2px 4px -1px rgb(0 0 0 / 20%), 0 4px 5px 0 rgb(0 0 0 / 14%), + 0 1px 10px 0 rgb(0 0 0 / 12%); + transition: 0.4s; } button:hover { diff --git a/Extensions/combined/dist/firefox/popup.html b/Extensions/combined/dist/firefox/popup.html index d97cd65..c8a9c0d 100644 --- a/Extensions/combined/dist/firefox/popup.html +++ b/Extensions/combined/dist/firefox/popup.html @@ -4,44 +4,56 @@ Return YouTube Dislike - - - + + +
- + + + +

Return YouTube Dislike

+ +

API Status:

by Dmitrii Selivanov & Community

-

+

+ -
- -
- -
+
+
+ +
Settings
+ Disable like/dislike submission + +
-
diff --git a/Extensions/combined/dist/firefox/popup.js b/Extensions/combined/dist/firefox/popup.js index c05ea5f..9f09cdf 100644 --- a/Extensions/combined/dist/firefox/popup.js +++ b/Extensions/combined/dist/firefox/popup.js @@ -3,12 +3,14 @@ const config = { advanced: false, showAdvancedMessage: "Show Settings", hideAdvancedMessage: "Hide Settings", + disableVoteSubmission: false, links: { website: "https://returnyoutubedislike.com", github: "https://github.com/Anarios/return-youtube-dislike", discord: "https://discord.gg/mYnESY4Md5", - donate: 'https://returnyoutubedislike.com/donate' + donate: "https://returnyoutubedislike.com/donate", + faq: "https://returnyoutubedislike.com/faq", }, }; @@ -25,14 +27,21 @@ document.getElementById("link_discord").addEventListener("click", () => { chrome.tabs.create({ url: config.links.discord }); }); +document.getElementById("link_faq").addEventListener("click", () => { + chrome.tabs.create({ url: config.links.faq }); +}); + document.getElementById("link_donate").addEventListener("click", () => { chrome.tabs.create({ url: config.links.donate }); }); +document + .getElementById("disable_vote_submission") + .addEventListener("click", (ev) => { + chrome.storage.sync.set({ disableVoteSubmission: ev.target.checked }); + }); -chrome.runtime.sendMessage({ message: 'get_auth_token' }); /* Advanced Toggle */ -/* Not currently used in this version const advancedToggle = document.getElementById("advancedToggle"); advancedToggle.addEventListener("click", () => { const adv = document.getElementById("advancedSettings"); @@ -46,7 +55,48 @@ advancedToggle.addEventListener("click", () => { config.advanced = true; } }); -*/ + +initConfig(); + +function initConfig() { + initializeDisableVoteSubmission(); +} + +function initializeDisableVoteSubmission() { + chrome.storage.sync.get(["disableVoteSubmission"], (res) => { + handleDisableVoteSubmissionChangeEvent(res.disableVoteSubmission); + }); +} + +chrome.storage.onChanged.addListener(storageChangeHandler); + +function storageChangeHandler(changes, area) { + if (changes.disableVoteSubmission !== undefined) { + handleDisableVoteSubmissionChangeEvent( + changes.disableVoteSubmission.newValue + ); + } +} + +function handleDisableVoteSubmissionChangeEvent(value) { + config.disableVoteSubmission = value; + document.getElementById("disable_vote_submission").checked = value; +} + +(async function getStatus() { + let status = document.getElementById("status"); + let resp = await fetch( + "https://returnyoutubedislikeapi.com/votes?videoId=YbJOTdZBX1g" + ); + let result = await resp.status; + if (result === 200) { + status.innerText = "Online"; + status.style.color = "green"; + } else { + status.innerText = "Offline"; + status.style.color = "red"; + } +})(); /* popup-script.js document.querySelector('#login') diff --git a/Extensions/combined/dist/firefox/ryd.background.js b/Extensions/combined/dist/firefox/ryd.background.js index f2f8b36..e332d8d 100644 --- a/Extensions/combined/dist/firefox/ryd.background.js +++ b/Extensions/combined/dist/firefox/ryd.background.js @@ -1,12 +1,17 @@ const apiUrl = "https://returnyoutubedislikeapi.com"; +const voteDisabledIconName = 'icon_hold128.png'; +const defaultIconName = 'icon128.png'; let api; -if (typeof chrome !== "undefined" && typeof chrome.runtime !== "undefined") - api = chrome; -else if ( - typeof browser !== "undefined" && - typeof browser.runtime !== "undefined" -) - api = browser; + +/** stores extension's global config */ +let extConfig = { + disableVoteSubmission: false +} + +if (isChrome()) api = chrome; +else if (isFirefox()) api = browser; + +initExtConfig() api.runtime.onMessage.addListener((request, sender, sendResponse) => { if (request.message === "get_auth_token") { @@ -218,3 +223,50 @@ function generateUserID(length = 36) { return result; } } + +function storageChangeHandler(changes, area) { + if (changes.disableVoteSubmission !== undefined) { + handleDisableVoteSubmissionChangeEvent(changes.disableVoteSubmission.newValue); + } +} + +function handleDisableVoteSubmissionChangeEvent(value) { + extConfig.disableVoteSubmission = value; + if (value === true) { + changeIcon(voteDisabledIconName); + } else { + changeIcon(defaultIconName); + } +} + +function changeIcon(iconName) { + if (api.action !== undefined) api.action.setIcon({path: "/icons/" + iconName}); + else if (api.browserAction !== undefined) api.browserAction.setIcon({path: "/icons/" + iconName}); + else console.log('changing icon is not supported'); +} + +api.storage.onChanged.addListener(storageChangeHandler); + +function initExtConfig() { + initializeDisableVoteSubmission(); +} + +function initializeDisableVoteSubmission() { + api.storage.sync.get(['disableVoteSubmission'], (res) => { + if (res.disableVoteSubmission === undefined) { + api.storage.sync.set({disableVoteSubmission: false}); + } + else { + extConfig.disableVoteSubmission = res.disableVoteSubmission; + if (res.disableVoteSubmission) changeIcon(voteDisabledIconName); + } + }); +} + +function isChrome() { + return typeof chrome !== "undefined" && typeof chrome.runtime !== "undefined"; +} + +function isFirefox() { + return typeof browser !== "undefined" && typeof browser.runtime !== "undefined"; +} \ No newline at end of file diff --git a/Extensions/combined/icons/server.png b/Extensions/combined/icons/server.png new file mode 100644 index 0000000..4a104f0 Binary files /dev/null and b/Extensions/combined/icons/server.png differ diff --git a/Extensions/combined/popup.css b/Extensions/combined/popup.css index 3075989..db57f13 100644 --- a/Extensions/combined/popup.css +++ b/Extensions/combined/popup.css @@ -17,7 +17,7 @@ body { color: var(--white); min-width: 300px; padding: 0.5em; - font-family: 'Roboto', Arial, Helvetica, sans-serif; + font-family: "Roboto", Arial, Helvetica, sans-serif; font-size: 14px; } @@ -33,8 +33,9 @@ button { border: none; border-radius: 4px; font-weight: 500; - box-shadow: 0 2px 4px -1px rgb(0 0 0 / 20%), 0 4px 5px 0 rgb(0 0 0 / 14%), 0 1px 10px 0 rgb(0 0 0 / 12%); - transition: .4s; + box-shadow: 0 2px 4px -1px rgb(0 0 0 / 20%), 0 4px 5px 0 rgb(0 0 0 / 14%), + 0 1px 10px 0 rgb(0 0 0 / 12%); + transition: 0.4s; } button:hover { diff --git a/Extensions/combined/popup.html b/Extensions/combined/popup.html index 1bf8737..c8a9c0d 100644 --- a/Extensions/combined/popup.html +++ b/Extensions/combined/popup.html @@ -4,29 +4,39 @@ Return YouTube Dislike - - - + + +
- + + + +

Return YouTube Dislike

+ +

API Status:

by Dmitrii Selivanov & Community

-

- +

+ -
+
-
+
-
- +
@@ -37,7 +47,7 @@ Disable like/dislike submission -
+