FLOJ UserName Mapper

想看到编号下的真实姓名?这个将会满足你!

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==UserScript==
// @name         FLOJ UserName Mapper
// @namespace    http://tampermonkey.net/
// @version      0.1.4
// @description  想看到编号下的真实姓名?这个将会满足你!
// @author       iotang
// @match        https://floj.tech/*
// @grant        GM_setValue
// @grant        GM_getValue
// ==/UserScript==

(function () {

	"use strict";

	let gmMapperName = "mapper-sdlfjqwoihfin9q248fbh93v";
	let defaultMapper = {
		"2020cj_101": "star_magic_young",
		"2020cj_102": "shuixirui",
		"2020cj_103": "czf",
		"2020cj_104": "iotang",
		"2020cj_105": "Shiina Mashiro",
		"2020cj_106": "<a style=\"color: black; text-shadow: 0 0 1em orange, 0 0 0.3em orange; \">I</a><a style=\"color: red; text-shadow: 0 0 1em orange, 0 0 0.3em orange; \">tst</a>",
		"2020cj_107": "Winlere",
		"2020cj_108": "a1b3c7d9",
		"2020cj_109": "test12345",
		"2020cj_110": "dsl2002",
		"2020cj_111": "<a style=\"color: black; text-shadow: 0 0 1em orange, 0 0 0.3em orange; \">newbie</a><a style=\"color: red; text-shadow: 0 0 1em orange, 0 0 0.3em orange; \">314159</a>",
		"2020cj_112": "Geralt Gao",
		"2020cj_113": "zhoushuyu",
		"2020cj_120": "newbiechd",
		"2020cdqz_101": "Owen",
		"2020hsefz_101": "zjc",
		"2020hsefz_118": "Dilute",
		"2020nfls_101": "xy",
		"2020hzez_104": "supy",
		"2020hzez_106": "Isonan",
		"2020hzez_110": "memset0",
		"2020hzez_117": "Gnar",
		"2020hzez_120": "LJC00118",
	};

	function resetMapper() {
		GM_setValue(gmMapperName, defaultMapper);
	}

	function getMapper() {
		let temp = GM_getValue(gmMapperName);
		if (temp === undefined) {
			GM_setValue(gmMapperName, defaultMapper);
			temp = GM_getValue(gmMapperName);
		}
		return temp;
	}

	function getHashie(who) {
		let temp = getMapper();
		if (temp[who] === undefined) {
			return "<a style=\"opacity: 0.5; color: inherit;\">" + who + "</a>";
		}
		return temp[who];
	}

	function setHashie(who, val) {
		let temp = getMapper();
		temp[who] = val;
		GM_setValue(gmMapperName, temp);
	}

	function updateMapper(force) {
		let temp = getMapper();
		for (let i in defaultMapper) {
			if (force || temp[i] === undefined) temp[i] = defaultMapper[i];
		}
		GM_setValue(gmMapperName, temp);
	}

	function cleanUp() {
		let users = document.getElementsByClassName("uoj-username");
		let honor = document.getElementsByClassName("uoj-honor");
		for (let i of users) {
			i.innerHTML = getHashie(i.innerHTML);
		}
		for (let i of honor) {
			i.innerHTML = getHashie(i.innerHTML);
		}
	}

	function getInput(coef) {
		while (true) {
			let val = prompt("输入" + coef + "(留空表示跳过)");
			if (val === null) return null;
			if (val.length <= 0) return "";

			let hint = coef + " " + val + ": ";

			let col = prompt("输入" + coef + "的颜色\n" + hint);
			if (col === null) return null;
			if (col.length <= 0) col = "inherit";
			else hint = hint + " 颜色 " + col + "; ";

			let shadowcol = prompt("输入" + coef + "的阴影颜色\n" + hint);
			if (shadowcol === null) return null;
			if (shadowcol.length <= 0) shadowcol = undefined;
			else hint = hint + " 阴影 " + shadowcol + "; ";

			let fontsize = prompt("输入" + coef + "的字号(以 em(推荐), px, pt 结尾)\n" + hint);
			if (fontsize === null) return null;
			if (fontsize.length <= 0) fontsize = undefined;
			else hint = hint + " 字号 " + fontsize + "; ";

			let fonts = prompt("输入" + coef + "的字体(serif,sans-serif,cursive,fantasy,monospace 等)\n" + hint);
			if (fonts === null) return null;
			if (fonts.length <= 0) fonts = undefined;
			else hint = hint + " 字体 " + fonts + "; ";

			if (confirm(hint + "\n这样好吗?")) {
				let bas = "<a style=\"";
				if (col !== undefined) bas = bas + "color: " + col + "; ";
				if (shadowcol !== undefined) bas = bas + "text-shadow: 0 0 2em " + shadowcol + ", 0 0 1em " + shadowcol + ", 0 0 0.7em " + shadowcol + ", 0 0 0.3em " + shadowcol + "; ";
				if (fontsize !== undefined) bas = bas + "font-size: " + fontsize + "; ";
				if (fonts !== undefined) bas = bas + "font-family: " + fonts + "; ";
				bas = bas + "\">" + val + "</a>";
				return bas;
			}
		}
	}

	function comfirmHashie() {
		let who = prompt("输入源 ID");
		if (who === null || who.length <= 0) return;

		let pref = getInput("前缀");
		if (pref === null) return;
		let basm = getInput("主名");
		if (basm === null) return;
		let suff = getInput("后缀");
		if (suff === null) return;
		let bas = pref + basm + suff;

		setHashie(who, bas);
		alert("这将在下次刷新后起效。");
	}

	function confirmUpdateMapper() {
		let types = confirm("从数据库中更新还没有的配置。如果点击“是”,已有的设置也会被默认设置替代。");
		if (confirm("真的要这样吗?这不能被撤销!")) updateMapper(types);
	}

	let uojContent = document.getElementsByClassName("uoj-content")[0];

	let buttonHashie = document.createElement("button");
	buttonHashie.style = "background: rgb(212,255,212); border: none;";
	buttonHashie.name = "hashieUser";
	buttonHashie.id = "hashieUser";
	buttonHashie.innerHTML = "添加规则";
	buttonHashie.onclick = function () {
		comfirmHashie();
	};

	let buttonUpdate = document.createElement("button");
	buttonUpdate.style = "background: rgb(255,212,212); border: none;";
	buttonUpdate.name = "mapperUpdate";
	buttonUpdate.id = "mapperUpdate";
	buttonUpdate.innerHTML = "重置";
	buttonUpdate.onclick = function () {
		confirmUpdateMapper();
	};

	uojContent.appendChild(buttonHashie);
	uojContent.appendChild(buttonUpdate);

	cleanUp();

})();