Ich habe noch mal bezüglich TipTap geschaut. Mit dem Sollte es sogar leichter gehen als mit dem SCEditor. Da werde ich wohl noch mal umsteigen. TipTap kommt mit HTML klar, also sollte man fürs Edit nicht mehr den Quote Text rausgeben sondern den ganz normalen Message Inhalt wie in der Leseansicht. Danach baut sich TipTap einen DOM Baum daraus, man editiert ganz normal im Editor und wenn man damit fertig ist könnte man sich den Inhalt des Eingabefeldes mit editor.getJSON() rausziehen und in PXM Code wandeln. In der Theorie ganz einfach.
const jsonToBBCode = (node) => {
if (node.type === 'text') {
let text = node.text;
// Marks (Inline-Styles) anwenden
if (node.marks) {
node.marks.forEach(mark => {
if (mark.type === 'bold') text = `${text}`;
if (mark.type === 'italic') text = `${text}`;
// Link-Logik und andere Tags ergänzen
});
}
return text;
}
// Nodes (Blöcke) verarbeiten
const content = node.content ? node.content.map(jsonToBBCode).join('') : '';
switch (node.type) {
case 'blockquote': return `>${content}\n`; // Aktuell das Quote-Format bei mir im Entwicklungsstand - ist auch nicht mehr am Skin konfigurierbar
case 'paragraph': return `${content}\n`;
case 'doc': return content;
default: return content;
}
};
// Beim Absenden:
const bbcode = jsonToBBCode(editor.getJSON());