Anchoring no funciona al usar caracteres no latinos en headings

Creo que he encontrado un posible problema al usar la función de tabla de contenido autogenerada en DiscoTOC:

Al utilizar encabezados de diferentes niveles en idiomas distintos del inglés, como el chino, parece que las ID de data-d-toc en la tabla de contenido autogenerada solo capturan dígitos numéricos y letras inglesas de los encabezados. Esta situación puede dar lugar a la creación de ID idénticas con bastante facilidad, lo que posteriormente provoca enlaces incorrectos en la barra de desplazamiento de la derecha.

En la imagen anterior, si los números de serie dentro de los encabezados son ambos 5, las ID resultantes de data-d-toc serán ambas toc-h2-5. En consecuencia, esto provocará que dos enlaces distintos dirijan erróneamente a la misma sección.

Sin embargo, al modificar los números de serie a 1.5 y 2.5, las ID de data-d-toc diferirán (toc-h2-15 y toc-h2-25), garantizando así enlaces precisos y apropiados.

Para garantizar la vinculación precisa dentro de la barra de desplazamiento, ¿es aconsejable mantener los encabezados en inglés?

Además, para idiomas como el chino, ¿la solución más viable implicaría incorporar números de serie multinivel (por ejemplo, 3.5, 3.6.5, 4.2.5.6) a los encabezados?

Referencia:

Ya he mencionado este problema y también he hecho un fork.

https://meta.discourse.org/t/discotoc-automatic-table-of-contents/111143/399?u=lhc_fl

Sin embargo, aunque funciona, no es perfecto, pero me da pereza cambiar el código.

Obviamente, una mejor solución es usar base64 para generar data-d-toc y añadir un identificador único para evitar posibles títulos duplicados.

1 me gusta

No tengo la autoridad para hacer tales cambios en el foro de mi empresa por el momento, ¡pero agradezco tu respuesta!

Además, me gustaría preguntar si el equipo oficial ha considerado incorporar soporte para otros idiomas no latinos en relación con esta tabla de contenido autogenerada en futuras versiones del componente DiscoTOC. @Lilly @awesomerobot

¡Gracias de nuevo a todos!

En verdad, han tenido en cuenta los idiomas no latinos, utilizando el método slugify(h.textContent). Sospecho que esta función slugify se desarrolló de acuerdo con el método de generación de slug del foro. Cuando no está en modo ‘encode’, tienden a surgir problemas, aunque no he probado personalmente esta hipótesis.

En casos anteriores, cuando usamos la versión oficial del componente temático, nuestro método de generación de slug del foro se estableció en ‘none’, lo que dio lugar a problemas similares. ¿Puedo, por lo tanto, sugerir que intente cambiar la configuración a ‘encode’?

Además, considerando la velocidad de corrección de componentes por parte de los funcionarios… hay un componente al lado para el que un problema que planteé el año pasado aún no ha tenido seguimiento, sugiero que solicite usar la versión que he bifurcado.

1 me gusta

Intenté modificar esta configuración, pero los problemas mencionados anteriormente persisten. El ID de data-d-toc solo puede leer números y letras, y todavía hay casos de IDs de tabla de contenido duplicados. Supongo que el quid de la cuestión está en otra parte.

Actualización: Actualicé el código hoy. El sufijo ahora se genera por índice:

Esta mejora resuelve el problema de que los caracteres no latinos o el mismo nombre de título generen la misma ancla

const suffix = `${slugify(h.textContent)}-${post?.post_number}-${index}`
1 me gusta