Force RTL

This script will change the direction of the elements with arabic characters

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @license      JazzMedo
// @name         Force RTL
// @version      0.72
// @description  This script will change the direction of the elements with arabic characters
// @author       JazzMedo
// @match        https://*
// @include      https://*
// @icon         https://cdn-icons-png.flaticon.com/512/6212/6212766.png
// @grant        none
// @namespace https://greasyfork.org/users/1420266
// ==/UserScript==

(function() {
    'use strict';
function updateTextDirections() {
    document.querySelectorAll("*").forEach((element) => {
        // Check if the element contains Arabic characters using Unicode range
        const arabicRegex =
            /[\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\uFB50-\uFDFF\uFE70-\uFEFF]/;

        // Check only direct text content of the element (not nested elements)
        const textNodes = Array.from(element.childNodes).filter(
            (node) => node.nodeType === Node.TEXT_NODE
        );

        const hasArabic = textNodes.some((node) =>
            arabicRegex.test(node.textContent)
        );

        if (hasArabic && element.parentElement) {
            element.parentElement.setAttribute("dir", "rtl");
        }
    });
}

// Run on initial load
updateTextDirections();

// Run again whenever new content is added
// (e.g., after AJAX calls or dynamic element creation)
const observer = new MutationObserver((mutationsList) => {
    for (const mutation of mutationsList) {
        if (mutation.type === "childList" || mutation.type === "characterData") {
            updateTextDirections();
            break;
        }
    }
});

observer.observe(document.body, {
    childList: true,
    subtree: true,
    characterData: true,
});
})();