KLPBBS Beautify

Custom your forum!

// ==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';
})();