Темы, созданные игнорируемыми пользователями, отображаются на главной странице

Привет @BeBe, какое решение ты нашла?

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

Его темы всегда вращаются вокруг одних и тех же (скучных) тем. :wink:

Существует способ скрыть посты пользователя внутри тем с помощью CSS:

Но, к сожалению, списки тем не включают ID создателя, поэтому скрыть темы, созданные пользователем, таким образом нельзя.

Возьмем, к примеру, пользователя с именем abc и ID 123.

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

Тег темы сейчас выглядит так:

<tr data-topic-id="123" id="ember123" class="topic-list-item … ember-view">

Внутри него, конечно, можно запросить ячейку с автором, но для этого потребуется JavaScript, так как я хочу скрыть его родительский элемент:

tr > td.posters > a:first-child[data-user-card='abc']

Теперь, если бы у нас было дополнительное свойство data-op-user-id="123" прямо на строке темы tr:

<tr data-topic-id="123" id="ember123" data-op-user-id="123" class="topic-list-item … ember-view">

Мы могли бы использовать простой пользовательский CSS для эффективной фильтрации по ID пользователя, чьи темы мы не хотим видеть:

tr.topic-list-item[data-op-user-id='123']

Возможно ли добавить такое новое свойство data-op-user-id к тегам строк темы tr.topic-list-item?

Работает только в десктопном режиме, см. ниже.


Для тех, кому это может быть интересно, я написал небольшой userscript для community.metabrainz.org.
Сначала я попробовал использовать MutationObserver, как советовали, но это оказалось слишком сложно, поэтому я просто использую простой setInterval.

Я не сделал его динамическим и не добавил настройки пользователя и т.д.
При каждом обновлении ваш черный список и директива @include (см. ниже) будут стираться.

Поскольку я надеюсь, что в настоящий Discourse будет добавлено новое свойство data-op-user-id для тем, мне больше не понадобится этот userscript.

Вы можете адаптировать его для любого другого форума на Discourse, изменив директиву @include на ваш URL (это единственная специфичная строка).


Не работает в мобильном режиме, так как (к сожалению), по дизайну, в мобильном режиме Discourse не показывает аватар автора оригинального поста (OP).

Поэтому с точки зрения борьбы со спамом было бы очень удобно иметь возможность использовать предложенный селектор tr.topic-list-item[data-op-user-id='123'].

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

Но мне бы очень, очень, очень хотелось, чтобы Discourse включал ID пользователя-автора (OP) в каждую строку темы <TR data-op-user-id="123">, чтобы для скрытия тем игнорируемых пользователей хватало суперпростого пользовательского стиля:

tr.topic-list-item[data-op-user-id='123'] { display: none; }

Или мне бы даже еще больше хотелось, чтобы Discourse просто сам скрывал темы игнорируемых пользователей.

Я не понимаю цели функции игнорирования пользователей, если их темы засоряют мой просмотр.