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