// ==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 // @downloadURL 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(); })();