From 44b8a000285eb947994bd07974e5d3a9efb72bfa Mon Sep 17 00:00:00 2001 From: Lawrence Hook Date: Sun, 13 Sep 2020 21:16:18 -0400 Subject: [PATCH] Fix chrome popup pageAction Split files into firefox and chrome specific directories --- chrome/activate-page-action.js | 2 + chrome/background.js | 8 ++ {icons => chrome/icons}/no-16.png | Bin {icons => chrome/icons}/no-32.png | Bin {icons => chrome/icons}/no-64.png | Bin chrome/manifest.json | 44 +++++++ chrome/options.css | 20 ++++ options.html => chrome/options.html | 0 chrome/options.js | 48 ++++++++ chrome/reload.js | 10 ++ .../remove-homepage-suggestions.js | 0 .../remove-other-suggestions.js | 0 firefox/icons/no-16.png | Bin 0 -> 1250 bytes firefox/icons/no-32.png | Bin 0 -> 2855 bytes firefox/icons/no-64.png | Bin 0 -> 7020 bytes manifest.json => firefox/manifest.json | 4 +- options.css => firefox/options.css | 0 firefox/options.html | 60 ++++++++++ options.js => firefox/options.js | 0 reload.js => firefox/reload.js | 0 firefox/remove-homepage-suggestions.js | 108 +++++++++++++++++ firefox/remove-other-suggestions.js | 109 ++++++++++++++++++ 22 files changed, 412 insertions(+), 1 deletion(-) create mode 100644 chrome/activate-page-action.js create mode 100644 chrome/background.js rename {icons => chrome/icons}/no-16.png (100%) rename {icons => chrome/icons}/no-32.png (100%) rename {icons => chrome/icons}/no-64.png (100%) create mode 100644 chrome/manifest.json create mode 100644 chrome/options.css rename options.html => chrome/options.html (100%) create mode 100644 chrome/options.js create mode 100644 chrome/reload.js rename remove-homepage-suggestions.js => chrome/remove-homepage-suggestions.js (100%) rename remove-other-suggestions.js => chrome/remove-other-suggestions.js (100%) create mode 100644 firefox/icons/no-16.png create mode 100644 firefox/icons/no-32.png create mode 100644 firefox/icons/no-64.png rename manifest.json => firefox/manifest.json (91%) rename options.css => firefox/options.css (100%) create mode 100644 firefox/options.html rename options.js => firefox/options.js (100%) rename reload.js => firefox/reload.js (100%) create mode 100644 firefox/remove-homepage-suggestions.js create mode 100644 firefox/remove-other-suggestions.js diff --git a/chrome/activate-page-action.js b/chrome/activate-page-action.js new file mode 100644 index 0000000..458ca1d --- /dev/null +++ b/chrome/activate-page-action.js @@ -0,0 +1,2 @@ +// https://stackoverflow.com/questions/35882089/popup-is-not-appearing-when-used-page-action +chrome.runtime.sendMessage({"message": "activate_icon"}); diff --git a/chrome/background.js b/chrome/background.js new file mode 100644 index 0000000..b2404ad --- /dev/null +++ b/chrome/background.js @@ -0,0 +1,8 @@ +// https://stackoverflow.com/questions/35882089/popup-is-not-appearing-when-used-page-action +const activatePageAction = (request, sender, sendResponse) => { + if (request.message === "activate_icon") { + chrome.pageAction.show(sender.tab.id); + } +} + +chrome.extension.onMessage.addListener(activatePageAction); diff --git a/icons/no-16.png b/chrome/icons/no-16.png similarity index 100% rename from icons/no-16.png rename to chrome/icons/no-16.png diff --git a/icons/no-32.png b/chrome/icons/no-32.png similarity index 100% rename from icons/no-32.png rename to chrome/icons/no-32.png diff --git a/icons/no-64.png b/chrome/icons/no-64.png similarity index 100% rename from icons/no-64.png rename to chrome/icons/no-64.png diff --git a/chrome/manifest.json b/chrome/manifest.json new file mode 100644 index 0000000..281d274 --- /dev/null +++ b/chrome/manifest.json @@ -0,0 +1,44 @@ +{ + "name": "Remove Youtube Suggestions", + "description": "Removes all suggestions from Youtube.", + "homepage_url": "https://github.com/emumoo/remove-youtube-suggestions", + "manifest_version": 2, + "version": "1.0.0", + + "content_scripts": [ + { + "matches": ["*://*.youtube.com/*"], + "js": ["activate-page-action.js"], + "run_at": "document_start" + }, + { + "matches": ["*://*.youtube.com/*"], + "js": ["remove-homepage-suggestions.js"], + "run_at": "document_start" + }, + { + "matches": ["*://*.youtube.com/*"], + "js": ["remove-other-suggestions.js"], + "run_at": "document_end" + } + ], + + "background": { + "scripts": ["background.js"], + "persistent": false + }, + + "page_action": { + "browser_style": true, + "show_matches": ["*youtube*"], + "default_popup": "options.html", + "default_title": "Options", + "default_icon": { + "16": "icons/no-16.png", + "32": "icons/no-32.png", + "64": "icons/no-64.png" + } + }, + + "permissions": ["storage"] +} diff --git a/chrome/options.css b/chrome/options.css new file mode 100644 index 0000000..30a1341 --- /dev/null +++ b/chrome/options.css @@ -0,0 +1,20 @@ +body { + width: 300px; +} + +#button_container { + text-align: center; +} + +#help-box { + text-align: left; + padding: 8px; + border-style: ridge; + border-color: gray; + + margin: 4px 2px 1px 2px; +} + +#help-header { + text-align: center; +} \ No newline at end of file diff --git a/options.html b/chrome/options.html similarity index 100% rename from options.html rename to chrome/options.html diff --git a/chrome/options.js b/chrome/options.js new file mode 100644 index 0000000..598345f --- /dev/null +++ b/chrome/options.js @@ -0,0 +1,48 @@ +// Chrome +if (typeof(chrome) !== 'undefined') { + browser = chrome; +} + +// document.querySelectorAll("RYS_setting_checkbox"); +const homepageCheckbox = document.getElementById('homepage'); +const sidebarCheckbox = document.getElementById('sidebar'); +const videoEndCheckbox = document.getElementById('videoEnd'); +const commentsCheckbox = document.getElementById('comments'); +homepageCheckbox.addEventListener("change", saveHomepageSetting); +sidebarCheckbox.addEventListener("change", saveSidebarSetting); +videoEndCheckbox.addEventListener("change", saveVideoEndSetting); +commentsCheckbox.addEventListener("change", saveCommentsSetting); + +document.addEventListener("DOMContentLoaded", restoreOptions); + +function saveHomepageSetting(e) { + browser.storage.local.set({ homepage: e.target.checked }); +} + +function saveSidebarSetting(e) { + browser.storage.local.set({ sidebar: e.target.checked }); +} + +function saveVideoEndSetting(e) { + browser.storage.local.set({ videoEnd: e.target.checked }); +} + +function saveCommentsSetting(e) { + browser.storage.local.set({ comments: e.target.checked }); +} + +function restoreOptions() { + + function setCurrentChoice(result) { + for (let key in result) { + document.getElementById(key).checked = result[key]; + } + } + + function onError(error) { + console.log(`Error: ${error}`); + } + + const settings = ["homepage", "sidebar", "videoEnd", "comments"]; + settings.forEach(setting => browser.storage.local.get(setting, setCurrentChoice)); +} diff --git a/chrome/reload.js b/chrome/reload.js new file mode 100644 index 0000000..ec45360 --- /dev/null +++ b/chrome/reload.js @@ -0,0 +1,10 @@ +const reloadButton = document.getElementById("reload_button"); +reloadButton.addEventListener("click", reload); + +console.log("hi"); + +async function reload() { + chrome.tabs.query({ active: true, currentWindow: true }, tabs => { + console.log(tabs); + }); +} diff --git a/remove-homepage-suggestions.js b/chrome/remove-homepage-suggestions.js similarity index 100% rename from remove-homepage-suggestions.js rename to chrome/remove-homepage-suggestions.js diff --git a/remove-other-suggestions.js b/chrome/remove-other-suggestions.js similarity index 100% rename from remove-other-suggestions.js rename to chrome/remove-other-suggestions.js diff --git a/firefox/icons/no-16.png b/firefox/icons/no-16.png new file mode 100644 index 0000000000000000000000000000000000000000..59ecf717d23d668c0d99af8c6d133cddd03ffd6d GIT binary patch literal 1250 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 literal 0 HcmV?d00001 diff --git a/firefox/icons/no-64.png b/firefox/icons/no-64.png new file mode 100644 index 0000000000000000000000000000000000000000..868a2ac0fc263741651363b75034f56b9fb4cc96 GIT binary patch literal 7020 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 Fe*olTST_Iw literal 0 HcmV?d00001 diff --git a/manifest.json b/firefox/manifest.json similarity index 91% rename from manifest.json rename to firefox/manifest.json index f8a15b4..f2c28de 100644 --- a/manifest.json +++ b/firefox/manifest.json @@ -19,13 +19,15 @@ ], "options_ui": { - "page": "options.html" + "page": "options.html", + "open_in_tab": false }, "page_action": { "browser_style": true, "show_matches": ["*://*.youtube.com/*"], "default_popup": "options.html", + "default_title": "Options", "default_icon": { "16": "icons/no-16.png", "32": "icons/no-32.png", diff --git a/options.css b/firefox/options.css similarity index 100% rename from options.css rename to firefox/options.css diff --git a/firefox/options.html b/firefox/options.html new file mode 100644 index 0000000..9b19135 --- /dev/null +++ b/firefox/options.html @@ -0,0 +1,60 @@ + + + + + + + + + +
+ Choose which suggestions to remove + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+ + +
+ +
+ +
+ +
+
+ +
+
+ Help us make this addon better! +
+
+ Submit feedback here. +
+ Donate here. +
+ + + + + + \ No newline at end of file diff --git a/options.js b/firefox/options.js similarity index 100% rename from options.js rename to firefox/options.js diff --git a/reload.js b/firefox/reload.js similarity index 100% rename from reload.js rename to firefox/reload.js diff --git a/firefox/remove-homepage-suggestions.js b/firefox/remove-homepage-suggestions.js new file mode 100644 index 0000000..5b0da9b --- /dev/null +++ b/firefox/remove-homepage-suggestions.js @@ -0,0 +1,108 @@ +// Chrome +if (typeof(chrome) !== 'undefined') { + browser = chrome; + + browser.storage.local.get("homepage", onGotHomepageSetting); + +// Firefox +} else { + + const gettingHomepage = browser.storage.local.get("homepage"); + gettingHomepage.then(onGotHomepageSetting, onError); + +} + + +/*********** + * Homepage + ***********/ +const homepageSelectors = [ + "ytd-page-manager", + "ytd-browse", + "#feed", + "ytd-rich-grid-renderer.style-scope", + "#masthead-ad", + "#spinner-container", + "#home-container-skeleton", + "#rich-shelves", + ".shelf-skeleton", + ".rich-shelf-videos" +]; +const hompageSuggestionsSelector = homepageSelectors.join(', '); +const hideHomepageNodes = node => { + if (node.matches(hompageSuggestionsSelector)) { + node.style.setProperty("display", "none"); + } +}; +const removeHomepageObserver = new MutationObserver(mutations => { + mutations.forEach(mutation => { + hideHomepageNodes(mutation.target); + }); +}); +removeHomepageObserver.observe(document, { + childList: true, + subtree: true, +}); +function onGotHomepageSetting(result) { + const homepage = result.homepage === undefined ? true : result.homepage; + browser.storage.local.set({ homepage }); + updateHomepageStyle(homepage); + + // watch for url changes + const updateHomepageObserver = new MutationObserver(mutations => updateHomepageStyle(homepage)); + updateHomepageObserver.observe(document, { + childList: true, + subtree: true, + }); + + removeHomepageObserver.disconnect(); +} + +function updateHomepageStyle(homepage) { + updateHomepage(homepage && onHomepage() ? "none" : "flex"); +} + +function onHomepage() { + try { + // Test using path + const pathIsHomepage = window.location.pathname.length <= 1; + + // Test using right-sidebar icons + const iconSelector = "span.title.style-scope.ytd-mini-guide-entry-renderer"; + const icons = document.querySelectorAll(iconSelector); + const iconColors = Array.from(icons).map(icon => window.getComputedStyle(icon, null).getPropertyValue("color")); + const iconColorCounts = getCounts(iconColors); + const homeIcon = icons.length > 0 && icons[0]; + const homeIconColor = homeIcon && window.getComputedStyle(homeIcon, null).getPropertyValue("color"); + const iconColorIsHomepage = homeIconColor && iconColorCounts[homeIconColor] === 1; + + return pathIsHomepage || iconColorIsHomepage; + } catch (e) { + console.log(e); + } +} + +function updateHomepage(property) { + const updateDisplay = elt => elt.style.setProperty("display", property); + const suggestions = document.querySelectorAll(hompageSuggestionsSelector) || []; + suggestions.forEach(updateDisplay); +} + + +function removeSelectors(selectors) { + const cssSheet = document.styleSheets.length > 0 && document.styleSheets[0]; + const displayNoneRule = " { display: none !important; }"; + const compoundSelector = selectors.join(", "); + cssSheet && cssSheet.insertRule(compoundSelector + displayNoneRule); +} + +function onError(error) { + console.log(`Error: ${error}`); +} + +function getCounts(arr) { + return arr.reduce((acc, curr) => { + acc[curr] = curr in acc ? acc[curr] + 1 : 1; + return acc; + }, {}); +} \ No newline at end of file diff --git a/firefox/remove-other-suggestions.js b/firefox/remove-other-suggestions.js new file mode 100644 index 0000000..9c7fbc8 --- /dev/null +++ b/firefox/remove-other-suggestions.js @@ -0,0 +1,109 @@ +// Chrome +if (typeof(chrome) !== 'undefined') { + browser = chrome; + + try { + browser.storage.local.get("sidebar", onGotSidebarSetting); + browser.storage.local.get("videoEnd", onGotVideoEndSetting); + browser.storage.local.get("comments", onGotCommentsSetting); + } catch (e) { + console.log(e); + } + +// Firefox +} else { + + try { + const gettingSidebar = browser.storage.local.get("sidebar"); + gettingSidebar.then(onGotSidebarSetting, onError); + + const gettingVideoEnd = browser.storage.local.get("videoEnd"); + gettingVideoEnd.then(onGotVideoEndSetting, onError); + + const gettingComments = browser.storage.local.get("comments"); + gettingComments.then(onGotCommentsSetting, onError); + } catch (e) { + console.log(e); + } + +} + + +/********** + * Sidebar + **********/ +function onGotSidebarSetting(result) { + const sidebar = result.sidebar === undefined ? true : result.sidebar; + browser.storage.local.set({ sidebar }); + + if (sidebar) { + removeSelectors([ + // video recommendations + "#upnext", + "ytd-compact-video-renderer.style-scope", + "ytd-compact-radio-renderer.style-scope", + + // ads + "#companion", + "ytd-compact-promoted-video-renderer", + "#container.ytd-iframe-companion-renderer", + "#dismissable.ytd-compact-movie-renderer", // movie recommendations + "ytd-movie-offer-module-renderer", // movie recommendations + "ytd-image-companion-renderer.style-scope", + "ytd-compact-playlist-renderer.style-scope", + "a.ytd-action-companion-renderer", + "#google_companion_ad_div", + "ytd-promoted-sparkles-web-renderer", + "ytd-player-legacy-desktop-watch-ads-renderer", + + "paper-button.yt-next-continuation", // show more button + + // disable_polymer=true + "li.video-list-item.related-list-item", + "h4.watch-sidebar-head", + "hr.watch-sidebar-separation-line", + "button#watch-more-related-button", + ]); + } +} + +/*************** + * End of Video + ***************/ +function onGotVideoEndSetting(result) { + const videoEnd = result.videoEnd === undefined ? true : result.videoEnd; + browser.storage.local.set({ videoEnd }); + if (videoEnd) { + removeSelectors([ + ".html5-endscreen" + ]); + } +} + +/*********** + * Comments + ***********/ +function onGotCommentsSetting(result) { + const comments = result.comments === undefined ? false : result.comments; + browser.storage.local.set({ comments }); + if (comments) { + removeSelectors([ + // standard + "ytd-comment-thread-renderer", + + // for disable_polymer=true + "#comment-secyoutubetion-renderer-items" + ]); + } +} + +function removeSelectors(selectors) { + const cssSheet = document.styleSheets.length > 0 && document.styleSheets[0]; + const displayNoneRule = " { display: none !important; }"; + const compoundSelector = selectors.join(", "); + cssSheet && cssSheet.insertRule(compoundSelector + displayNoneRule); +} + +function onError(error) { + console.log(`Error: ${error}`); +}