diff --git a/manifest.json b/manifest.json index 6b123c6..75d6caf 100644 --- a/manifest.json +++ b/manifest.json @@ -2,7 +2,7 @@ "description": "Enables you to fight your youtube addiction by hiding video suggestions and related 'features' of YouTube's website. If you really want to, you can temporarily unhide those elements.", "manifest_version": 2, "name": "YT addiction control", - "version": "0.1", + "version": "0.1.1", "homepage_url": "https://gitlab.com/arnekeller/yt-addiction-control", "icons": { diff --git a/youtube-addiction-control-extension-firefox.js b/youtube-addiction-control-extension-firefox.js index f4e2df2..8cbe82c 100644 --- a/youtube-addiction-control-extension-firefox.js +++ b/youtube-addiction-control-extension-firefox.js @@ -6,7 +6,7 @@ Array.from(document.getElementsByClassName(STYLE_CLASS)).forEach((e) => { e.remove(); }); -let ytacCSS = { +window.ytacCSS = { "sidebar": "#related", "comments": "#comments", "endscreen": ".videowall-endscreen", @@ -15,24 +15,37 @@ let ytacCSS = { "other": "#newness-dot, .ytp-spinner" }; -const INVISIBLE = " { display: none !important; }" +const INVISIBLE = " { display: none !important; }"; -let head = document.getElementsByTagName('head')[0]; -for (key of Object.keys(ytacCSS)) { +function addCSS(key) { + if (document.getElementById("ytac" + key) !== null) { + return; + } + let head = document.getElementsByTagName('head')[0]; let e = document.createElement('style'); e.setAttribute('type', 'text/css'); e.setAttribute("class", STYLE_CLASS); e.setAttribute("id", "ytac" + key); if ('textContent' in e) { - e.textContent = ytacCSS[key] + INVISIBLE; + e.textContent = window.ytacCSS[key] + INVISIBLE; } else { - e.styleSheet.cssText = ytacCSS[key] + INVISIBLE; + e.styleSheet.cssText = window.ytacCSS[key] + INVISIBLE; } head.appendChild(e); } +function addClickListeners(key) { + for (el of document.querySelectorAll(window.ytacCSS[key])) { + el.addEventListener("click", (e) => addCSS(key)); + } +} + +for (key of Object.keys(window.ytacCSS)) { + addCSS(key); +} + // browser action listener // Listen for messages from the background script. @@ -43,19 +56,23 @@ window.ytacListener = (message) => { console.log("[YTAC] received browser action " + message.command); if (message.command == "comments") { console.log("[YTAC] showing comments"); - document.getElementById("ytaccomments").remove(); + document.getElementById("ytaccomments").remove(); } else if (message.command == "sidebar") { console.log("[YTAC] showing video sidebar"); document.getElementById("ytacsidebar").remove(); + addClickListeners("sidebar"); } else if (message.command == "invideo") { console.log("[YTAC] showing in-video suggestions"); document.getElementById("ytacinvideo").remove(); + addClickListeners("invideo"); } else if (message.command == "endscreen") { console.log("[YTAC] showing endscreen"); document.getElementById("ytacendscreen").remove(); + addClickListeners("endscreen"); } else if (message.command == "notification") { console.log("[YTAC] showing notification bell"); document.getElementById("ytacnotification").remove(); + addClickListeners("notification"); } }; browser.runtime.onMessage.addListener(window.ytacListener); @@ -80,4 +97,14 @@ function modifyThings() { showMoreButton[0].click(); } } -modifyThings(); \ No newline at end of file +modifyThings(); + +// attempt to hide the notification count in the title + +function hideNotificationCount() { + let a = document.getElementsByTagName("title")[0]; + if (a.innerText.match("^\\(\\d+\\).*")) { + a.innerText = a.innerText.substr(a.innerText.indexOf(")") + 2); + } +} +setInterval(hideNotificationCount, 1000); \ No newline at end of file