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