// ==UserScript== // @name SoundCloud: Toggle Reposts // @description Toggle the visibility of reposts on the stream and artists page. // @version 2022.9.12 // @author garylaski // @namespace https://github.com/garylaski/userscripts // @match https://soundcloud.com/* // @licence GPL-3.0-or-later; http://www.gnu.org/licenses/gpl-3.0.txt // @downloadURL none // ==/UserScript== const app = document.getElementById("app"); const config = { childList: true, subtree: true }; var drewSwitch = false; var showReposts; var toggleButtonHandle; function checkCookie() { if(document.cookie.split('; ').find((row) => row.startsWith('showReposts='))?.split('=')[1]) { showReposts = document.cookie.split('; ').find((row) => row.startsWith('showReposts='))?.split('=')[1]; } else { document.cookie="showReposts="+showReposts; } } //Stream and UserStream const callback = (mutationList, observer) => { for (const mutation of mutationList) { if (mutation.type === 'childList' && document.querySelector(".stream, .userStream") && !drewSwitch) { if (document.querySelector(".lazyLoadingList, .soundList")) { drewSwitch = true; document.querySelector(".profileTabs, .stream__header").innerHTML += `
`; document.getElementById("toggleButton").addEventListener("click", toggle); toggleButtonHandle = document.getElementById("toggleButtonHandle"); observer.disconnect(); checkCookie(); if(showReposts === 'false') { toggleButtonHandle.classList.remove("sc-toggle-on"); toggleButtonHandle.classList.remove("sc-toggle-active"); toggleButtonHandle.classList.add("sc-toggle-off"); } postObserver.observe(document.querySelector(".userMain, .stream"), config); } } } }; const appObserver = new MutationObserver(callback); const postObserver = new MutationObserver(evalReposts); appObserver.observe(app, config); function evalReposts() { for (const item of document.querySelectorAll(".soundList__item")) { if (item.querySelector(".soundContext__repost, .sc-ministats-reposts")) { if (showReposts === 'true') { item.style.display = "block"; } else { item.style.display = "none"; } } } } function toggle() { if(showReposts === 'false') { toggleButtonHandle.classList.remove("sc-toggle-off"); toggleButtonHandle.classList.add("sc-toggle-on"); toggleButtonHandle.classList.add("sc-toggle-active"); showReposts = 'true'; } else { toggleButtonHandle.classList.remove("sc-toggle-on"); toggleButtonHandle.classList.remove("sc-toggle-active"); toggleButtonHandle.classList.add("sc-toggle-off"); showReposts = 'false'; } document.cookie="showReposts="+showReposts; evalReposts(); } let lastUrl = location.href; new MutationObserver(() => { const url = location.href; if (url !== lastUrl) { lastUrl = url; onUrlChange(); } }).observe(document, {subtree: true, childList: true}); function onUrlChange() { drewSwitch = false; appObserver.observe(app, config); }