Boosty Tag Formatter

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

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 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.