Проблема: я хочу, чтобы пользователи могли публиковать сообщения от лица персонажей ролевой игры. Мне бы хотелось, чтобы они могли вставлять в пост шаблон вроде этого:
[wrap="characterpost"]
[characterav]https://image.link.example.png[/characterav]
[charactername][[Имя персонажа]][/charactername]
[/wrap]
А затем использовать скрипт, который заменит изображение на оригинальный аватар, а ссылку на тему с именем персонажа добавит перед именем пользователя. Например, если пост обычно выглядит как «Имя_пользователя», я хочу заменить это на «Имя_персонажа (в исполнении Имя_пользователя)».
(«Имя_персонажа» должно включать ссылку на тему с листом персонажа, желательно используя компонент тем wikilinks для простоты.)
Я вставил скелет поста в Codepen и смог написать JavaScript, который делает именно это. Однако, когда дело дошло до добавления этого в декоратор постов и запуска вживую через API, я уперся в стену.
Вот что у меня сейчас есть в common>header:
<script type="text/discourse-plugin" version="0.8">
api.decorateCookedElement(
element => {
// найти тег characterpost внутри поста
const characterPost = element.querySelector('[data-wrap="characterpost"]');
// найти родительский элемент тега characterpost, содержащий аватар и имя пользователя
const characterPostParent = characterPost.closest('article');
// покрасить в красный, чтобы проверить, работает ли это
characterPostParent.style.backgroundColor = "red";
},
{
id: 'render-character-post', onlyStream: true, afterAdopt: true
}
);
</script>
Это вызывает ошибку. Возможно ли получить доступ к обёртке «article» для постов через decorateCookedElement, чтобы я мог добраться до имени пользователя и аватара? Если нет, как мне это сделать?