Реклама в доме не отцентрована в topic-list-between (выровнена по левому краю)

Краткое описание

Рекламные объявления, отображаемые в размещении topic-list-between, больше не центрируются по ширине списка тем. Вместо этого они выравниваются по левому краю (ограничены областью первого столбца). Это похоже на регрессию, вызванную переходом компонента house-ad на безтеговый режим, что нарушает семантику таблицы.


Шаги для воспроизведения

  1. Перейдите в Admin → Plugins → Ads
  2. Создайте House Ad
  3. Включите его для размещения: topic-list-between
  4. Откройте главную страницу (или любой список тем, использующий стандартную табличную разметку)
  5. Проверьте выравнивание рекламного объявления

Ожидаемое поведение

Рекламное объявление должно отображаться по центру, занимая всю ширину списка тем (распространяясь на все столбцы), как это было ранее.


Фактическое поведение

Рекламное объявление выровнено по левому краю и занимает только левую часть таблицы (примерно область столбца «заголовок темы»), вместо того чтобы занимать всю строку.


Технический анализ

Это, по-видимому, вызвано некорректной разметкой таблицы, генерируемой компонентом house-ad.

Файл:
plugins/discourse-adplugin/assets/javascripts/discourse/components/house-ad.gjs

Компонент является безтеговым:

@tagName("")
export default class HouseAd extends AdComponent {

Однако он рендерит div с атрибутом colspan:

<div
  colspan={{this.colspanAttribute}}
  class={{concatClass "house-creative" this.adUnitClass}}
  ...attributes
>

Почему это ломается

  • colspan работает только на <td> / <th>, а не на <div>.
  • В таблице списка тем это приводит к тому, что <div> оказывается напрямую внутри <tr>, что является некорректным HTML и заставляет браузер отображать его неправильно (обычно сворачивая в область первого столбца).
  • Логика colspanAttribute() проверяет this.tagName === "td" (или аналогичное), но поскольку компонент безтеговый, он никогда не становится "td", поэтому colspan фактически никогда не применяется.

Вероятный источник регрессии

Это, по-видимому, было внесено в результате принудительного применения линтера для «безтеговых компонентов» / рефакторинга (изменения, которое перевело компоненты в безтеговый режим), что непреднамеренно сломало компоненты, которые в определенных коннекторах/размещениях должны рендериться как настоящие ячейки таблицы.


Окружение

  • Версия Discourse: последняя (тесты пройдены)
  • Плагин Ads: встроенный discourse-adplugin
  • Тестируемые браузеры: Chrome + Firefox (проблема не зависит от браузера)

2 лайка