KLPBBS Beautify

Custom your forum!

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         KLPBBS Beautify
// @namespace    cinder/@klpbbs-beautify
// @version      1.0.1
// @description  Custom your forum!
// @author       Cinder
// @match        https://klpbbs.com/*
// @icon         data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGUAAABlCAYAAABUfC3PAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIySURBVHhe7dq/alNhHIfx33tibFNCJRTUgFpU0EkKjhYFwc3BixDvwEHQS3B18RYE3QQHb0BwEtTBTbt0EFr8Q9s0x8nlBTmvpGmenDwfOMuXLOEhJ7w5SQ8fv6mjwe/vX6IeH+TzRB7dvx7nz/bzWRFR5YNmzyhARgFKJd8ph3u7UdfjfJ7IxtW16K9083kiN6/14szgRD7PnaIo8+LB3VNx5dzJfJ473r6AjAJkFCCjABkFyChARgEyClCrDo/3Nvtx4XTZib6/tJRPGK2KklK+/NuN9fV8wmjV7auu23G1KkpbGAXIKEBGATIKkFGAjAJkFKD07Om7xhP9152dGI2P9o8T/+PiYJBPExuuruYTRnr5/HNjlPdbW7E3GuXzsSH/JDIN3r6AjAJkFCCjABkFyChARgEyClDR4fHj9nbsz+jwmFKKjeEwn1utKMrh34fHM9KpFusDXfRuOylFp6pmdi2axXvHc8AoQEYBMgqQUYCMAmQUIKMAGQXIKEBGATIKkFGAjAJkFCCjABkFyChARc/oV3o/IlWNL9MRKYpya/N1LC//ymdNSVGUO7dfRa/3M581JX6nABkFyChARgEyCpBRgIwCZBSg9OHti8bD4+VLn6Lb3c9nTUk6+PakMYqOl7cvIKMAGQXIKEBGATIKkFGAjAJkFCCjABkFyChARgEyCpBRgIwCZBQgowAZBcgoQEYBMgqQUYCMAmQUIKMAGQXIKEBGATIKkFGAjAL0By5PvveMx5urAAAAAElFTkSuQmCC
// @require      https://fastly.jsdelivr.net/gh/sizzlemctwizzle/GM_config@2207c5c1322ebb56e401f03c2e581719f909762a/gm_config.js
// @connect      raw.githubusercontent.com
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM_setClipboard
// @grant        GM_xmlhttpRequest
// @grant        GM_registerMenuCommand
// @license      GPLv3.0
// ==/UserScript==

(function() {
    'use strict';

    var GM_config = new GM_configStruct();
  GM_config.init({
    id: 'klpbeautify',
    title: '苦力怕论坛美化',
    fields: {
      bglink: {
        label: '背景图片',
        type: 'text',
        default: 'https://s21.ax1x.com/2024/08/17/pACRtIO.png'
      },
      logolink: {
        label: '网页Logo',
        type: 'text',
        default: 'https://s2.loli.net/2024/08/17/1yoM6X8czTOECet.png'
      },
      skipexternal: {
        label: '跳过外部链接提示',
        type: 'checkbox',
        default: true
      },
      removeAutoplay: {
        label: '移除自动播放',
        type: 'checkbox',
        default: true
    },
      autosign: {
          label: '自动签到',
          type: 'checkbox',
          default: true
      },
      hitokoto: {
          label: '随机一言',
          type: 'checkbox',
          default: true
      },
      hitocolor: {
        label: '一言颜色',
        type: 'text',
        default: '#696793'
      },
      hitocreatorcolor: {
        label: '一言作者颜色',
        type: 'text',
        default: '#937C55'
      },
      nemusic: {
          label: '云音乐',
          type: 'checkbox',
          default: true
      },
      nemusiclink: {
          label: '云音乐外链播放器Html',
          type: 'textarea',
          default: '<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=310 height=430 src="//music.163.com/outchain/player?type=4&id=1000729940&auto=0&height=430"></iframe>'
      },
      jpd2cnd: {
          label: '星期转换为中文写法',
          type: 'checkbox',
          default: true
      },
      removecpt: {
          label: '移除顶部我的帖子及最新回复导航栏',
          type: 'checkbox',
          default: true
      },
      removetop: {
          label: '移除顶部导航栏',
          type: 'checkbox',
          default: true
      },
      removead: {
          label: '移除右边栏广告',
          type: 'checkbox',
          default: true
      },
      removebanner: {
          label: '移除顶部数据栏',
          type: 'checkbox',
          default: true
      },
      removetag: {
          label: '移除右侧标签栏',
          type: 'checkbox',
          default: true
      },
      removerank: {
          label: '移除右侧帖子排行',
          type: 'checkbox',
          default: true
      },
      removenewrep: {
          label: '移除右侧最新回复',
          type: 'checkbox',
          default: true
      },
      removepic: {
          label: '移除版头上部图片',
          type: 'checkbox',
          default: true
      },
      headcolor: {
        label: '顶栏颜色',
        type: 'text',
        default: '#9932CC'
      },
      footcolor: {
        label: '底栏颜色',
        type: 'text',
        default: '#9932CC'
      },
      postcolor: {
        label: '投稿按钮颜色',
        type: 'text',
        default: '#9932CC'
      },
      menucolor: {
        label: '导航按钮颜色',
        type: 'text',
        default: '#C71585'
      },
      signcolor: {
        label: '签到按钮颜色',
        type: 'text',
        default: '#DA70D6'
      },
      listitemcolor: {
        label: '列表按钮颜色',
        type: 'text',
        default: '#FFB6C1'
      },
      newpostcolor: {
        label: '版块新帖数量颜色',
        type: 'text',
        default: '#7B68EE'
      },
      newscolor: {
        label: '消息提醒颜色',
        type: 'text',
        default: '#FF00FF'
      },
      fastrepcolor: {
        label: '右侧快速回复颜色',
        type: 'text',
        default: '#F691B3'
      },
      retlistcolor: {
        label: '右侧返回列表颜色',
        type: 'text',
        default: '#DA70D6'
      },
      rettopcolor: {
        label: '右侧回到顶部颜色',
        type: 'text',
        default: '#9932CC'
      },
      coincolor: {
        label: '评分装饰条配色',
        type: 'text',
        default: '#FFD1D1'
      },
    }
  });
  GM_registerMenuCommand('编辑配置', () => GM_config.open());

    function setBackgroundImage(url) {
    document.body.style.backgroundImage = `url(${url})`;
    document.body.style.backgroundSize = "cover";
    document.body.style.backgroundPosition = "center";
    document.body.style.backgroundRepeat = "no-repeat";
    }

    let bglink = GM_config.get('bglink');
    let logolink = GM_config.get('logolink');

    //Auto Sign
    if (GM_config.get('autosign')) {
        var signElement = document.getElementById('midaben_sign');
        if (signElement) {
            var links = signElement.getElementsByTagName('a');
            function matchesLink(link) {
                var href = link.href;
                var regex = /format=button/;
                return regex.test(href);
            }
            for (var i = 0; i < links.length; i++) {
                if (matchesLink(links[i])) {
                    links[i].click();
                    showError("自动签到成功");
                    break;
                } else {
                    console.log('Already signed.');
                }
            }
        }
    }

    if (GM_config.get('skipexternal')) {
        const links = document.querySelectorAll('a.text-decoration-none');
        links.forEach(link => {
            link.click();
            showError("自动跳转链接");
        });
    }

    if (GM_config.get('removeAutoplay')) {
        const audioElements = document.querySelectorAll('audio');
        var count = 0;
        audioElements.forEach(audio => {
            if (audio.hasAttribute('autoplay')) {
                audio.removeAttribute('autoplay');
                count++;
            }
        });
        if (count != 0) {
            showError(`移除了 ${count} 个自动播放`);
        }
    }

    function removeElementsById(id) {
        let elements = document.getElementById(id);
        if(elements) {
            elements.parentNode.removeChild(elements);
        }
    }

    if (GM_config.get('removetop')) {
        removeElementsById('toptb');
    }
    if (GM_config.get('removead')) {
        removeElementsById('diy_ad');
    }
    if (GM_config.get('removead')) {
        removeElementsById('cpt');
    }

    const imageUrl = `${bglink}`;
    setBackgroundImage(imageUrl);

    function changeBackgroundColor(selector, color) {
        const elements = document.querySelectorAll(selector);
        elements.forEach(element => {
            element.style.backgroundColor = color;
        });
    }

    changeBackgroundColor('.c_nv', `${GM_config.get('headcolor')}`);
    changeBackgroundColor('.sd_post.z', `${GM_config.get('postcolor')}`);
    changeBackgroundColor('.sd_qmenu', `${GM_config.get('menucolor')}`);
    changeBackgroundColor('.midaben_signpanel.JD_sign', `${GM_config.get('signcolor')}`);
    changeBackgroundColor('.cft', `${GM_config.get('footcolor')}`);
    changeBackgroundColor('.child.fa.fa-eject', `${GM_config.get('rettopcolor')}`);
    changeBackgroundColor('.midaben_signpanel JD_sign visted', `${GM_config.get('signcolor')}`);
    changeBackgroundColor('.cpost', `${GM_config.get('postcolor')}`);
    changeBackgroundColor('.child.fa.fa-outdent', `${GM_config.get('retlistcolor')}`);
    changeBackgroundColor('.psth.xs1', `${GM_config.get('coincolor')}`);
    changeBackgroundColor('.child.fa.fa-comment', `${GM_config.get('fastrepcolor')}`);

    let test = document.querySelectorAll('.psth.xs1');
    console.log(test);

    function changeListItemsBackgroundColor(color) {
        var divs = document.getElementsByClassName('hd');
        for (var i = 0; i < divs.length; i++) {
            var lis = divs[i].getElementsByTagName('li');
            if (lis.length > 0) {
                for (var j = 0; j < lis.length; j++) {
                    lis[j].style.backgroundColor = color;
                }
            }
        }
    }
    changeListItemsBackgroundColor(`${GM_config.get('listitemcolor')}`);

    changeBackgroundColor('.shan', `${GM_config.get('newscolor')}`);
    changeBackgroundColor('.ctodayposts', `${GM_config.get('newpostcolor')}`);

    var maxWidth = 66;
    var maxHeight = 66;

    var newImgUrl = `${logolink}`;

    var imgElement = document.querySelector('img[alt="Minecraft(我的世界)苦力怕论坛"]');

    if (imgElement) {
        imgElement.src = newImgUrl;
        imgElement.style.maxWidth = maxWidth + 'px';
        imgElement.style.maxHeight = maxHeight + 'px';
        imgElement.style.display = 'block';
        imgElement.style.margin = 'auto';
    }

    function removeElementsByClass(className) {
        var elements = document.querySelectorAll(className);
        if (elements) {
            for (let i = elements.length - 1; i >= 0; i--) {
                elements[i].parentNode.removeChild(elements[i]);
            }
        }
    }

    function insertBefore(newNode, referenceNode) {
        referenceNode.parentNode.insertBefore(newNode, referenceNode);
    }

    if (GM_config.get('removetag')) {
        removeElementsByClass('.sd_mkes.sd_tag');
    }
    if (GM_config.get('removerank')) {
        removeElementsByClass('.sd_mkes.sd_rank');
    }
    if (GM_config.get('removenewrep')) {
        removeElementsByClass('.sd_mkes.sd_reply.last_btm');
    }
    if (GM_config.get('removepic')) {
        removeElementsByClass('.cbanner');
    }

    var targetContainer = document.getElementsByClassName('sdsd')[0];
    var beforeElement = document.getElementById('midaben_sign');
    var clock = document.getElementsByClassName('chart_sd y')[0];

    var clockContainer = document.createElement('div');
    clockContainer.style.width = '300px';

    if (GM_config.get('jpd2cnd')) {//-------------------------------------------星期转换
        clockContainer.style.height = '185px'
        function replaceWeekdayText() {
            var weekDaysJP = ['日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日'];
            var weekDaysCN = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];

            for (var i = 0; i < weekDaysJP.length; i++) {
                var weekdayElement = document.querySelector('.cweek strong span');
                if (weekdayElement.innerText === weekDaysJP[i]) {
                    weekdayElement.innerText = weekDaysCN[i];
                    break;
                }
            }
        }
        replaceWeekdayText();
    } else {
        clockContainer.style.height = '200px'
    }

    if (GM_config.get('removebanner')) {
        removeElementsByClass('.chart_tj.z.cl');
        clock.style.margin = '0px';
        clock.style.paddingLeft = '50px';
        clock.style.paddingRight = '50px';
        clock.style.paddingBottom = '20px';
        if (targetContainer && clock) {
            if (clock.parentNode) {
            clock.parentNode.removeChild(clock);
            }
            clockContainer.appendChild(clock);
            insertBefore(clockContainer, beforeElement);
        }
    }

    if (GM_config.get('hitokoto')) {//--------------------------------------------一言
        var hitokoto = document.createElement('div');
        hitokoto.className = 'sd_mk cl';
        hitokoto.style.height = '100px';
        hitokoto.style.marginBottom= '10px'

        fetch('https://v1.hitokoto.cn/')
            .then(response => response.json())
            .then(data => {
            var hitokotoText = data.hitokoto;
            var creator = data.from_who ? `——${data.from_who}` : '';
            var hitokotoSpan = document.createElement('span');
            hitokotoSpan.textContent = `“${hitokotoText}”`;
            hitokotoSpan.style.color = `${GM_config.get('hitocolor')}`;
            var creatorSpan = document.createElement('span');
            creatorSpan.textContent = creator;
            creatorSpan.style.textAlign = 'right';
            creatorSpan.style.position = 'absolute';
            creatorSpan.style.right = '10px';
            creatorSpan.style.bottom = '10px';
            creatorSpan.style.textAlign = 'right';
            creatorSpan.style.color = `${GM_config.get('hitocreatorcolor')}`;

            hitokoto.appendChild(hitokotoSpan);
            hitokoto.appendChild(creatorSpan);
            hitokoto.style.fontSize = '18px';
            hitokoto.style.position = 'relative';

            insertBefore(hitokoto, beforeElement);
        })
    }

    if (GM_config.get('nemusic')) {//------------------------------------------------网易云音乐
        var musichtml = GM_config.get('nemusiclink');
        var music = `<div>${musichtml}</div>`;
        targetContainer.insertAdjacentHTML('beforeend', music);
    }

    var postbutton = document.getElementsByClassName('sd_mk cl')[0];
    postbutton.style.marginBottom = '10px';
})();