nuke tweet view counts

remove view count numbers & tweet analytics links from Twitter timeline because fuck that

当前为 2022-12-23 提交的版本,查看 最新版本

// ==UserScript==
// @name         nuke tweet view counts
// @namespace    http://elycien.com/
// @version      0.3
// @license      GNU GPLv3
// @description  remove view count numbers & tweet analytics links from Twitter timeline because fuck that
// @author       Elcie
// @match        http*://*twitter.com/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    const targetNode = document.querySelector('body');
    const config = { attributes: true, childList: true, subtree: true };
    const callback = function(mutationsList, observer) {
        for (let mutation of mutationsList) {
            let elements = document.querySelectorAll('[aria-label*="View Tweet analytics"]');
            for (let targetedElement of elements) {
                let parent = targetedElement.parentElement;
                if (parent) {
                    if (parent.style.display != 'none') {
                        parent.style.display = 'none';
                    }
                }
                else {
                    if (targetedElement.style.display != 'none') {
                        targetedElement.style.display = 'none';
                    }
                }
            }
            if (window.location.pathname.includes("status")) {
                elements = document.querySelectorAll('[href*="analytics"]');
                let path = "//span[contains(text(),'View')]";
                for (let targetedElement of elements) {
                    var viewText = document.evaluate(path, targetedElement, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
                    if (viewText) {
                        let parent = targetedElement.parentElement;
                        if (parent) {
                            if (parent.style.display != 'none') {
                                parent.style.display = 'none';
                            }
                        }
                        else {
                            if (targetedElement.style.display != 'none') {
                                targetedElement.style.display = 'none';
                            }
                        }
                    }
                }
            }
        }
    };

    const observer = new MutationObserver(callback);
    observer.observe(targetNode, config);
})();