Anuncio de la casa no centrado en topic-list-between (alineado a la izquierda)

Resumen

Los anuncios internos (House ads) renderizados en la ubicación topic-list-between ya no están centrados a lo ancho de la lista de temas. En su lugar, aparecen alineados a la izquierda (confinados al área de la primera columna). Esto parece ser una regresión causada por hacer que el componente house-ad no tenga etiqueta (tagless), lo que rompe la semántica de la tabla.


Pasos para Reproducir

  1. Ir a Administrador → Plugins → Anuncios
  2. Crear un Anuncio Interno (House Ad)
  3. Habilitarlo para la ubicación: topic-list-between
  4. Visitar la página de inicio (o cualquier lista de temas que use el diseño de tabla estándar)
  5. Observar la alineación del anuncio interno

Comportamiento Esperado

El anuncio interno debería renderizarse centrado a lo ancho completo de la lista de temas (abarcando todas las columnas), como lo hacía anteriormente.


Comportamiento Actual

El anuncio interno está alineado a la izquierda y solo ocupa la porción izquierda de la tabla (aproximadamente el espacio de la columna del “título del tema”), en lugar de abarcar la fila.


Análisis Técnico

Esto parece ser causado por marcado de tabla inválido producido por el componente house-ad.

Archivo:
plugins/discourse-adplugin/assets/javascripts/discourse/components/house-ad.gjs
El componente no tiene etiqueta:

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

Pero renderiza un div con un atributo colspan:

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

Por qué esto falla

  • colspan solo funciona en <td> / <th>, no en <div>.
  • En la tabla de la lista de temas, esto termina siendo un <div> directamente dentro de un <tr>, lo cual es HTML inválido y hace que el navegador lo distribuya incorrectamente (típicamente colapsándolo en la región de la primera columna).
  • La lógica colspanAttribute() comprueba this.tagName === "td" (o equivalente), pero como el componente no tiene etiqueta, nunca se convierte en "td", por lo que colspan efectivamente nunca se aplica.

Fuente de Regresión Probable

Esto parece haber sido introducido por la aplicación de la regla de linting/refactorización de “componentes sin etiqueta” (el cambio que convirtió componentes a tagless), lo que rompió involuntariamente componentes que deben renderizarse como celdas de tabla reales en ciertos conectores/ubicaciones.


Entorno

  • Versión de Discourse: latest (tests-passed)
  • Plugin de Anuncios: discourse-adplugin incorporado
  • Navegadores probados: Chrome + Firefox (parece ser independiente del navegador)

1 me gusta