Force RTL

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

Terá de instalar uma extensão como Tampermonkey, Greasemonkey ou Violentmonkey para instalar este script.

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

Terá de instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Terá de instalar uma extensão como Tampermonkey ou Userscripts para instalar este script.

Terá de instalar uma extensão como Tampermonkey para instalar este script.

Terá de instalar uma extensão de gestão de scripts de utilizador para instalar este script.

(Já tenho um gestor de scripts de utilizador, deixe-me instalá-lo!)

Terá de instalar uma extensão como Stylus para instalar este estilo.

Terá de instalar uma extensão como Stylus para instalar este estilo.

Terá de instalar uma extensão como Stylus para instalar este estilo.

Terá de instalar uma extensão de gestão de estilos de utilizador para instalar este estilo.

Terá de instalar uma extensão de gestão de estilos de utilizador para instalar este estilo.

Terá de instalar uma extensão de gestão de estilos de utilizador para instalar este estilo.

(Já tenho um gestor de estilos de utilizador, deixe-me instalá-lo!)

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