// ==UserScript== // @name RED/OPS: Remove torrent groups from main collage page, or torrent group page. // @description Instead of going to a separate page (Manage Torrents), which triggers a reload after each deletion, this script allows you to remove torrents from the main collage page, or torrent group page, sans full page reload. // @author _ // @version 0.5 // @match https://redacted.ch/collages.php?*id=* // @match https://redacted.ch/torrents.php?id=* // @match https://orpheus.network/collages.php?*id=* // @match https://orpheus.network/torrents.php?id=* // @run-at document-end // @namespace https://greasyfork.org/users/225448 // @downloadURL https://update.greasyfork.cloud/scripts/450661/REDOPS%3A%20Remove%20torrent%20groups%20from%20main%20collage%20page%2C%20or%20torrent%20group%20page.user.js // @updateURL https://update.greasyfork.cloud/scripts/450661/REDOPS%3A%20Remove%20torrent%20groups%20from%20main%20collage%20page%2C%20or%20torrent%20group%20page.meta.js // ==/UserScript== (async () => { "use strict"; const auth = document.getElementById("nav_logout").firstElementChild.href.match(/auth=([a-z0-9]+)/i)[1]; if (window.document.URL.includes("collages.php")) { const collageID = new URL(window.location).searchParams.get("id"); const response = await fetch(`/collages.php?action=manage&collageid=${collageID}`); if (response.status != 200) return; const removeFromCollage = (e) => { const groupID = e.target.id; const discog = document.querySelector(`tr#group_${groupID}`); const cover = document.querySelector(`.image_group_${groupID}`); discog.style.display = "none"; if (cover != null) { cover.style.display = "none"; } let sibling = discog.nextElementSibling; sibling.style.display = "none"; while (sibling) { if (sibling.matches(".discog")) break; sibling.style.display = "none"; sibling = sibling.nextElementSibling; } fetch("/collages.php", { method: "POST", headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' }, body: `action=manage_handle&auth=${auth}&collageid=${collageID}&groupid=${groupID}&submit=Remove` }); }; const groups = document.querySelectorAll("tr.group.discog"); groups.forEach((group) => { const groupID = group.id.replace("group_", ""); let bookmarkLink = group.querySelector(".add_bookmark"); if (bookmarkLink === null) { bookmarkLink = group.querySelector(".remove_bookmark"); } bookmarkLink.insertAdjacentHTML( "beforebegin", `Remove` ); document.getElementById(groupID).addEventListener("click", removeFromCollage); }); } else { const groupID = new URL(window.location).searchParams.get("id"); const removeFromCollage = (e) => { const collageDesc = e.target.closest('td').innerText.split("\n")[1] if (confirm(`Remove this torrent from collage ${collageDesc}?`) != true) return; const collageID = e.target.id; const collageRow = e.target.closest('tr'); collageRow.style.display = "none"; fetch("/collages.php", { method: "POST", headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' }, body: `action=manage_handle&auth=${auth}&collageid=${collageID}&groupid=${groupID}&submit=Remove` }); }; const collages = document.getElementById("collages"); const personal_collages = document.getElementById("personal_collages"); let combined = [] if (collages) { combined = [...collages.querySelectorAll('tr')].slice(1); } const nonperslen = combined.length; if (personal_collages) { combined = [...combined, ...[...personal_collages.querySelectorAll('tr')].slice(1)]; } if (combined.length == 0) return; combined.forEach(async (row, idx) => { let collageID = row.querySelector('a').href.split("id=")[1] if (idx >= nonperslen) { // personal collage, check if it is ours let response = await fetch(`/collages.php?action=manage&collageid=${collageID}`); if (response.status != 200) return; } row.firstElementChild.insertAdjacentHTML( "afterbegin", `Remove` ); document.getElementById(collageID).addEventListener("click", removeFromCollage); }); } })();