Спасибо за ваш ответ!
Сегодня днём я наткнулся на вашу первую ссылку.
Файлы на GitHub датированы 7-летней давности, так что, полагаю, код может быть устаревшим?
В любом случае, я использовал это:
export function setup(helper) {
if (!helper.markdownIt) { return; }
helper.registerOptions((opts, siteSettings) => {
opts.features.nolinkify = siteSettings.no_linkify_enabled;
});
helper.allowList(["span.nolinkify"]);
}
Что я позаимствовал из GitHub - unfoldingWord/discourse-mermaid: Adds the Mermaid JS library to discourse · GitHub
В моём плагине всего несколько строк кода, и я не совсем понимаю, что именно он делает и нужно ли всё это, но, по крайней мере, я могу добавлять span-элементы с классом nolinkify.
В моём случае цель заключалась в том, чтобы легко «отключать» ссылки на слова в постах с помощью Auto-Linkify Words (этот метод принимает только теги и классы для предотвращения создания ссылок), и особенно слова в заголовках HTML-тегов при использовании DiscoTOC - automatic table of contents
Я также попробовал решение на основе синтаксиса bbcode, например:
helper.registerPlugin(md => {
md.inline.bbcode.ruler.push("nolinkify",{
tag: "nolinkify",
replace: function(state, tagInfo, content) {
const token = state.push("html_raw", '', 0);
const escaped = state.md.utils.escapeHtml(content);
token.content = `<span="nolinkify ">${escaped}</span>`;
return true;
}
});
});
Итак, я попробовал оба решения для моей проблемы с заголовками и оглавлением.
Это не работает:
## [nolinkify]test[/nolinkify]
Но это работает:
## <span class="nolinkify">test</span>
Я бы предпочел первый синтаксис, но, думаю, он несовместим с оглавлением из-за порядка выполнения скриптов…