ParaTranz diff

Diff suggestions

当前为 2024-08-17 提交的版本,查看 最新版本

// ==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, '&lt;$1$2&gt;');
        original = original.replaceAll('<br>', '').replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;');
        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=">">&gt;</abbr>', '&gt;')
        .replaceAll(/<var>(&lt;&lt;[^<]*?&gt;)<\/var>&gt;/g, '<var class="PZvar">$1&gt;</var>')
    }

})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址