Boosty Tag Formatter

Отображение тегов текстом в посте на Boosty в одну строку

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

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

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

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

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

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

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

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

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

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

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

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

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

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

作者
Идзуми Сэна
日安装量
0
总安装量
2
评分
0 0 0
版本
1.2
创建于
2024-07-24
更新于
2025-10-28
大小
8.7 KB
许可证
暂无
适用于

Скрипт предназначен для изменения способа отображения тегов к постам на сайте boosty.to. Стандартный интерфейс Boosty отображает теги в виде отдельных "плашек" или "пузырьков", которые могут занимать много места, особенно если тегов много.

Цель данного скрипта — заменить этот блочный вывод на компактную текстовую строку. Он сканирует посты, извлекает текст из всех тегов, объединяет их через запятую и вставляет в новый, единый текстовый блок, после чего скрывает оригинальный контейнер с тегами.

Ключевые функции

  1. processPost(postElement):

    • Это основная функция, обрабатывающая отдельный DOM-элемент поста ([data-test-id="COMMON_POST:ROOT"]).
    • Защита от повторной обработки: При первом выполнении функция помечает пост атрибутом data-tags-formatted = 'true'. Это предотвращает повторную обработку одного и того же поста при последующих срабатываниях MutationObserver.
    • Поиск элементов: Скрипт использует селекторы по частичному совпадению класса ([class*="..."]), чтобы найти динамически генерируемые классы Boosty (стиль CSS Modules). Он находит контейнер тегов (PostTags-scss--module_root) и сами теги (PostTag-scss--module_title).
    • Агрегация тегов: С помощью Array.from().map().filter().join() скрипт собирает textContent из всех найденных тегов, очищает их от пробелов и объединяет в одну строку, разделенную запятыми (например, "art, wip, sketch").
    • Внедрение и скрытие: Создается новый элемент <div>, в который помещается строка с тегами (с префиксом "Теги:"). Этот новый блок вставляется в DOM перед оригинальным контейнером тегов. Сразу после этого оригинальный контейнер скрывается через style.display = 'none'.
  2. MutationObserver (Наблюдатель DOM):

    • Скрипт инициализирует MutationObserver для отслеживания изменений во всем document.body с опциями { childList: true, subtree: true }.
    • Это позволяет скрипту работать на "бесконечной" прокрутке ленты. Когда Boosty динамически подгружает и добавляет в DOM новые посты, MutationObserver обнаруживает эти добавления.
    • Он проверяет, является ли добавленный узел постом ([data-test-id="COMMON_POST:ROOT"]) или содержит ли он посты, и для каждого нового поста вызывает функцию processPost.
  3. Инициализация:

    • При запуске скрипт сначала выполняет document.querySelectorAll для обработки всех постов, которые уже присутствуют на странице в момент загрузки (первая партия постов).
    • Сразу после этого запускается MutationObserver для отслеживания всех постов, которые будут загружены позже.

Как использовать

  1. Перейдите на любую страницу boosty.to, содержащую ленту постов (например, главную страницу блога автора).
  2. Скрипт срабатывает автоматически.
  3. Прокрутите страницу до поста, у которого есть теги. Вместо стандартных "плашек" тегов, вы увидите под постом (в том же месте) текстовую строку, содержащую все теги через запятую. Это также будет работать для постов, подгружаемых при "бесконечной" прокрутке.

Особенности

  • Адаптация к SPA (Single Page Application): Использование MutationObserver в сочетании с первичной обработкой querySelectorAll — это ключевая особенность, позволяющая скрипту корректно работать на динамических сайтах, подобных Boosty, где контент загружается асинхронно без перезагрузки страницы.
  • Устойчивость к изменениям CSS: Скрипт использует поиск по частичному совпадению имени класса ([class*="..."]). Это делает его более устойчивым к обновлениям сайта, при которых меняются хэши в CSS-классах (например, PostTags-scss--module_root_a1b2c), но базовая часть имени (PostTags-scss--module_root) остается неизменной.
  • Идемпотентность: Благодаря использованию data-атрибута в качестве флага, скрипт гарантирует, что каждый пост будет обработан только один раз, даже если MutationObserver по какой-либо причине сработает на нем повторно.
  • Неразрушающее скрытие: Скрипт не удаляет оригинальный блок тегов, а лишь скрывает его (display: none). Это более безопасный подход, который не нарушает работу других скриптов, потенциально ожидающих наличие этого блока в DOM.