Как вы, возможно, заметили, атрибуты data-ln присутствуют в готовом HTML, который генерируется и хранится на сервере.
Я реализовал это поведение, чтобы позже мог расширить плагин и обеспечить надежное вставку/редактирование фрагментов со страницы просмотра темы, аналогично кнопке редактирования, показанной ниже (но более надежное):
чтобы расширение MarkdownIt также выполнялось на стороне сервера при генерации HTML.
Однако у меня не нашлось времени для реализации расширенной функции редактирования, поэтому, если это требование будет снято, возможно, его можно будет преобразовать в компонент.
Я полагаю, это связано с тем, что в настоящее время это ограничено только областью действия плагинов. Это работало бы без этой проверки. (Этот код был добавлен в этом коммите)
Я хотел интегрировать нумерацию строк для другого компонента, но не хотел создавать плагин, поэтому отказался от этой идеи. Было бы здорово, если бы функции Markdown поддерживались в компонентах тем!
Кстати, отличная функция, которую вы предложили здесь — очень здорово.
Судя по этому коду, возможно вручную внедрить плагин Markdown из компонента темы во время выполнения, но это будет довольно кривое решение. Я подожду решения основной команды, прежде чем пытаться его реализовать.
Наш конвейер Markdown работает как на стороне клиента (для предпросмотра), так и на стороне сервера (для предварительного рендеринга HTML постов). Именно поэтому он спроектирован исключительно для плагинов — только они могут внедрять код на стороне сервера.
Теперь… этот случай довольно необычен, так как расширение требуется только в редакторе, а не на сервере. Поэтому реализация через компонент темы должна быть вполне осуществима.
У вас уже есть какая-то конкретная стратегия для этого?
Хм, да, согласен — определённо не идеально. Дублирование кода может оказаться даже невозможным, потому что модули markdown-it загружаются асинхронно и не входят в систему модулей AMD, к которой темы и плагины имеют прямой доступ.
Создание системы, позволяющей темам добавлять клиентские преобразования Markdown, могло бы быть интересным, хотя сценарии использования довольно ограничены. В 99% случаев люди хотят, чтобы преобразования Markdown применялись и на стороне сервера.
Поэтому, на мой взгляд, на данный момент использование плагина, вероятно, является лучшим подходом.
Интересно, стоит ли применять такой вид оформления в любом случае?
Например:
<p data-source-line="0">.....</p>
Дополнительный атрибут данных значительно упростит многие внутренние реализации, которые у нас есть, например, отключение автодополнения, когда вы находитесь внутри блока кода. Также цитирование и быстрое редактирование станут намного проще.
Простая реализация почти не добавляет лишнего веса, но позволяет нам удалить кучу исходного кода.
Т.е. проблема с производительностью была в коде синхронизации прокрутки, а не в добавлении номеров строк
Так что у меня нет возражений против внедрения data-source-line в ядро, если только это будет добавлено только в режиме предпросмотра. Это то, чем вы, @pipkin, хотели бы заняться и создать PR?