Wie greife ich auf den unkomprimierten Inhalt einer Theme-Komponente zu?

I’m developing a theme component where I would like to do something similar to:

[code]
main() {
  printf("Hello World!\n");
}
[/code]

which yields:

main() {
  printf("Hello World!\n");
}

I’m using api.decorateCooked() for this, but since the content is already cooked all “redundant” space has been removed, e.g. the space before printf in the example above.

How can I get access the “uncooked” text as the user entered it?

To be clear; what I want to support with my theme component is to allow the user to write something like:

[mytag]
main() {
  printf("Hello World!\n");
}
[/mytag]

which my theme component understands and replaces with a transformation of the text within the [mytag] ... [/mytag].

Um Zugriff auf das Rohformat zu erhalten, musst du ein Plugin verwenden.

Du kannst jedoch den wrap-Helper nutzen, sodass du ein div-Element hast, mit dem du arbeiten kannst.

[wrap=test]
hallo welt
[/wrap]

Wird gerendert zu:

<div class="d-wrap" data-wrap="test">
<p>hallo welt</p>
</div>
2 „Gefällt mir“

Danke.

Ist es möglich, ein benutzerdefiniertes Plugin in einer von Discourse gehosteten Discourse-Instanz auf dem kostenlosen Plan zu installieren? Ich habe bisher keinen Weg gefunden.

Wäre es möglich, die Unterstützung für raw in Theme-Komponenten einzuführen? Falls ja, würdet ihr einen entsprechenden PR akzeptieren?

Der wrap-Helper macht nicht das, was ich wollte. Er entfernt ebenfalls die Einrückung.

Leider ermöglichen unsere kostenlosen, Standard- und Business-Tarife keine benutzerdefinierten Plugins. Wir nutzen einen Cluster, der viele verschiedene Kunden hostet, und haben keine Möglichkeit, ein Plugin nur für einen einzelnen Kunden auszuführen.

Die Unterstützung der Möglichkeit, eine Markdown-Erweiterung über eine Theme-Komponente einzufügen, habe ich in der Vergangenheit bereits erwogen, aber wir haben keine konkreten Pläne, dies hinzuzufügen. Es wäre äußerst schwierig umzusetzen.

Wie wäre es mit einer doppelten Umhüllung? Dies würde sicherlich die gesamte Einrückung beibehalten.

[wrap=test]
```
1
  1
    3
```
[/wrap]

Vielleicht funktioniert auch einfach etwas wie dies, wobei Sie ein eindeutiges Element haben, mit dem Sie arbeiten können:

```custom
test
```
3 „Gefällt mir“

Ist es auch für dich extrem schwierig oder nur für jemanden wie mich ohne Vorkenntnisse zur Implementierung? Worin liegt die Schwierigkeit? Wäre es einfacher, etwas Einfacheres als eine vollständige Markdown-Erweiterung zu machen, z. B. schreibgeschützten Zugriff auf den Rohcode?

Ja, das könnte eine Option sein. Danke.

Das Frontend erhält nicht den raw-Beitragsinhalt. Es erhält nur die verarbeitete Version. Das bedeutet, dass die an den Client gesendeten Datenpakete kleiner sind. Außerdem ist der Server letztendlich für die Umwandlung von Markdown in HTML verantwortlich. Wenn wir dies alles zur Laufzeit im Browser durchführen würden, würden wir erhebliche zusätzliche Kosten verursachen und uns mit komplizierten Sicherheitsrisiken auseinandersetzen müssen.

2 „Gefällt mir“

@sam Danke für deine Hilfe. Dein Vorschlag hat sich gut ausgezahlt und bietet den Nutzern zudem eine recht ordentliche Syntax:

:sunglasses:

2 „Gefällt mir“

Nur zur Klarstellung: Du weißt doch, dass man Code-Blöcke mit drei Backticks umschließen kann, wenn man wirklich Code-Blöcke meint, oder? Ich kann nicht sagen, inwiefern dein Beispiel eine Metapher ist.

@pfaffman Ich weiß nicht, was du mit „Coffee Blocks

1 „Gefällt mir“

Entschuldigung. Kaffee und Code sind auf meiner mobilen Tastatur fast gleich. Jedes Mal, wenn ich den Satz schrieb, hat er sie falsch geschrieben!

Ich habe hin und her gesucht und kann in deinem Beispiel nicht erkennen, was den Unterschied zwischen deinem Bild und einem normalen Code-Block ausmacht.

Das Diagramm, das mein Theme-Komponente hinzugefügt hat.

1 „Gefällt mir“

Ah! Du möchtest also etwas Ähnliches wie das Mathematik-Plugin, aber für deine Graphiksprache statt für TeX?

Ja, das denke ich auch. Ich habe das Math-Plugin noch nicht gesehen, aber es klingt konzeptionell ähnlich. Es erfüllt die gleiche Grundfunktion wie Discourse Graphviz, kann aber viel fortgeschrittenere Dinge, wie animierte Übergänge zwischen Graphen, und bietet eine ganze Reihe von Optionen zur Steuerung und Gestaltung.

1 „Gefällt mir“

Es gibt auch Discourse Graphviz, was, meiner Meinung nach, Ihr Problem immer noch nicht löst, da Sie kein Plugin installieren können.

Hier ist das GitHub-Repo, falls du interessiert bist. Es ist noch nirgendwo offiziell bereitgestellt, da ich zunächst eine detaillierte Dokumentation darüber schreiben muss, wie man es verwendet.

Dann scheint es zu funktionieren, und vielleicht übersehe ich etwas, aber die Lösung wäre, Ihre Änderungen als PR einzureichen, und dann wäre sie für Business-Pläne verfügbar.

Entschuldigung, ich verstehe nicht, was du meinst. Es ist eine Theme-Komponente, die von einem Administrator über die Weboberfläche in jede Discourse-Instanz installiert werden kann, unabhängig davon, welcher Tarif genutzt wird.

Ich habe das wahrscheinlich nicht verstanden. Aber es schien so, als wolltest du das graphviz-Plugin erweitern, um mehr graphviz-Funktionen zu unterstützen, und dass es sinnvoller wäre, diese in das Plugin zu integrieren.

Aber ich verstehe nicht wirklich, was du vorhast, also liege ich vielleicht völlig daneben.

Jetzt verstehe ich, was du meintest. Nein, da wir einen kostenlosen Plan nutzen, konnten wir dieses Plugin nicht verwenden, und daher habe ich stattdessen eine Theme-Komponente entwickelt. Die zusätzlichen Funktionen waren eine Art Bonus, der sich leicht hinzufügen ließ, da er auf einer anderen Bibliothek als das bestehende Plugin basiert.

Plugins und Theme-Komponenten sind sehr unterschiedlich, daher glaube ich nicht, dass es möglich ist, Code zwischen ihnen wiederzuverwenden. Aber ich nehme an, es wäre für jemanden möglich, die gleiche Funktionalität zum bestehenden Plugin hinzuzufügen, falls Interesse besteht.

2 „Gefällt mir“