DeepL Twitter translation

Add "Translate tweet with DeepL" button

当前为 2020-09-27 提交的版本,查看 最新版本

// ==UserScript==
// @name         DeepL Twitter translation
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  Add "Translate tweet with DeepL" button
// @author       Remonade
// @match        https://twitter.com/*
// @grant        none
// @require http://code.jquery.com/jquery-3.5.1.min.js
// ==/UserScript==

(function() {
    'use strict';

    var injected = false;
    var injectInterval = null;
    var waitForTitleHeadInterval = null;

    function isHTML(str) {
        var doc = new DOMParser().parseFromString(str, "text/html");
        return Array.from(doc.body.childNodes).some(node => node.nodeType === 1);
    }

    function injectDeeplTranslation() {
        if(!injected) {
            var translateButton = $("span:contains('Translate Tweet')");
            if(translateButton.length > 0) {
                // Get the tweet content
                var tweetContainer = translateButton.parent().siblings();
                var tweetLang = tweetContainer.attr("lang");
                var tweetContent = "";
                tweetContainer.children("span").each(function(index,item) {
                    var tweetPart = $(item).html().trim();
                    if(tweetPart && tweetPart != "" && !isHTML(tweetPart)) {
                        tweetContent += " " + tweetPart;
                    }
                });

                // Create new button
                var deeplButton = translateButton.parent().clone().appendTo(translateButton.parent().parent());
                deeplButton.children("span").html("Translate Tweet with DeepL");

                deeplButton.hover(function(){
                    $(this).css("text-decoration", "underline");
                }, function(){
                    $(this).css("text-decoration", "none");
                });

                deeplButton.click(function() {
                    var deeplUrl = "https://www.deepl.com/translator#" + tweetLang + "/en/" + tweetContent;
                    window.open(deeplUrl,'_blank');
                });

                injected = true;
            }
        }
        else {
            clearInterval(injectInterval);
            injectInterval = null;
        }
    }

    function addObserverIfDesiredNodeAvailable() {
        var target = $("head > title")[0];
        if(!target) {
            return;
        }

        clearInterval(waitForTitleHeadInterval);

        var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
        var observer = new MutationObserver(function(mutations) {
            mutations.forEach(function(mutation) {
                if(injectInterval == null) {
                    injected = false;
                    injectInterval = setInterval(injectDeeplTranslation, 100);
                }
            });
        });
        observer.observe(target, { subtree: true, characterData: true, childList: true });
    }

    $(document).ready(function() {
        waitForTitleHeadInterval = setInterval(addObserverIfDesiredNodeAvailable, 100);
        injectInterval = setInterval(injectDeeplTranslation, 100);
    });
})();

QingJ © 2025

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