Diff suggestions
当前为
// ==UserScript==
// @name ParaTranz diff
// @namespace https://paratranz.cn/users/44232
// @version 0.3
// @description Diff suggestions
// @author ooo
// @match http*://paratranz.cn/*
// @require https://cdnjs.cloudflare.com/ajax/libs/jsdiff/5.2.0/diff.min.js
// @license MIT
// @grant none
// ==/UserScript==
(function() {
'use strict';
let observer = new MutationObserver(() => {
const original = document.querySelector('.editor-core')?.querySelector('.original');
if (!original) return;
observer.disconnect();
pdiff(original.textContent);
pcontext(original.textContent);
pvar(original);
observer.observe(document.getElementsByTagName('body')[0], {
childList: true,
subtree: true,
});
});
observer.observe(document.getElementsByTagName('body')[0], {
childList: true,
subtree: true,
});
function pdiff(original) {
const oldBoxs = document.querySelectorAll('.translation-memory .string-item');
if (!oldBoxs[0] || oldBoxs[0].querySelector('.PZdiff')) return;
for (const oldBox of oldBoxs) {
const one = oldBox.querySelector('.original').textContent,
other = original;
if (!one || !other) return;
let span = null;
const diff = Diff.diffWords(one, other),
PZdiff = document.createElement('div');
diff.forEach((part) => {
const color = part.added ? 'green' :
part.removed ? 'red' : 'grey';
span = document.createElement('span');
span.style.color = color;
span.appendChild(document
.createTextNode(part.value));
PZdiff.appendChild(span);
});
oldBox.querySelector('.original').appendChild(PZdiff);
PZdiff.classList.add('PZdiff');
}
}
function pcontext(original) {
const contextBox = document.querySelector('.context'),
context = contextBox.innerHTML.replaceAll(/<a.*?>(.*?)<\/a>/g, '$1').replaceAll(/<(\/?)(li|b|i|h\d|span)>/g, '<$1$2>');
original = original.replaceAll('<br>', '').replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');
console.log(context)
if (!contextBox || document.querySelector('.context #PZmark')) return;
contextBox.innerHTML = context.replace(original, `<mark id="PZmark" class="mark">${original}</mark>`);
}
function pvar(original) {
original.innerHTML = original.innerHTML
.replaceAll('<abbr title="noun.>" data-value=">">></abbr>', '>')
.replaceAll(/<var>(<<[^<]*?>)<\/var>>/g, '<var class="PZvar">$1></var>')
}
})();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址