Fügen Sie benutzerdefinierte Markdown-Zitat-BBCode-Tags hinzu

Ich konnte es zum Laufen bringen, indem ich den Quelltext in einem Attribut auf dem HTML belassen habe und dann in der Callback-Funktion addTagDecorateCallback() einfach diesen zurückgegeben habe, um den Originaltext zu erhalten.

Hier ist ein kleiner Code für alle, die wissen möchten, was ich getan habe.

In assets/javascripts/lib/discourse-markdown/snapblocks-discourse.js, wo die bbcode-Tags initialisiert werden, habe ich den Originaltext in einem Attribut namens snapblocks-source gespeichert, damit ich ihn später abrufen kann.

In der Datei assets\\javascripts\\discourse\\initializers\\snapblocks-discourse.js füge ich den Code zum Behandeln des Zitierens hinzu.

// assets\\javascripts\\discourse\\initializers\\snapblocks-discourse.js

import {
  addBlockDecorateCallback, // block bbcode tags
  addTagDecorateCallback, // inline bbcode tags
} from "discourse/lib/to-markdown";

function initializeSnapblocks(api, siteSettings) {
  addTagDecorateCallback(function () {
    // this.element ist kein HTML-Element
    // aber es enthält alle HTML-Attribute
    const { attributes } = this.element;

    // Normalerweise würden Sie prüfen, ob die "class" Ihre Klasse ist
    // aber alles, was ich hier brauche, ist "snapblocks-source"
    if (attributes["snapblocks-source"]) {
      let prefix = "[sb";

      // Hinzufügen von Attributen zum bbcode-Tag (die auch
      // auf dem Element als Attribute gespeichert sind).
      const attrs = [
        "blockstyle",
        "wrap",
        "wrapsize",
        "zebra",
        "showspaces",
        "santa",
      ];
      for (const attr of attrs) {
        if (attributes[attr]) {
          prefix += ` ${attr}=${attributes[attr]}`;
        }
      }

      prefix += "]";

      this.prefix = prefix;
      this.suffix = "[/sb]";
      // wenn Sie Text zurückgeben, wird dieser anstelle des ausgewählten Textes verwendet
      return attributes["snapblocks-source"];
    }
  });
}

Das Gleiche gilt für die Block-bbcode-Tags, Sie müssen nur addBlockDecorateCallback() verwenden.

Leider muss ich Beiträge neu backen, wenn ich möchte, dass alte Snapblocks-Snippets zitierfähig sind. Dies behandelt auch nicht den Fall, wenn Sie den Text auf dem SVG auswählen. Es funktioniert nur, wenn Sie Text davor und/oder danach sowie mindestens einen Teil des SVG-Textes auswählen.

3 „Gefällt mir“