Для этого я использую api.decorateCooked(), но поскольку контент уже обработан (cooked), все «лишние» пробелы были удалены, например, пробел перед printf в приведённом выше примере.
Как получить доступ к «необработанному» тексту, введённому пользователем?
Для ясности: то, что я хочу реализовать с помощью своего компонента темы, — это возможность для пользователя писать что-то вроде:
Возможно ли установить пользовательский плагин в экземпляр Discourse, размещённый на бесплатном тарифе в самом Discourse? Я, впрочем, так и не нашёл, как это сделать.
Было бы возможно реализовать поддержку raw для компонентов тем? Если да, примете ли вы pull request для этого?
Хелпер wrap не делает того, что я просил. Он также удаляет отступы.
К сожалению, наши бесплатные, стандартные и бизнес-тарифы не поддерживают пользовательские плагины. Мы используем кластер, который размещает множество различных клиентов, и у нас нет механизма для запуска плагина только для одного клиента.
Поддержка возможности внедрения расширения Markdown через компонент темы — это идея, которую я рассматривал в прошлом, но у нас нет конкретных планов по её реализации. Это было бы крайне сложно реализовать.
Как насчёт двойного оборачивания? Это, безусловно, сохранит все отступы.
[wrap=test]
```
1
1
3
```
[/wrap]
Возможно, даже простое использование чего-то подобного сработает, и у вас будет отдельный элемент для работы:
Это крайне сложно и для вас, или только для кого-то вроде меня, без предварительных знаний о реализации? В чём именно заключается сложность? Не было бы проще сделать что-то более простое, чем полное расширение Markdown, например, доступ только для чтения к исходному коду?
Фронтенд не получает содержимое поста в необработанном виде (raw). Он получает только обработанную версию. Это означает, что полезная нагрузка для клиента становится меньше. Кроме того, сервер в конечном итоге отвечает за преобразование Markdown в HTML. Если бы мы делали это всё во время выполнения в браузере, это привело бы к значительному увеличению дополнительных затрат и создало бы сложные векторы атак, о которых пришлось бы беспокоиться.
Чтобы прояснить ситуацию: вы же знаете, что если вам на самом деле нужны блоки с кодом, вы можете заключить их в три обратных апострофа? Я не могу понять, в какой степени ваш пример является метафорой.
@pfaffman Не знаю, что вы имеете в виду под «блоками кофе», но да, я знаю, что три обратных апострофа создают блок кода.
Не понимаю, почему мой пример должен быть метафорой. Для чего? Изображение, которое я опубликовал, — это скриншот, демонстрирующий, что генерирует компонент моей темы для данного кода.
Да, я так полагаю. Я не видел плагин для математики, но, похоже, концепция схожа. Это та же базовая функция, что и в Discourse Graphviz, но этот плагин умеет гораздо больше: например, анимированные переходы между графами и множество опций для управления и стилизации.
Вот репозиторий на GitHub, если вам интересно. Он ещё официально нигде не развёрнут, так как мне сначала нужно написать подробную документацию по его использованию.
Тогда всё, кажется, работает, и, возможно, я что-то упускаю: решение заключается в том, чтобы отправить свои изменения через PR, и тогда они станут доступны в бизнес-планах.
Извините, я не понимаю, что вы имеете в виду. Это компонент темы, и его может установить администратор в любой экземпляр Discourse через веб-интерфейс, независимо от выбранного тарифного плана.
Скорее всего, я вас не понял. Но мне показалось, что вы хотите расширить плагин graphviz для поддержки дополнительных функций Graphviz, и что их логичнее было бы интегрировать именно в этот плагин.
Однако я не до конца понимаю, к чему вы стремитесь, поэтому могу сильно ошибаться.
Теперь я понял, что вы имели в виду. Нет, так как мы находимся на бесплатном плане, мы не могли использовать этот плагин, поэтому я разработал компонент темы вместо него. Дополнительные функции стали своего рода бонусом, который легко добавить, поскольку он основан на другой библиотеке, чем существующий плагин.
Плагины и компоненты темы очень различны, поэтому я не думаю, что возможно переиспользовать код между ними, но, полагаю, кто-то мог бы добавить тот же функционал в существующий плагин, если это будет интересно.