Tumblr hide without blocking

Hides conversations in the messages dialog with specific users, and stops those users from appearing as suggested recipients of posts when you click share.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name        Tumblr hide without blocking
// @namespace   https://github.com/holyspiritomb
// @match       https://www.tumblr.com/*
// @grant       GM_getValue
// @grant		GM_setValue
// @grant       GM_addStyle
// @grant		GM_listValues
// @version     0.0.5
// @author      holyspiritomb
// @run-at      document-end
// @require     https://code.jquery.com/jquery-latest.min.js
// @require     https://greasyfork.org/scripts/446257-waitforkeyelements-utility-function/code/waitForKeyElements%20utility%20function.js?version=1059316
// @inject-into page
// @icon        https://www.google.com/s2/favicons?domain=tumblr.com
// @description Hides conversations in the messages dialog with specific users, and stops those users from appearing as suggested recipients of posts when you click share.
// ==/UserScript==

let valueArrayList = GM_listValues();

function inList(itemToTest, someList) {
    let itemIndex = someList.indexOf(itemToTest);
    if (itemIndex == -1) {
        return false;
    } else {
        return true;
    }
}

function annotateConversations() {
    $('button[aria-label=Conversation] div.pTvJc').each(function() {
        let friendName = $(this)[0].innerText;
        let conversation = $(this).closest('button');
        let convClasses = Array.from(conversation[0].classList);
        if (convClasses.indexOf(friendName) == -1) {
            conversation.addClass(friendName);
            console.log(`added ${friendName} as class to a conversation`);
        }
    });
}

if (valueArrayList) {

    console.log("get value of key hiddenRecipients");
    let hiddenRecipients = Array.from(GM_getValue("hiddenShareRecipients"));

    if (hiddenRecipients[0] != "hiddenfriend") {
        console.log("processing array of hidden recipients in share popup");
        for (friend of hiddenRecipients) {
            console.log(`adding css to hide ${friend} from share popup`);
            GM_addStyle(`button[aria-label="Select ${friend}"]{display:none;}`);
        };
    } else {
        console.log("no one to hide in the share popup");
    }

    let hiddenConversations = Array.from(GM_getValue("hiddenConversations"));

    if (hiddenConversations[0] != "hiddenfriend") {
        for (hiddenConversationPartner of hiddenConversations) {
            //console.log(`adding css rule to hide ${hiddenConversationPartner} in conversations`);
            GM_addStyle(`button[aria-label=Conversation].${hiddenConversationPartner}{display:none;}`);
        };
        let currentPage = document.location.href;
        if (currentPage == "https://www.tumblr.com/messaging") {
            waitForKeyElements("button[aria-label='Conversation'] div.pTvJc", function() {
                annotateConversations();
            }, false, 1000, 20);
        } else {
            waitForKeyElements("button[aria-label='Conversation'] div.pTvJc", function() {
                annotateConversations();
            }, false, 300, -1);
        }
    } else {
        console.log("no conversations to hide");
    }

} else {
    console.log("No values stored. making default keys now");
    GM_setValue("hiddenShareRecipients", ["hiddenfriend"]);
    GM_setValue("hiddenConversations", ["hiddenfriend"]);
}