Ancoragem não funciona ao usar caracteres não latinos em títulos

Acredito ter encontrado um problema potencial ao usar o recurso de índice gerado automaticamente no DiscoTOC:

Ao utilizar títulos de vários níveis em idiomas que não o inglês, como o chinês, parece que os IDs data-d-toc no índice gerado automaticamente capturam apenas dígitos numéricos e letras em inglês dos títulos. Essa situação pode resultar na criação de IDs idênticos com bastante facilidade, levando subsequentemente a links incorretos na barra de rolagem do lado direito.

Na imagem acima, se os números de série nos títulos forem ambos 5, os IDs data-d-toc resultantes serão ambos toc-h2-5. Consequentemente, isso levará dois links distintos a direcionar erroneamente para a mesma seção.

No entanto, ao modificar os números de série para 1.5 e 2.5, os IDs data-d-toc serão diferentes (toc-h2-15 e toc-h2-25), garantindo efetivamente links precisos e apropriados.

Para garantir a vinculação precisa dentro da barra de rolagem, é aconselhável manter os títulos em inglês?

Além disso, para idiomas como o chinês, a solução mais viável envolveria a incorporação de números de série de vários níveis (por exemplo, 3.5, 3.6.5, 4.2.5.6) aos títulos?

Referência:

Eu já mencionei esse problema e também fiz um fork de uma cópia

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

No entanto, embora esteja funcionando, não está perfeito, mas estou com preguiça de mudar o código.

Obviamente, uma solução melhor é usar base64 para gerar data-d-toc e adicionar um identificador exclusivo para evitar possíveis títulos duplicados.

1 curtida

Eu não tenho autoridade para fazer tais alterações no fórum da minha empresa no momento, mas agradeço sua resposta!

Além disso, gostaria de perguntar se a equipe oficial considerou incorporar suporte para outros idiomas não latinos em relação a esta tabela de conteúdo gerada automaticamente em futuras versões do componente DiscoTOC? @Lilly @awesomerobot

Mais uma vez, obrigado a todos!

Na verdade, eles levaram em consideração idiomas não latinos, utilizando o método slugify(h.textContent). Suspeito que essa função slugify foi desenvolvida de acordo com o slug generation method do fórum. Quando não está no modo ‘encode’, problemas tendem a surgir, embora eu não tenha testado pessoalmente essa hipótese.

Em instâncias anteriores, quando usamos a versão oficial do componente de tema, o slug generation method do nosso fórum foi definido como ‘none’, o que deu origem a problemas semelhantes. Posso, portanto, sugerir que você tente alterar a configuração para ‘encode’?

Além disso, considerando a velocidade de correção de componentes pela equipe oficial… Em um componente vizinho, uma questão que levantei no ano passado ainda não teve solução, então sugiro que você solicite o uso da minha versão fork.

1 curtida

Tentei modificar essa configuração, mas os problemas mencionados anteriormente ainda persistem. O ID data-d-toc só pode ler números e letras, e ainda há instâncias de IDs de índice duplicados. Acho que o cerne da questão está em outro lugar?

Vou perguntar ao meu líder, obrigado pela resposta~

Atualização: Atualizei o código hoje. O sufixo agora é gerado por índice:

Esta melhoria resolve o problema de caracteres não latinos ou o mesmo nome de título gerarem a mesma âncora

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