Насколько мне известно, есть два способа сделать это:
<span data-theme-custom>какой-то текст</span>
CSS:
[data-theme-custom] {
color: pink;
}
[wrap="indent"]какой-то текст[/wrap]
Это создаст либо div, либо span (если на той же строке есть другой контент), содержащий следующие атрибуты: class="d-wrap" и data-wrap="custom".
CSS
[data-wrap="custom"] {
color: pink;
}
Есть ли другие способы кастомизировать выбранное содержимое в посте, о которых я не знаю?
Также есть ли способ добавить класс к элементу? В поиске ничего не нашёл. Думаю, это невозможно?
Мне тоже было бы интересно узнать, какие HTML-теги работают в редакторе. Мне кажется, я где-то это уже видел, но сегодня утром не смог найти.
Например, я пытался добавить <button class="success">Нажми меня</button> в редактор: в предпросмотре он отображался, но при публикации не сработал. Похоже, что некоторые HTML-теги работают, но точно неясно, какие именно.
В Discourse можно использовать некоторые HTML-классы, однако из соображений безопасности большинство HTML-тегов в постах подвергается санитизации, и в Markdown разрешены только строго ограниченные белые списки HTML. Чтобы добавить классы в белый список, необходимо использовать плагин, поскольку санитизация выполняется как на стороне сервера, так и на стороне клиента. Подробнее о том, где добавлять разрешённые атрибуты, см. статью Whitelisting HTML tags / attributes. И, как я полагаю, это должно выглядеть примерно так: Discourse HTML Whitelist. Также, как отметил @RGJ, обратите внимание, что функция whiteList() устарела, и теперь она называется allowList() (см. реализацию).
Что касается других способов кастомизации контента: посты представляют собой виджеты, а темы Discourse позволяют декорировать виджеты, поэтому вы можете использовать эту возможность.
В моём плагине всего несколько строк кода, и я не совсем понимаю, что именно он делает и нужно ли всё это, но, по крайней мере, я могу добавлять span-элементы с классом nolinkify.
В моём случае цель заключалась в том, чтобы легко «отключать» ссылки на слова в постах с помощью Auto-Linkify Words (этот метод принимает только теги и классы для предотвращения создания ссылок), и особенно слова в заголовках HTML-тегов при использовании DiscoTOC - automatic table of contents
Я также попробовал решение на основе синтаксиса bbcode, например: