El componente TOC genera los atributos id de los elementos de encabezado basándose en el texto del encabezado.
Aquí hay un ejemplo de un encabezado.
main outlet
El espaciado proviene de los estilos aplicados a #main-outlet, que es un elemento de la aplicación Discourse que no tiene nada que ver con esta publicación.
Esto no es el fin del mundo si pudiera especificar un id alternativo para el encabezado. El componente TOC lo soporta:
https://github.com/discourse/DiscoTOC/blob/master/common/header.html#L293
Desafortunadamente, Discourse elimina los atributos id de los elementos de las publicaciones antes de que se ejecute el código anterior, por lo que la lógica se ve frustrada.
Aquí hay un encabezado que usa <h4 id="alt-main-outlet">main outlet</h4>:
main outlet
Note que aún usa main-outlet en lugar de alt-main-outlet.
Supongo que Discourse hace esto anticipando que alguien pueda hackear un elemento de la página. Pero con el componente TOC es bastante fácil eludirlo.
Si existe una solución para esto o si este es un problema bien discutido que me he perdido, disculpe las opiniones no solicitadas que siguen ![]()
P.D.
Personalmente, creo que Discourse NO debería eliminar los atributos id de los elementos. Esta es una construcción fundamental de las páginas web y se utiliza en la navegación de páginas con fragmentos de URL. Si alguien quiere crear un enlace a un elemento en una publicación, creo que es su derecho como autor.
El hecho de que TOC abra la puerta a la manipulación de IDs sugiere que esta medida de eliminar IDs desde el principio podría potencialmente descartarse.
Si el equipo de Discourse está tan preocupado por el secuestro de IDs, todos los IDs de Discourse deberían tener un prefijo, por ejemplo discourse-main-outlet, y la eliminación de IDs debería aplicarse solo a esos IDs con prefijo.
Puedo apreciar la imposibilidad de esto dado el código existente.
Se puede imaginar un conjunto de IDs excluidos (por ejemplo, main-outlet, etc.) que se eliminen. Esto aún deja el problema de que TOC se use para eludir esta salvaguarda, pero al menos permitiría a los autores crear anclajes útiles.
P.P.D.
Directamente relacionado con esto está el problema de los encabezados con la misma carga de texto.
Tema Uno
Ejemplos
Tema Dos
Ejemplos
Con TOC, ambos encabezados Ejemplos obtienen el mismo ID, lo cual es obviamente bastante roto. TOC podría agregar índices incrementales (por ejemplo, ejemplos, ejemplos-2, etc.) — y probablemente debería hacerlo por defecto — pero aún mejor sería una solución al problema discutido anteriormente, que permita a los autores decidir cómo describir su contenido. Por ejemplo, <h5 id="topic-one-examples">Ejemplos</h5>, etc.