Smart Text Justifier

Justifies p and textarea tags unless they (or their parents) are centered.

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Smart Text Justifier
// @namespace    http://tampermonkey.net/
// @version      1.3
// @description  Justifies p and textarea tags unless they (or their parents) are centered.
// @author       Ȼaptain Jøhn “Søap” MacTavish
// @license      CC-BY-NC-SA-4.0
// @match        *://*/*
// @grant        none
// ==/UserScript==

(
    function()
    {
        'use strict';
    
        const JustifyTargetElements = () =>
        {
            const TargetNodes = document.querySelectorAll('p, textarea');
    
            TargetNodes.forEach
            (
                Element =>
                {
                    // Check the actual computed alignment from CSS or attributes
                    const ComputedAlignment = window.getComputedStyle(Element).textAlign;
    
                    // Only apply justification if the element is NOT centered
                    if (ComputedAlignment !== 'center')
                    {
                        Element.style.setProperty('text-align', 'justify', 'important');
                        Element.style.setProperty('text-justify', 'inter-word', 'important');
                    }
                }
            );
        };
    
        const InitializeObserver = () =>
        {
            // Initial run
            JustifyTargetElements();
    
            // Observe the body for dynamically loaded content (AJAX, infinite scroll)
            const ContentObserver = new MutationObserver
            (
                () =>
                {
                    JustifyTargetElements();
                }
            );
    
            ContentObserver.observe
            (
                document.body,
                {
                    childList: true,
                    subtree: true
                }
            );
        };
    
        // Run the script once the window is stable
        if (document.readyState === 'complete')
        {
            InitializeObserver();
        }
        else
        {
            window.addEventListener('load', InitializeObserver);
        }
    
    }
)();