Greasy Fork

Greasy Fork is available in English.

VoidVerified

Display a verified sign next to user's name in AniList.

当前为 2023-10-01 提交的版本,查看 最新版本


// ==UserScript==
// @name         VoidVerified
// @namespace    http://tampermonkey.net/
// @version      0.3.3
// @description  Display a verified sign next to user's name in AniList.
// @author       voidnyan
// @match        https://anilist.co/*
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';
    const version = "0.3.3";
    const evaluationIntervalInSeconds = 1;

    const verified = {
        username: {
            enabled: true,
            enabledForReplies: true,
            enabledForProfileName: true,
            color: "white",
            sign: "✔",
        },
        highlight: {
            enabled: true,
            enabledForReplies: true,
            enabledForSmallCards: false,
            color: undefined,
            size: "5px",
        }
    };

    const shouldIntervalBeUsed = verified.username.enabledForProfileName || verified.highlight.enabled;

    const verifiedUsers = [
        {
            username: "voidnyan",
            color: "#f8aade",
            sign: "💻",
        },
    ].map(u => typeof u === "string" ? {username: u} : u);

    let usernameStyles = "";
    let highlightStyles = "";

    for (const user of verifiedUsers){
        if (verified.username.enabled) {
            createUsernameCSS(user);
        }

        if (verified.highlight.enabled) {
            createHighlightCSS(user, `div.wrap:has( div.header > a.name[href*="${user.username}"] )`);
            createHighlightCSS(user, `div.wrap:has( div.details > a.name[href*="${user.username}"] )`);
        }

        if (verified.highlight.enabledForReplies) {
            createHighlightCSS(user, `div.reply:has( a.name[href*="${user.username}"] )`);
        }
    }

    if (verified.highlight.enabled && !verified.highlight.enabledForSmallCards) {
        disableHighlightOnSmallCards();
    }

    function createUsernameCSS(user) {
        usernameStyles += `
            a.name[href*="${user.username}"]::after {
                content: "${user.sign ?? verified.username.sign}";
                color: ${user.color ?? verified.username.color ?? "rgb(var(--color-blue))"}
            }
            `;
    };

    function createHighlightCSS(user, selector){
        highlightStyles += `
            ${selector} {
                margin-right: -${verified.highlight.size};
                border-right: ${verified.highlight.size} solid ${user.color ?? verified.highlight.color ?? "rgb(var(--color-blue))"};
                border-radius: 5px;
            }
            `;
        }

    function disableHighlightOnSmallCards(){
        highlightStyles += `
            div.wrap:has(div.small) {
            margin-right: 0px !important;
            border-right: 0px solid black !important;
            }
            `;
        }

    const usernameLink = createStyleLink(usernameStyles, "username");
    const highlightLink = createStyleLink(highlightStyles, "highlight");
    const profileLink = createStyleLink("", "profile");

    function refreshHomePage(){
        if (!verified.highlight.enabled) {
            return;
        }

        const oldHighlightLink = document.getElementById("void-verified-highlight-styles");
        const newHighlightLink = createStyleLink(highlightStyles, "highlight");
        oldHighlightLink.remove();
        // highlightLink.href = 'data:text/css;charset=UTF-8,' + encodeURIComponent(highlightStyles + randomnumber);

    }

    function verifyProfile(){
        if (!verified.username.enabledForProfileName) {
            return;
        }

        const usernameHeader = document.querySelector("h1.name");
        const username = usernameHeader.innerHTML.trim();

        const user = verifiedUsers.find(u => u.username === username);
        if (!user){
            profileLink.href = 'data:text/css;charset=UTF-8,' + encodeURIComponent("");
            return;
        }

        const profileStyle = `
                h1.name::after {
                content: "${user.sign ?? verified.username.sign}"
                }
            `;
            profileLink.href = 'data:text/css;charset=UTF-8,' + encodeURIComponent(profileStyle);
        }

    function createStyleLink(styles, id){
        const link = document.createElement('link');
        link.setAttribute('id', `void-verified-${id}-styles`);
        link.setAttribute('rel', 'stylesheet');
        link.setAttribute('type', 'text/css');
        link.setAttribute('href', 'data:text/css;charset=UTF-8,' + encodeURIComponent(styles));
        document.head?.append(link);
        return link;
    }

    function handleIntervalScripts(){
        const path = window.location.pathname;
        if (path === "/home") {
            refreshHomePage();
        } else if (path.startsWith("/user/")){
            verifyProfile();
        }
    }

    if (shouldIntervalBeUsed) {
        setInterval(handleIntervalScripts, evaluationIntervalInSeconds * 1000);
    }

    console.log(`VoidVerified ${version} loaded.`);
})();