<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Антон Ким: заметки с тегом стриминг</title>
<link>https://antonkim.ru/chess/tags/streaming/</link>
<description>Всё о шахматах: дебюты, ловушки, ошибки, тактика, стратегия, миттельшпиль, эндшпиль, стриминг</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.3 (v4134)</generator>

<itunes:subtitle>Всё о шахматах: дебюты, ловушки, ошибки, тактика, стратегия, миттельшпиль, эндшпиль, стриминг</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Автозамена английских имён на русские на «Чесскоме»</title>
<guid isPermaLink="false">2</guid>
<link>https://antonkim.ru/chess/all/auto-replace-english-names-to-russian-names-on-chess-com/</link>
<pubDate>Wed, 23 Oct 2024 10:39:44 +0500</pubDate>
<author></author>
<comments>https://antonkim.ru/chess/all/auto-replace-english-names-to-russian-names-on-chess-com/</comments>
<description>
&lt;p&gt;Я освещаю шахматные турниры для русскоязычной аудитории. Даже с русским интерфейсом имена всё равно отображаются на английском, что мешает их правильно прочитать или произнести во время эфиров. Я написал скрипт, который решает эту проблему.&lt;/p&gt;
&lt;h2&gt;Что делать&lt;/h2&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Установить расширение &lt;a href="https://chromewebstore.google.com/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo"&gt;Tampermonkey&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Зайти на сайт &lt;a href="https://chess.com"&gt;chess.com&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="3"&gt;
&lt;li&gt;В правом верхнем углу браузера нажать на значок Tampermonkey.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="4"&gt;
&lt;li&gt;Нажать Create a new script или «Создать новый скрипт».&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="5"&gt;
&lt;li&gt;Откроется новое окно. Всё удалить.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="6"&gt;
&lt;li&gt;Вставить скрипт:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;// ==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 = {
        &amp;quot;Magnus Carlsen&amp;quot;: &amp;quot;Магнус Карлсен&amp;quot;,
        &amp;quot;Alireza Firouzja&amp;quot;: &amp;quot;Алиреза Фирузджа&amp;quot;,
        &amp;quot;Maxime Vachier-Lagrave&amp;quot;: &amp;quot;Максим Вашье-Лаграв&amp;quot;,
        &amp;quot;&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;&amp;quot;: &amp;quot;&amp;quot;,
        // Добавьте другие имена здесь
    };

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

    // Функция для замены текста на странице
    function replaceText(node) {
        if (node.nodeType === 3 &amp;amp;&amp;amp; !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 =&amp;gt; {
                    if (node.nodeType === 1) { // Только элементы
                        walk(node); // Проверяем новые узлы
                    }
                });

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

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

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

})();&lt;/code&gt;&lt;/pre&gt;&lt;ol start="7"&gt;
&lt;li&gt;Чтобы добавить новое имя, впишите его в «Массив для замены текстов».&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="8"&gt;
&lt;li&gt;Нажать Ctrl + S, чтобы сохранить скрипт. Или в меню File — Save.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="9"&gt;
&lt;li&gt;Зайти на любой &lt;a href="https://chess.com/events/results"&gt;турнир в chess.com&lt;/a&gt; и проверить изменения.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="10"&gt;
&lt;li&gt;Готово.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="1080" data-ratio="1"&gt;
&lt;img src="https://antonkim.ru/chess/pictures/giri-firouzja-en.jpg" width="1080" height="1080" alt="" /&gt;
&lt;img src="https://antonkim.ru/chess/pictures/giri-firouzja-ru.jpg" width="1080" height="1080" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-caption"&gt;Результат до и после&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Заключение&lt;/h2&gt;
&lt;p&gt;Этот скрипт прекрасен тем, что работает в любой части сайта. Это значит, что имена, которые вы прописали, будут меняться везде, где встретится совпадение.&lt;/p&gt;
&lt;p&gt;P.S. Можно добавить хоть свой ник, и заменить его на своё имя. Будете играть под своим именем. Мелочь, а приятно :—)&lt;/p&gt;
</description>
</item>


</channel>
</rss>