Wokeden

修改高登網頁嘅台名及背景顏色

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Wokeden
// @namespace    http://tampermonkey.net/
// @version      0.4
// @description  修改高登網頁嘅台名及背景顏色
// @author       居理夫人
// @match        *://*.hkgolden.com/*
// @grant        none
// @license GNU General Public License v3.0.
// ==/UserScript==

(function() {
    'use strict';

    // 修改台名嘅list
    const nameChanges = {
        "吹水台": "中立台",
        "高登熱": "Trending",
        "最 新": "多元新政",
        "時事台": "社會正義",
        "娛樂台": "多元性格",
        "體育台": "環保運動",
        "財經台": "社會主義",
        "學術台": "性別認同",
        "講故台": "白人暴力",
        "創意台": "多樣創意",
        "超自然台": "JSO運動",
        "優惠台": "零元購物",
        "遊戲台": "政確遊戲",
        "飲食台": "素食文化",
        "旅遊台": "FREE GAZA"
    };

    // 修改台icon嘅list
    const svgMapping = {
        "channel-BW": "https://raw.githubusercontent.com/Ramen-LadyHKG/wokeden/bef98d610730792b2de8d5989b73e2e393c30a1c/channel-BW.svg",
        "channel-CA": "https://raw.githubusercontent.com/Ramen-LadyHKG/wokeden/bef98d610730792b2de8d5989b73e2e393c30a1c/channel-CA.svg",
        "channel-CP": "https://raw.githubusercontent.com/Ramen-LadyHKG/wokeden/bef98d610730792b2de8d5989b73e2e393c30a1c/channel-CP.svg",
        "channel-ED": "https://raw.githubusercontent.com/Ramen-LadyHKG/wokeden/bef98d610730792b2de8d5989b73e2e393c30a1c/channel-ED.svg",
        "channel-EP": "https://raw.githubusercontent.com/Ramen-LadyHKG/wokeden/bef98d610730792b2de8d5989b73e2e393c30a1c/channel-EP.svg",
        "channel-ET": "https://raw.githubusercontent.com/Ramen-LadyHKG/wokeden/bef98d610730792b2de8d5989b73e2e393c30a1c/channel-ET.svg",
        "channel-FN": "https://raw.githubusercontent.com/Ramen-LadyHKG/wokeden/bef98d610730792b2de8d5989b73e2e393c30a1c/channel-FN.svg",
        "channel-GM": "https://raw.githubusercontent.com/Ramen-LadyHKG/wokeden/bef98d610730792b2de8d5989b73e2e393c30a1c/channel-GM.svg",
        "channel-SN": "https://raw.githubusercontent.com/Ramen-LadyHKG/wokeden/bef98d610730792b2de8d5989b73e2e393c30a1c/channel-SN.svg",
        "channel-SP": "https://raw.githubusercontent.com/Ramen-LadyHKG/wokeden/bef98d610730792b2de8d5989b73e2e393c30a1c/channel-SP.svg",
        "channel-ST": "https://raw.githubusercontent.com/Ramen-LadyHKG/wokeden/bef98d610730792b2de8d5989b73e2e393c30a1c/channel-ST.svg",
        "channel-SY": "https://raw.githubusercontent.com/Ramen-LadyHKG/wokeden/bef98d610730792b2de8d5989b73e2e393c30a1c/channel-SY.svg",
        "channel-TR": "https://raw.githubusercontent.com/Ramen-LadyHKG/wokeden/bef98d610730792b2de8d5989b73e2e393c30a1c/channel-TR.svg"
    };


    // �去改顏色同埋台名
    function changeBackgroundColors() {
        // 修改台名
        const spans = document.querySelectorAll('span.MuiTypography-root.MuiListItemText-primary');
        spans.forEach(span => {
            const newText = nameChanges[span.textContent.trim()];
            if (newText) {
                span.textContent = newText; // 修改台名
            }

        });
        	// 修改喺文章header位置嘅台名
        const currentchannel = document.evaluate('/html/body/div[1]/div/div[1]/main/div[3]/div[1]/header/div/div/div[1]/div[1]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;

        if (currentchannel) {
		const newText = nameChanges[currentchannel.textContent.trim()];
		if (newText) {
			currentchannel.textContent = newText; // 修改台名
		}
	}


        // 修改背景顏色
        document.body.style.background = 'linear-gradient(to right, red, orange, yellow, green, cyan, blue, violet)';

        const header = document.evaluate('/html/body/div[1]/div/header', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
        if (header) {
            header.style.background = 'linear-gradient(to right, red, orange, yellow, green, aqua, blue, violet)'; // 修改持續header背景
        }

        // 修改轉台欄位多個div嘅背景
        const navDivs = [
            '/html/body/div[1]/div/div/nav/div/div/div/div[1]',
            '/html/body/div[1]/div/div/nav/div/div/div/div[2]/div',
            '/html/body/div[1]/div/div/nav/div/div/div/div[3]/div',
            '/html/body/div[1]/div/div/nav/div/div/div/div[4]/div',
            '/html/body/div[1]/div/div/nav/div/div/div/div[5]/div',
            '/html/body/div[1]/div/div/nav/div/div/div/div[6]/div'
        ];
        navDivs.forEach(xpath => {
            const element = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
            if (element) {
                element.style.background = 'linear-gradient(rgb(251 22 22) 0%, rgb(215 126 85) 80%, rgba(255, 0, 0, 0) 100%)';
            }
        });

        const mainHeader = document.evaluate('/html/body/div[1]/div/div/main/div[3]/div[1]/header', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
        if (mainHeader) {
            mainHeader.style.background = 'linear-gradient(to right, #ff8d00, #ffc300, #fffc00, #8dc600, #008204, #00c68d, #00fdfa, #005fff)'; // 修改主header背景
        }

        const navBackground = document.evaluate('/html/body/div[1]/div/div/nav/div/div/div', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
        if (navBackground) {
            navBackground.style.background = 'none'; // 修改轉台欄嘅背景
        }

                const headerDiv = document.evaluate('/html/body/div[1]/div/div/main/div[3]/div[1]/header/div/div/div[1]/div[2]/div', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
        if (headerDiv) {
            headerDiv.style.background = '#b320a3'; // 修改ForumMenu背景
        }

        const ForumMenu = document.evaluate('//*[@id="mui-component-select-切換"]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
        if (ForumMenu) {
            ForumMenu.style.background = '#b320a3'; // 修改ForumMenu背景
        }

        const searchtype = document.evaluate('//*[@id="mui-component-select-搜尋"]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
        const searchbar = document.evaluate('/html/body/div[1]/div/header/div/div/div[2]/div/div/div[2]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
        const searchbutton = document.evaluate('/html/body/div[1]/div/header/div/div/div[2]/div/div/div[3]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;

        // 修改searchbar

        if (searchtype) {
            searchtype.style.background = '#b320a3';
        }
        if (searchbar) {
            searchbar.style.backgroundColor = "#b320a3";
        }
        if (searchbutton) {
            searchbutton.style.backgroundColor = '#b320a3';
        }

        const sideAD1 = document.evaluate('/html/body/div[1]/div/div/main/div[2]/div[2]/div[1]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
        const sideAD2 = document.evaluate('/html/body/div[1]/div/div/main/div[2]/div[2]/div[2]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;

        if (sideAD1) {
            sideAD1.style.background = "#b320a3";
        }
        if (sideAD2) {
            sideAD2.style.background = '#b320a3';
        }

        const bam1 = document.evaluate('/html/body/div[1]/div/div/main/div[3]/div[2]/div/div[1]/div/div/header', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
        const bam2 = document.evaluate('/html/body/div[1]/div/div/main/div[3]/div[2]/div/div[1]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
        const bamBG1 = document.evaluate('/html/body/div[1]/div/div/main/div[3]/div[2]/div', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
        const bamBG2 = document.evaluate('/html/body/div[1]/div/div/main/div[3]/div[2]/div/div[2]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;

        if (bam1) {
            bam1.style.background = "red";
        }
        if (bam2) {
            bam2.style.background = '#ac0707';
        }
        if (bamBG1 && bamBG2) {
            bamBG1.style.background = 'none';
            bamBG2.style.background = 'none';
        }
        const HKGLOGO = document.evaluate('/html/body/div[1]/div/header/div/div/div[1]/div/a/div', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
        if (HKGLOGO) {
            HKGLOGO.style.backgroundImage = 'url(https://raw.githubusercontent.com/Ramen-LadyHKG/wokeden/refs/heads/main/wokeden_logo.png)';
        }

        const AppsAD = document.evaluate('/html/body/div[1]/div/div/main/div[3]/div[2]/div/div[2]/div/div[2]/img', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
        if (AppsAD) {
            AppsAD.style.display = 'none';
        }

        const profileMenu = document.evaluate('/html/body/div[4]/div', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
        if (profileMenu) {
            profileMenu.style.background = 'linear-gradient(to bottom, red, orange, yellow, green, cyan, blue, violet)';
            profileMenu.style.color = 'black';

        }

        // 修改文章 div 嘅背景顏色
        let index = 1;
        while (true) {
            const BlockDiv = document.evaluate(`/html/body/div[1]/div/div/main/div[3]/div[1]/div/div[${index}]`, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
            const NormalDiv = document.evaluate(`/html/body/div[1]/div/div/main/div[3]/div[1]/div/div[${index}]/div`, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
            const AdDiv = document.evaluate(`/html/body/div[1]/div/div/main/div[3]/div[1]/div/div[${index}]/div[2]`, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
            const BlockAd1Div = document.evaluate(`/html/body/div[1]/div/div/main/div[3]/div[1]/div/div[${index}]/div[1]`, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
            const BlockAd3Div = document.evaluate(`/html/body/div[1]/div/div/main/div[3]/div[1]/div/div[${index}]/div[3]`, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
            const BlockAdNextDiv = document.evaluate(`/html/body/div[1]/div/div/main/div[3]/div[1]/div/div[${index}]/div[2]/div`, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
            const NextDiv = document.evaluate(`/html/body/div[1]/div/div/main/div[3]/div[1]/div/div[${index}]/div[1]/div`, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;

            // 檢查正常情況(文章)
            if (NormalDiv && !BlockDiv.textContent.includes("Blocked User")) {
                if (AdDiv) {
                    AdDiv.style.background = 'rgb(134, 5, 5)'; // 廣告背景
                    NextDiv.style.background = 'rgb(194, 54, 54)'; // 廣告後嘅正常文章
                } else {
                    NormalDiv.style.background = 'rgb(194, 54, 54)'; // 正常文章背景
                }
                index++;
            }
            // 檢查特殊情況(封鎖用戶)
            else if (BlockDiv && BlockDiv.textContent.includes("Blocked User") && !BlockAd3Div) {
                BlockDiv.style.background = 'rgb(132, 23, 23)'; // 封鎖用戶背景
                index++;
            }
            // 檢查特殊情況(同時出現封鎖用戶同埋廣告)
            else if (BlockAd3Div && !BlockAd1Div) {
                BlockAd1Div.style.background = 'rgb(132, 23, 23)'; // 封鎖用戶背景
                BlockAd3Div.style.background = 'rgb(134, 5, 5)'; // 廣告背景
                BlockAdNextDiv.style.background = 'rgb(194, 54, 54)'; // 廣告後的正常文章
                index++;
            } else {
                break; // 如果搵唔到更多div就停止
            }
        }
    }

   // 改轉台icon
    function replaceSVGWithImg() {
        const svgElements = document.querySelectorAll('svg[aria-hidden="true"]');

        svgElements.forEach(svg => {
            const useElement = svg.querySelector('use');
            if (useElement) {
                const href = useElement.getAttribute('xlink:href');
                const svgId = href ? href.replace('#', '') : null;
                const imgSrc = svgMapping[svgId];

                if (imgSrc) {
                    const imgElement = document.createElement('img');
                    imgElement.src = imgSrc;
                    imgElement.width = 16;
                    imgElement.height = 16;
                    imgElement.alt = svgId;

                    // 取消 SVG 改用im g
                    svg.parentNode.replaceChild(imgElement, svg);
                }
            }
        });
    }

    // 當頁面載入完成就執行一次
    window.addEventListener('load', () => {
        changeBackgroundColors();
        replaceSVGWithImg();
    });

    // 用MutationObserver 去監控 DOM 嘅變化
    const observer = new MutationObserver((mutationsList) => {
        for (const mutation of mutationsList) {
            if (mutation.type === 'childList' || mutation.type === 'subtree') {
                changeBackgroundColors();
                replaceSVGWithImg();
                break;
            }
        }
    });

    observer.observe(document.body, { childList: true, subtree: true });
})();