Обработка якорей в постах, созданных с помощью Markdown

Всем привет! Я использую сайт на Discourse для публикации спецификаций, которые в основном написаны на Markdown, но столкнулся с проблемой: якоря, используемые для заголовков, отображаются, хотя должны быть скрыты.

Подскажите, пожалуйста, есть ли способ их скрыть?

Привет, добро пожаловать!

Этот синтаксис из kramdown или PHP Markdown Extra?

Discourse использует MarkdownIt, который основан на спецификации CommonMark. Он не поддерживает указание идентификатора заголовка.

Кажется, что этот вопрос обсуждался ранее: Anchors in markdown - Spec - CommonMark Discussion, но я не вижу какого-либо окончательного вывода.

Однако Discourse автоматически генерирует якоря.
Вы можете увидеть это здесь:

https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse-markdown-it/src/features/anchor.js

В целом, вы можете ожидать следующие идентификаторы:

  • h-{headingId} (без ID поста, без слага)
  • h-{slug}-{headingId} (без ID поста)
  • p-{postId}-h-{headingId} (с ID поста, без слага)
  • p-{postId}-h-{slug}-{headingId} (с ID поста и слагом)

Например:

Если вы предпочитаете, вы все еще можете создать якорь вручную с помощью HTML, например, <a name="anchor_name"></a>


Дополнительные ресурсы —
Если вам нужно сгенерировать оглавление, для вас есть этот компонент:

Большое спасибо @Arkshine!

Проблема в том, что мы публикуем markdown-файлы, которые используются в других целях в Discourse, поэтому люди, поддерживающие документацию, используют эти якоря для перекрёстных ссылок при объединении нескольких markdown-файлов в один документ.

Думаю, я напишу скрипт для очистки перед публикацией контента.

Понятно!

Решение также заключается в создании плагина для Discourse с поддержкой синтаксиса Markdown. Если у вас есть бюджет, вы можете обратиться в Marketplace.

@Nihokam

Если вы всё ещё заинтересованы, я создал небольшой плагин для Discourse, который позволяет указывать идентификатор якоря рядом с заголовком.

Он работает в дополнение к автоматическим якорям заголовков в Discourse.
Обратите внимание, что поддержка базовая. Вероятно, существует множество вариантов, но этот плагин поддерживает только следующий:

## Мой заголовок {#custom_section}

что сгенерирует:

<a name="custom_section" href="#custom_section" class="custom-anchor-id"></a>

Вы можете попробовать его! Дайте знать, если возникнут какие-либо проблемы.

Спасибо @Arkshine!

Я уточню у нашего админа Discourse насчёт его использования :grin:

@Arkshine, вы знаете, как генерируются якоря в Discourse (текущий сайт)? Спрашиваю, потому что они, кажется, не следуют паттернам, которые вы привели. Например, посмотрите это:

https://meta.discourse.org/t/adding-a-table-to-your-post-using-markdown/66544#creating-a-simple-table-1

Есть ли для этого настройка? Я не мог её найти. Или они используют <a>? Или ваш плагин?