BlueskyTranslateDeepL

Blueskyの「Translate...」をDeepLで開くようにする

// ==UserScript==
// @name         BlueskyTranslateDeepL
// @namespace    https://nigauri.me/
// @version      0.6
// @description  Blueskyの「Translate...」をDeepLで開くようにする
// @author       nigauri
// @match        https://staging.bsky.app/*
// @match        https://bsky.app/*
// @icon         https://bsky.app/static/apple-touch-icon.png
// @require      https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js
// @grant        none
// ==/UserScript==

const parentBlockCSSFeed = "div.css-175oi2r.r-18u37iz.r-1cvj4g8:visible";
const parentBlockCSSSearch = "div.css-175oi2r.r-5kkj8d.r-1sp51qo.r-ry3cjt:visible";
const parentBlockCSSPostThreadMain = "div.css-175oi2r.r-5kkj8d.r-1ss6j8a.r-1qortcd.r-vmopo1:visible";
const parentBlockCSSPostThreadOther1 = "div.css-175oi2r.r-5kkj8d.r-1hfyk0a:visible";
const parentBlockCSSPostThreadOther2 = "div.css-175oi2r.r-1hfyk0a.r-13yce4e:visible";

const postUrlLinkCSS = "a.css-1rynq56.r-19gegkz.r-1loqt21:visible";

const postTextCSSFeed = "div.css-175oi2r.r-1awozwy.r-18u37iz.r-1w6e6rj.r-iphfwy > div:visible";
const postTextCSSSearch = "div.css-175oi2r.r-1awozwy.r-18u37iz.r-1w6e6rj.r-xd6kpl > div:visible";
const postTextCSSPostThreadMain = "div.css-175oi2r.r-1awozwy.r-18u37iz.r-1w6e6rj.r-2yi16.r-1qfoi16.r-1mi0q7o.r-mk0yit > div:visible";
const postTextCSSPostThreadOther = "div.css-175oi2r.r-1awozwy.r-18u37iz.r-1w6e6rj.r-2yi16.r-xd6kpl.r-1qfoi16:visible";

const postDropdownPopupBGCSS = "div.css-175oi2r.r-kemksi.r-1p0dtai.r-1d2f490.r-5m1il8.r-u8s1d.r-zchlnj.r-ipm5af:visible";
const deeplURL = "https://www.deepl.com/ja/translator#en/ja/";

(function() {
    'use strict';

    let clickedPost = null;
    let parentBlockCSS = null;
    let postTextCSS = null;

    let postDropdownBtnObserver = new MutationObserver(function (MutationRecords, MutationObserver) {
        $("div[data-testid='postDropdownBtn']").each(function(i, elem) {
            let events = $._data($(elem).get(0), "events");
            if (events != null) {
                return true;
            }
            $(elem).on("click", function(){
                clickedPost = null;
                parentBlockCSS = null;
                postTextCSS = null;
                let isRP = false;
                if (0 < $(elem).closest(parentBlockCSSFeed).length) {
                    parentBlockCSS = parentBlockCSSFeed;
                    postTextCSS = postTextCSSFeed;
                } else if (0 < $(elem).closest(parentBlockCSSSearch).length) {
                    parentBlockCSS = parentBlockCSSSearch;
                    postTextCSS = postTextCSSSearch;
                } else if (0 < $(elem).closest(parentBlockCSSPostThreadMain).length) {
                    parentBlockCSS = parentBlockCSSPostThreadMain;
                    postTextCSS = postTextCSSPostThreadMain;
                    isRP = true;
                } else if (0 < $(elem).closest(parentBlockCSSPostThreadOther1).length) {
                    parentBlockCSS = parentBlockCSSPostThreadOther1;
                    postTextCSS = postTextCSSPostThreadOther;
                } else if (0 < $(elem).closest(parentBlockCSSPostThreadOther2).length) {
                    parentBlockCSS = parentBlockCSSPostThreadOther2;
                    postTextCSS = postTextCSSPostThreadOther;
                }
                let parentBlock = $(elem).closest(parentBlockCSS);
                let href = parentBlock.find(postUrlLinkCSS).attr("href");
                clickedPost = href;
                if (isRP && clickedPost != null) {
                    clickedPost = null;
                }
            });
        });
    });
    postDropdownBtnObserver.observe($("#root").get(0), {
        childList: true,
        subtree: true,
    });

    let postDropdownTranslateBtnObserver = new MutationObserver(function (MutationRecords, MutationObserver) {
        $("div[data-testid='postDropdownTranslateBtn']").each(function(i, elem) {
            $(elem).off("click");
            $(elem).on("click", function(){
                let parentBlock = null;
                if (clickedPost == null) {
                    parentBlock = $(parentBlockCSS);
                } else {
                    parentBlock = $(`a[href='${clickedPost}']:visible`).closest(parentBlockCSS);
                }
                let text = parentBlock.find(postTextCSS).text();
                window.open(deeplURL + encodeURI(text).replaceAll("/", "%5C%2F"));
                $(postDropdownPopupBGCSS).click();
                return false;
            });
        });
    });
    postDropdownTranslateBtnObserver.observe($("#root").get(0), {
        childList: true,
        subtree: true,
    });
})();

QingJ © 2025

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