Шахматы с тильт-мастером

Автозамена английских имён на русские на «Чесскоме»

Я освещаю шахматные турниры для русскоязычной аудитории. Даже с русским интерфейсом имена всё равно отображаются на английском, что мешает их правильно прочитать или произнести во время эфиров. Я написал скрипт, который решает эту проблему.

Что делать

  1. Установить расширение Tampermonkey.
  1. Зайти на сайт chess.com.
  1. В правом верхнем углу браузера нажать на значок Tampermonkey.
  1. Нажать Create a new script или «Создать новый скрипт».
  1. Откроется новое окно. Всё удалить.
  1. Вставить скрипт:
// ==UserScript==
// @name         Chess.com Имена на Русском Языке
// @namespace    http://tampermonkey.net/
// @version      1.5
// @description  Автозамена английских имён на русские на chess.com с постоянным отслеживанием изменений интерфейса
// @author       Anton Kim
// @match        https://www.chess.com/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Массив для замены текстов
    const replacements = {
        "Magnus Carlsen": "Магнус Карлсен",
        "Alireza Firouzja": "Алиреза Фирузджа",
        "Maxime Vachier-Lagrave": "Максим Вашье-Лаграв",
        "": "",
        "": "",
        "": "",
        // Добавьте другие имена здесь
    };

    // Кэширование обработанных узлов для предотвращения повторной обработки
    const processedNodes = new WeakSet();

    // Функция для замены текста на странице
    function replaceText(node) {
        if (node.nodeType === 3 && !processedNodes.has(node)) { // Проверяем, текст ли это и был ли он уже обработан
            let originalText = node.textContent;
            let newText = originalText;

            for (let [enName, ruName] of Object.entries(replacements)) {
                if (originalText.includes(enName)) { // Оптимизация: выполняем замену только если строка содержит имя
                    newText = newText.replace(new RegExp(enName, 'g'), ruName);
                }
            }

            // Заменяем текст только если были изменения
            if (newText !== originalText) {
                node.textContent = newText;
                processedNodes.add(node); // Кэшируем этот узел
            }
        }
    }

    // Функция для обхода всех узлов страницы
    function walk(node) {
        let child, next;

        switch (node.nodeType) {
            case 1:  // Элемент
            case 9:  // Документ
            case 11: // Фрагмент
                child = node.firstChild;
                while (child) {
                    next = child.nextSibling;
                    walk(child);
                    child = next;
                }
                break;

            case 3: // Текстовый узел
                replaceText(node);
                break;
        }
    }

    // Постоянный MutationObserver для слежения за изменениями интерфейса
    function observeMutations() {
        const observer = new MutationObserver(function(mutations) {
            mutations.forEach(function(mutation) {
                mutation.addedNodes.forEach(node => {
                    if (node.nodeType === 1) { // Только элементы
                        walk(node); // Проверяем новые узлы
                    }
                });

                // Также проверяем изменения текста в существующих узлах
                mutation.target.childNodes.forEach(node => {
                    if (node.nodeType === 3) { // Текстовые узлы
                        replaceText(node); // Обновляем текст при его изменении
                    }
                });
            });
        });

        // Наблюдаем за изменениями в body и всём поддереве
        observer.observe(document.body, { childList: true, subtree: true, characterData: true });
    }

    // Запуск функции сразу на загрузке страницы и отслеживание изменений
    walk(document.body);
    observeMutations();

})();
  1. Чтобы добавить новое имя, впишите его в «Массив для замены текстов».
  1. Нажать Ctrl + S, чтобы сохранить скрипт. Или в меню File — Save.
  1. Зайти на любой турнир в chess.com и проверить изменения.
  1. Готово.
Результат до и после

Заключение

Этот скрипт прекрасен тем, что работает в любой части сайта. Это значит, что имена, которые вы прописали, будут меняться везде, где встретится совпадение.

P.S. Можно добавить хоть свой ник, и заменить его на своё имя. Будете играть под своим именем. Мелочь, а приятно :—)

Подписаться на канал
Отправить
Поделиться
Запинить
1 комментарий
Евгений Золотилов 3 мес

Когда будут готовы новые скрипты?