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
- Ir a Administrador → Plugins → Anuncios
- Crear un Anuncio Interno (House Ad)
- Habilitarlo para la ubicación:
topic-list-between - Visitar la página de inicio (o cualquier lista de temas que use el diseño de tabla estándar)
- 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
colspansolo 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()compruebathis.tagName === "td"(o equivalente), pero como el componente no tiene etiqueta, nunca se convierte en"td", por lo quecolspanefectivamente 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-adpluginincorporado - Navegadores probados: Chrome + Firefox (parece ser independiente del navegador)