// ==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
// @run-at document-end
// @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);
}