Dynamic RTL/LTR Direction

Dynamically set text direction for Deepseek chat elements based on content

目前為 2025-01-16 提交的版本,檢視 最新版本

// ==UserScript==
// @name          Dynamic RTL/LTR Direction
// @namespace     http://tampermonkey.net/
// @version       V3
// @description   Dynamically set text direction for Deepseek chat elements based on content
// @author        Reda Elsayed
// @match         https://chat.deepseek.com/
// @match         https://chat.deepseek.com/*
// @match         https://chat.deepseek.com/*/chat/*/*
// @icon          https://www.deepseek.com/path/to/icon.png
// @grant         none
// ==/UserScript==

(function () {
    'use strict';
 
    const textareaClass = "c92459f0";
    const targetClass = "ds-markdown ds-markdown--block";
    const submitButtonClass = "f6d670";
 
    function isRTL(text) {
        const rtlPattern = /[\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC]/;
        return rtlPattern.test(text);
    }
 
    function updateDirection() {
        const targetElements = document.getElementsByClassName(targetClass);
        if (targetElements.length > 0) {
            const latestElement = targetElements[targetElements.length - 1];
            const textContent = latestElement.textContent.trim();
            const currentDirection = latestElement.style.direction;
            const newDirection = isRTL(textContent) ? "rtl" : "ltr";
 
            if (textContent.length > 0 && currentDirection !== newDirection) {
                latestElement.style.direction = newDirection;
                console.log(`Direction updated to: ${newDirection}`);
            }
        }
    }
 
    function startObserving() {
        const observer = new MutationObserver(() => {
            updateDirection();
        });
 
        observer.observe(document.body, { childList: true, subtree: true });
        console.log("MutationObserver started.");
    }
 
    function handleSubmitButtonClick() {
        const submitButton = document.getElementsByClassName(submitButtonClass)[0];
        if (submitButton) {
            submitButton.addEventListener("click", () => {
                setTimeout(updateDirection, 500);
            });
        } else {
            console.error("Submit button not found!");
        }
    }
 
    updateDirection();
 
    startObserving();
 
    handleSubmitButtonClick();
})();