Como você deve ter notado, os atributos data-ln estão presentes no HTML cozido gerado e armazenado no servidor também.
Eu implementei esse comportamento, para que mais tarde eu pudesse estender o plugin para permitir a inserção/edição confiável de fragmentos da página de visualização do tópico, equivalente ao botão de edição mostrado abaixo (mas um pouco mais robusto):
é necessária para garantir que a extensão MarkdownIt também seja executada no lado do servidor ao cozinhar o HTML.
No entanto, não encontrei tempo para implementar o recurso de edição estendido, então, se esse requisito for descartado, ele poderá ser convertido em um componente, eu acho.
Acredito que isso ocorra porque atualmente está restrito apenas ao escopo de plugins. Funcionaria sem essa verificação. (Este código foi introduzido neste commit)
Eu queria integrar números de linha para outro componente, mas não queria criar um plugin, então desisti. Seria muito legal se os recursos de markdown pudessem ser suportados em componentes de tema!
Em tempo, um ótimo recurso que você propôs aqui – muito bom.
Analisando este código, pode ser possível injetar manualmente o plugin de markdown do componente de tema em tempo de execução, mas isso seria bastante improvisado. Aguardarei o veredito da equipe principal antes de tentar implementá-lo.
Nosso pipeline de markdown é executado tanto no cliente (para visualização) quanto no servidor (para pré-renderizar o HTML das postagens). É por isso que ele é projetado apenas para plugins - eles são os únicos que podem injetar código no lado do servidor.
Agora… este caso é bastante incomum, pois a extensão é necessária apenas no compositor e não no servidor. Portanto, fazê-lo a partir de um componente de tema deve ser viável.
Hmm sim, concordo - definitivamente não é o ideal. Duplicar o código pode nem ser possível, porque os módulos markdown-it são carregados de forma assíncrona e não fazem parte do sistema de módulos amd ao qual temas/plugins têm acesso direto.
Construir um sistema para permitir que temas contribuam com transformações de md apenas no lado do cliente poderia ser legal, embora os casos de uso sejam bastante limitados. Em 99% dos casos, as pessoas querem que as transformações de md também se apliquem no lado do servidor.
Então, acho que, por enquanto, manter um plugin é provavelmente a melhor abordagem.
Gostaria de saber se esse tipo de decoração deveria ser aplicado de qualquer forma?
Por exemplo:
<p data-source-line="0">.....</p>
O atributo de dados extra ajudará muitas implementações internas que temos, como, por exemplo, não mostrar autocompletar quando você está dentro de um bloco de código. Citar e editar rapidamente também se tornam muito mais fáceis.
A implementação trivial carrega quase nenhum peso extra, mas nos permite excluir uma pilha de código-fonte.
Nós tivemos isso no passado (atrás de uma flag), mas foi removido neste commit. Encontrei esta captura de tela de algumas discussões internas sobre esse recurso:
ou seja, o problema de desempenho foi com o código de sincronização de rolagem, não com a injeção dos números de linha
Então sim, não tenho objeção em adicionar a injeção de data-source-line ao core, desde que seja adicionada apenas na pré-visualização. É algo que você estaria interessado em fazer um PR para @pipkin?