Update userscript.js

This commit is contained in:
CxJuice 2023-01-28 01:22:18 +08:00 committed by GitHub
parent bc6339b7c8
commit 50494a7124
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,25 +1,43 @@
// ==UserScript== // ==UserScript==
// @name UEX汉化脚本 // @name UEX汉化脚本
// @namespace Violentmonkey Scripts // @namespace Violentmonkey Scripts
// @match https://uexcorp.space/* // @match https://uexcorp.space/*
// @grant none // @grant none
// @version 0.2 // @version 0.8.0
// @license GNU GPLv3
// @author CxJuice // @author CxJuice
// @description 2022/7/28 12:48:01 // @description 2022/7/28 12:48:01
// @match https://uexcorp.space/*
// @match https://www.erkul.games/*
// @grant GM_xmlhttpRequest
// @grant GM_getResourceText
// @resource zh-CN https://cdn.jsdelivr.net/gh/CxJuice/Uex_Chinese_Translate@main/zh-CN-uex1.7.json
// @require https://cdn.bootcdn.net/ajax/libs/timeago.js/4.0.2/timeago.full.min.js
// @require https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js
// ==/UserScript== // ==/UserScript==
window.addEventListener('load', function(event) {
// 当页面加载完成时,执行我们的脚本
myScript();
});
// 监听页面中的鼠标点击事件
document.addEventListener('click', function(event) {
// 当发生鼠标点击事件时,执行我们的脚本
myScript();
});
function myScript() {
(function() { (function() {
'use strict'; 'use strict';
const SUPPORT_LANG = ["zh-CN", "ja"]; const SUPPORT_LANG = ["zh-CN", "ja"];
const lang = (navigator.language || navigator.userLanguage); const lang = (navigator.language || navigator.userLanguage);
const locales = getLocales(lang) const locales = getLocales(lang)
translateByCssSelector(); translateByCssSelector();
translateDesc(); translateDesc();
traverseElement(document.body); traverseElement(document.body);
watchUpdate(); watchUpdate();
function getLocales(lang) { function getLocales(lang) {
if(lang.startsWith("zh")) { // zh zh-TW --> zh-CN if(lang.startsWith("zh")) { // zh zh-TW --> zh-CN
lang = "zh-CN"; lang = "zh-CN";
@ -32,12 +50,12 @@
dict: {} dict: {}
}; };
} }
function translateRelativeTimeEl(el) { function translateRelativeTimeEl(el) {
const datetime = $(el).attr('datetime'); const datetime = $(el).attr('datetime');
$(el).text(timeago.format(datetime, lang.replace('-', '_'))); $(el).text(timeago.format(datetime, lang.replace('-', '_')));
} }
function translateElement(el) { function translateElement(el) {
// Get the text field name // Get the text field name
let k; let k;
@ -50,33 +68,34 @@
} else { } else {
k = 'data'; k = 'data';
} }
const txtSrc = el[k].trim(); const txtSrc = el[k].trim();
const key = txtSrc.toLowerCase() const key = txtSrc.toLowerCase()
.replace(/\xa0/g, ' ') // replace ' ' .replace(/\xa0/g, ' ') // replace ' '
.replace(/\s{2,}/g, ' '); .replace(/\s{2,}/g, ' ');
if(locales.dict[key]) { if(locales.dict[key]) {
el[k] = el[k].replace(txtSrc, locales.dict[key]) el[k] = el[k].replace(txtSrc, locales.dict[key])
} }
} }
function shoudTranslateEl(el) { function shoudTranslateEl(el) {
const blockIds = ["readme", "wiki-content"]; const blockIds = ["readme", "wiki-content"];
const blockClass = [ const blockClass = [
"mat-icon",
"CodeMirror", "CodeMirror",
"css-truncate" // 过滤文件目录 "css-truncate" // 过滤文件目录
]; ];
const blockTags = ["CODE", "SCRIPT", "LINK", "IMG", "svg", "TABLE", "ARTICLE", "PRE"]; const blockTags = [];
if(blockTags.includes(el.tagName)) { if(blockTags.includes(el.tagName)) {
return false; return false;
} }
if(el.id && blockIds.includes(el.id)) { if(el.id && blockIds.includes(el.id)) {
return false; return false;
} }
if(el.classList) { if(el.classList) {
for(let clazz of blockClass) { for(let clazz of blockClass) {
if(el.classList.contains(clazz)) { if(el.classList.contains(clazz)) {
@ -84,21 +103,21 @@
} }
} }
} }
return true; return true;
} }
function traverseElement(el) { function traverseElement(el) {
if(!shoudTranslateEl(el)) { if(!shoudTranslateEl(el)) {
return return
} }
for(const child of el.childNodes) { for(const child of el.childNodes) {
if(["RELATIVE-TIME", "TIME-AGO"].includes(el.tagName)) { if(["RELATIVE-TIME", "TIME-AGO"].includes(el.tagName)) {
translateRelativeTimeEl(el); translateRelativeTimeEl(el);
return; return;
} }
if(child.nodeType === Node.TEXT_NODE) { if(child.nodeType === Node.TEXT_NODE) {
translateElement(child); translateElement(child);
} }
@ -113,7 +132,7 @@
} }
} }
} }
function watchUpdate() { function watchUpdate() {
const m = window.MutationObserver || window.WebKitMutationObserver; const m = window.MutationObserver || window.WebKitMutationObserver;
const observer = new m(function (mutations, observer) { const observer = new m(function (mutations, observer) {
@ -123,14 +142,14 @@
} }
} }
}); });
observer.observe(document.body, { observer.observe(document.body, {
subtree: true, subtree: true,
characterData: true, characterData: true,
childList: true, childList: true,
}); });
} }
// translate "about" // translate "about"
function translateDesc() { function translateDesc() {
$(".repository-content .f4").append("<br/>"); $(".repository-content .f4").append("<br/>");
@ -144,11 +163,11 @@
.end() .end()
.text() .text()
.trim(); .trim();
if(!desc) { if(!desc) {
return; return;
} }
GM_xmlhttpRequest({ GM_xmlhttpRequest({
onload: function(res) { onload: function(res) {
if (res.status === 200) { if (res.status === 200) {
@ -165,7 +184,7 @@
}); });
}); });
} }
function translateByCssSelector() { function translateByCssSelector() {
if(locales.css) { if(locales.css) {
for(var css of locales.css) { for(var css of locales.css) {
@ -179,4 +198,6 @@
} }
} }
} }
})(); })();
}