diff --git a/fediverse/pleroma_cw_toggle.user.js b/fediverse/pleroma_cw_toggle.user.js index 05c462b..ea985dc 100644 --- a/fediverse/pleroma_cw_toggle.user.js +++ b/fediverse/pleroma_cw_toggle.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name Pleroma CW toggle -// @description Adds a button to toggle the visibility of all statuses with content warnings on status-pages and profile-pages. -// @version 2019.06.07.4 +// @description Adds a button to toggle the visibility of all statuses with content warnings on status-pages, profile-pages and timelines. +// @version 2019.06.12.1 // @author tastytea // @copyright 2019, tastytea (https://tastytea.de/) // @license GPL-3.0-only @@ -12,6 +12,9 @@ // @grant none // @match https://*/notice/* // @match https://*/users/* +// @match https://*/main/friends +// @match https://*/main/public +// @match https://*/main/all // @run-at document-end // @inject-into content // ==/UserScript== @@ -20,13 +23,12 @@ let interval; let counter = 0; // Toggle the visibility of statuses with CW. -function toggle() +function toggle(parent) { - const main = document.getElementsByClassName("main")[0]; - let hyperlinks = main.getElementsByClassName("cw-status-hider"); + let hyperlinks = parent.getElementsByClassName("cw-status-hider"); if (hyperlinks.length === 0) // If no status is hidden, hide all. { - hyperlinks = main.getElementsByClassName("status-unhider"); + hyperlinks = parent.getElementsByClassName("status-unhider"); } for (let hyperlink of hyperlinks) @@ -35,42 +37,75 @@ function toggle() } } -function add_button() +function get_root_elements() { - ++counter; - // If this is not Pleroma or we tried 10 times, disable interval. - if (counter > 10 || document.getElementById("app") === null) - { - clearInterval(interval); - return; - } const main = document.getElementsByClassName("main")[0]; // If conversation-heading is not there, try profile-tabs. - let root = main.getElementsByClassName("conversation-heading")[0]; - if (root === undefined) + let root = main.getElementsByClassName("conversation-heading"); + if (root.length === 0) { - root = main.getElementsByClassName("tabs")[0]; + root = main.getElementsByClassName("tabs"); + } + return root; +} + +function add_button(parent) +{ + const button = document.createElement("a"); + button.setAttribute("class", "global-cw-toggle"); + button.setAttribute("style", "margin-left: 1em; cursor: pointer;"); + button.appendChild(document.createTextNode("Toggle all CWs")); + // button.setAttribute("href", "#"); + button.addEventListener('click', function() + { toggle(parent.parentElement); }); + parent.append(button); +} + +function check() +{ + const re = new RegExp( + '(/main/(friends|public|all)|/users/[^/]+/(mentions|dms))#?$'); + const is_timeline = re.test(window.location.href); + + if (!is_timeline) // If we are on a timeline, don't stop checking. + { + ++counter; + // If this is not Pleroma or we tried 10 times, disable interval. + if (counter > 10 || document.getElementById("app") === null) + { + clearInterval(interval); + return; + } } + const main = document.getElementsByClassName("main")[0]; + const root = get_root_elements(); // if root element and a status was found, disable interval and add button. - if (root !== undefined + if (root.length !== 0 && main.getElementsByClassName("status-content").length > 0) { - clearInterval(interval); - - // Only add button if one or more statuses have a CW. - if (main.getElementsByClassName("cw-status-hider").length > 0 - || main.getElementsByClassName("status-unhider").length > 0) + if (!is_timeline) { - const button = document.createElement("a"); - button.setAttribute("style", "margin-left: 1em;"); - button.appendChild(document.createTextNode("Toggle all CWs")); - button.setAttribute("href", "#"); - button.onclick = toggle; - root.append(button); + clearInterval(interval); + } + + for (let element of root) + { + // Only add button if one or more statuses have a CW. + if (main.getElementsByClassName("cw-status-hider").length > 0 + || main.getElementsByClassName("status-unhider").length > 0) + { + if (element.getElementsByClassName("global-cw-toggle") + .length > 0) // Skip if button is already there. + { + continue; + } + + add_button(element); + } } } } -interval = setInterval(add_button, 1000); // Try to add button every second. +interval = setInterval(check, 1000); // Try to add button every second.