Greasy Fork

Greasy Fork is available in English.

谁是股批

"有没有人做一个插件,点开石之家的主页,自动查logs然后显示出来"

当前为 2023-12-20 提交的版本,查看 最新版本

// ==UserScript==
// @name         谁是股批
// @name:en      who-is-browser-gamer
// @namespace    lanyangzhi.github.io
// @version      0.3.1
// @description  "有没有人做一个插件,点开石之家的主页,自动查logs然后显示出来"
// @description:en ffxiv chinese server only
// @author       Lanyangzhi
// @match        *://ff14risingstones.web.sdo.com/*
// @icon         https://assets.rpglogs.cn/img/ff/favicon.png
// @grant        none
// @license      MIT
// ==/UserScript==


const delay = 500;

(function() {
    'use strict';

    function ProcessLocationIcon(startingIcon)
    {
        let parentElement = startingIcon.parentElement.parentElement.parentElement;

        let usernameElement = FindUsernameElement(parentElement);
        //console.log(`获取的用户名: ${usernameElement ? usernameElement.innerText : '未找到'}`);
        let server = FindServer(startingIcon);
        //console.log(`获取的服务器: ${server}`);

        if (usernameElement && server) {
            InsertLogsIcon(usernameElement, server)
        }
    }

    function FindUsernameElement(parentElement)
    {
        // 非个人页:第一个能被鼠标点击、仅包含文本的 span 元素
        let elements = parentElement.querySelectorAll('span.cursor');
        //console.log("找到的元素数量(非个人页): ", elements.length);
        for (let element of elements)
        {
            if (element.childNodes.length == 1 && element.innerText.length >= 1 && element.innerText.length <= 6)
            {
                return element;
            }
        }

        // 个人页
        elements = parentElement.querySelectorAll('span.ft24.ftw');
        for (let element of elements)
        {
            if (element.childNodes.length == 1 && element.innerText.length >= 1 && element.innerText.length <= 6)
            {
                return element;
            }
        }

        return null;
    }

    /*
     * 结构 1:
     *     <i>
     *     <span>
     *         <span>区</span>
     *         <span>服</span>
     *     </span>
     * 结构 2:
     *     <i>
     *     <span>区 服</span>
     * 结构 3:
     *    <i>
     *    <span>区</span>
     *    <span>服</span>
     */
    function FindServer(startingIcon)
    {
        let element = startingIcon.nextElementSibling;
        if (element && element.querySelector('span'))
        {
            element = element.querySelector('span:first-child');
        }
        let text = element.textContent.trim();
        if (text.includes(' '))
        {
            return text.split(' ')[1];
        }
        else
        {
            return element.nextElementSibling ? element.nextElementSibling.textContent : '';
        }
    }

    function InsertLogsIcon(usernameElement, server)
    {
        var newNode = document.createElement('a');
        var username = usernameElement.innerText;
        newNode.id = 'ff-icon';
        newNode.href = `https://cn.fflogs.com/character/CN/${server}/${username}`;
        newNode.innerHTML = '<img src="https://assets.rpglogs.cn/img/ff/favicon.png" height="22px">';

        usernameElement.insertAdjacentElement('afterend', newNode);
        console.log(`FFLogs 图标已添加到:${username}@${server}`);
    }


    // v0.3.1 upd
    setInterval(function() {

        var autherVerify = document.querySelector('.ft20.ftw.mr15.cursor').innerText
        var tName = document.querySelector('.ft28.ftw500').innerText

        if (autherVerify==="五岁徒弟" & tName.includes("招待招募板")){
            var elements = document.querySelectorAll('.icon-location.dwcolor'); // 搜索服务器前的图标作为定位特征

            elements.forEach(function(iconElement) {
                if (!iconElement.hasAttribute('data-logs-processed'))
                {
                    ProcessLocationIcon(iconElement);
                    iconElement.setAttribute('data-logs-processed', 'true'); // 标记已处理
                }
            });
        }
    }, delay);
})();