Das Problem: Ich möchte, dass Benutzer als RPG-Charaktere posten können. Ich würde gerne, dass sie eine Vorlage in einen Beitrag einfügen können – etwas wie Folgendes:
[wrap="characterpost"]
[characterav]https://image.link.example.png[/characterav]
[charactername][[Character Name]][/charactername]
[/wrap]
Und dann ein Skript verwenden, damit das Bild den ursprünglichen Avatar ersetzt und der Themenlink für den Charakternamen vor den Benutzernamen gesetzt wird. Zum Beispiel, wenn der Beitrag normalerweise „Benutzername“ anzeigt, möchte ich das durch „Charaktername gespielt von Benutzername“ ersetzen.
(„Charaktername“ würde einen Link zu einem Thema mit dem Charakterbogen enthalten, hoffentlich einfach nur mit dem Wikilinks-Theme-Component, um die Nutzung zu vereinfachen.)
Ich habe ein Beitragsgerüst in einen Codepen eingefügt und konnte etwas JavaScript schreiben, das genau das tut. Allerdings bin ich auf eine Mauer gestoßen, als es darum ging, es in einen Post-Decorator zu integrieren und mit der API live zum Laufen zu bringen.
Das habe ich gerade in 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>
Dieser Code hat einen Fehler verursacht. Ist es möglich, auf die „article“-Hülle für Beiträge mit decorateCookedElement zuzugreifen, damit ich auf den Benutzernamen und den Avatar zugreifen kann? Wenn nicht, wie kann ich das angehen?