Dynamic RTL/LTR Direction

Dynamically set text direction for Deepseek chat elements based on content

目前为 2025-01-28 提交的版本。查看 最新版本

// ==UserScript==
// @name          Dynamic RTL/LTR Direction
// @namespace     http://tampermonkey.net/
// @version       V4
// @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 codeClass = "md-code-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);
    const codeElements = document.getElementsByClassName(codeClass);
 
    if (targetElements.length > 0) {
      const latestElement = targetElements[targetElements.length - 1];
      const textContent = latestElement.textContent.trim();
      const newDirection = isRTL(textContent) ? "rtl" : "ltr";
 
      if (textContent.length > 0 && latestElement.style.direction !== newDirection) {
        latestElement.style.direction = newDirection;
      }
 
      for (let i = 0; i < codeElements.length; i++) {
        codeElements[i].style.direction = "ltr";
      }
    }
  }
 
  function startObserving() {
    const observer = new MutationObserver((mutationsList) => {
      for (const mutation of mutationsList) {
        if (mutation.type === "childList" && mutation.addedNodes.length > 0) {
          updateDirection();
        }
      }
    });
 
    observer.observe(document.body, { childList: true, subtree: true });
  }
 
  function handleSubmitButtonClick() {
    const submitButton = document.getElementsByClassName(submitButtonClass)[0];
    if (submitButton) {
      submitButton.addEventListener("click", () => {
        setTimeout(updateDirection, 500);
      });
    }
  }
 
  updateDirection();
  startObserving();
  handleSubmitButtonClick();
})();