Warning: fopen(/www/sites/update.greasyfork.icu/index/store/forever/563586fa3c32a5c59774d8e7028c83a3.js): failed to open stream: No space left on device in /www/sites/update.greasyfork.icu/index/scriptControl.php on line 65
// ==UserScript==
// @name COC2 翻译分段修复
// @namespace http://tampermonkey.net/
// @version 2024-10-31
// @description 修复 Google 翻译导致段落合并的问题
// @author LinHQ
// @match *://*/*
// @grant none
// @run-at context-menu
// @license AGPLv3
// @downloadURL none
// ==/UserScript==
(function () {
'use strict';
const target = 'span.mainText'
const noTranslate = 'span.listItemQuantity,div.totalCard .value,.sidebarDetailsContainer,.sidebarControlContainer,.keybindDisplay.trayButtonBind,.hotkeyIndicator'
new MutationObserver((li, ob) => {
try {
const patchNodes = li.filter(mu => mu.type === 'childList' && !!mu.addedNodes)
.map(mu =>
Array.from(mu.addedNodes).map(node => {
if (node.nodeType === 3) {
// #text 节点
return node.parentElement?.matches(target) ? node.parentNode : undefined
}
// 放下面,因为 #text 没有 querySelectorAll
const mainText = node?.querySelectorAll(target)
if (mainText.length) {
return [...mainText].pop()
}
return undefined
})
).flat()
const noTransNodes = li.filter(mu => mu.type === 'childList' && !!mu.addedNodes)
.map(mu => Array.from(mu.addedNodes)
.map(node => node.nodeType === 1 ? Array.from(node?.querySelectorAll(noTranslate)) : undefined))
.flat(2)
ob.disconnect()
noTransNodes.forEach(node => node?.setAttribute('translate', 'no'))
patchNodes.forEach(patchNode => {
if (!patchNode?.innerHTML) return
patchNode.innerHTML = patchNode.innerHTML.replaceAll('\n', '
')
})
ob.observe(document.body, {
subtree: true,
childList: true
})
} catch (e) {
console.warn('脚本遇到未预料问题', e)
}
}).observe(document, {
subtree: true,
childList: true
})
})()