Das Problem: Ich möchte, dass Benutzer als Rollenspielcharaktere posten können. Ich möchte, dass sie eine Vorlage in einen Beitrag einfügen können – so etwas wie das Folgende:
[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 Charaktername-Themenlink vor dem Benutzernamen steht. Wenn der Beitrag beispielsweise normalerweise „Username“ lautet, möchte ich dies durch „Character Name played by Username“ ersetzen.
(„Character Name“ würde einen Link zu einem Thema mit dem Charakterbogen enthalten, hoffentlich nur unter Verwendung der Wikilinks-Themenkomponente zur einfachen Verwendung.)
Ich habe ein Beitragsskelett in ein Codepen eingefügt und konnte etwas JavaScript schreiben, das genau das tut. Als es jedoch darum ging, es in einen Beitrag-Dekorator einzufügen und es mit der API live zum Laufen zu bringen, stieß ich auf eine Wand.
Hier ist, was ich derzeit in common>header habe:
<script type="text/discourse-plugin" version="0.8">
api.decorateCookedElement(
element => {
// finde das characterpost-Tag innerhalb des Beitrags
const characterPost = element.querySelector('[data-wrap="characterpost"]');
// finde das übergeordnete Element des characterpost-Tags, das Avatar und Benutzernamen enthält
const characterPostParent = characterPost.closest('article');
// färbe es rot, um zu sehen, ob es funktioniert
characterPostParent.style.backgroundColor = "red";
},
{
id: 'render-character-post', onlyStream: true, afterAdopt: true
}
);
</script>
Dies hat einen Fehler verursacht. Ist es möglich, auf die „article“-Wrapper für Beiträge mit decorateCookedElement zuzugreifen, um zum Benutzernamen und Avatar zu gelangen? Wenn nicht, wie kann ich das angehen?