Danke, und ich stimme zu. Werde es mir ansehen, sobald ich Zeit habe. Du wärst immer willkommen, einen Pull-Request einzureichen.
Dies ist derzeit das beabsichtigte Verhalten, aber ich bin natürlich offen für bessere Ideen. Welche Art von visueller Rückmeldung würdest du empfehlen?
Wie Sie vielleicht bemerkt haben, sind die data-ln-Attribute auch im generierten und serverseitig gespeicherten HTML vorhanden.
Ich habe dieses Verhalten implementiert, damit ich das Plugin später erweitern kann, um das zuverlässige Einfügen/Bearbeiten von Fragmenten von der Topic-View-Seite zu ermöglichen, äquivalent zum unten gezeigten Bearbeiten-Button (aber etwas robuster):
erforderlich, um sicherzustellen, dass die MarkdownIt-Erweiterung auch serverseitig ausgeführt wird, wenn das HTML gekocht wird.
Ich habe jedoch noch keine Zeit gefunden, die erweiterte Bearbeitungsfunktion zu implementieren. Wenn diese Anforderung also wegfällt, könnte sie meiner Meinung nach in eine Komponente umgewandelt werden.
@sam Ich versuche, es in eine Theme-Komponente umzuwandeln, aber ich kann nicht herausfinden, wie dieser Code im Kontext eines markdownit-Plugins ausgeführt werden kann:
// javascripts/lib/discourse-markdown/initialize_markdownit_plugin.js:
export function setup(helper) {
helper.registerPlugin(markdownitLineNumbers); // markdownitLineNumbers ist bereits verfügbar
}
Ich habe den Verdacht, dass die Zeile im Plugin, die ich zuvor geschrieben habe, auch clientseitige Magie einstreut:
Ich glaube, das liegt daran, dass es derzeit nur auf den Geltungsbereich von Plugins beschränkt ist. Es würde auch ohne diese Prüfung funktionieren. (Dieser Code wurde in diesem Commit eingeführt)
Ich wollte Zeilennummern für eine andere Komponente integrieren, aber ich wollte kein Plugin erstellen, also habe ich darauf verzichtet. Es wäre super, wenn Markdown-Funktionen in Theme Components unterstützt werden könnten!
Nebenbei bemerkt, eine großartige Funktion, die Sie hier vorgeschlagen haben – sehr gut.
Wenn ich mir diesen Code ansehe, wäre es vielleicht möglich, das Markdown-Plugin von der Theme-Komponente zur Laufzeit manuell einzuschleusen, aber das wäre ziemlich hacky. Ich werde das Urteil des Kernteams abwarten, bevor ich versuche, es zu implementieren.
Unsere Markdown-Pipeline läuft sowohl auf dem Client (für die Vorschau) als auch auf dem Server (um das HTML für Beiträge vorab zu rendern). Deshalb ist sie nur für Plugins ausgelegt – nur diese können serverseitig Code einschleusen.
Nun… dieser Fall ist ziemlich ungewöhnlich, da die Erweiterung nur im Composer und nicht auf dem Server benötigt wird. Daher sollte es machbar sein, sie von einer Theme-Komponente aus zu realisieren.
Hattest du eine bestimmte Strategie dafür im Sinn?
Das scheint etwas zu sein, das breite Zustimmung finden würde. Es kann schwierig sein, seinen Platz in einem langen Beitrag zu finden. Könnte es pr-welcome sein?
Hmm ja, stimme zu – definitiv nicht ideal. Das Duplizieren des Codes ist möglicherweise nicht einmal möglich, da die markdown-it-Module asynchron geladen werden und nicht Teil des AMD-Modulsystems sind, auf das Themes/Plugins direkten Zugriff haben.
Der Aufbau eines Systems, das es Themes ermöglicht, clientseitige md-Transformationen beizusteuern, könnte cool sein, obwohl die Anwendungsfälle ziemlich begrenzt sind. In 99 % der Fälle möchten die Leute, dass md-Transformationen auch serverseitig angewendet werden.
Daher denke ich, dass es vorerst wahrscheinlich am besten ist, bei einem Plugin zu bleiben.
Ich frage mich, ob diese Art von Dekoration trotzdem angewendet werden sollte?
Z.B.:
<p data-source-line="0">.....</p>
Das zusätzliche Datenattribut wird viele unserer internen Implementierungen unterstützen, wie zum Beispiel das Nichtanzeigen von Autovervollständigung, wenn Sie sich in einem Codeblock befinden. Auch das Zitieren und schnelle Bearbeiten wird dadurch viel einfacher.
Die triviale Implementierung bringt fast kein zusätzliches Gewicht mit sich, erlaubt uns aber, einen Haufen Quellcode zu löschen.
Wir hatten das schon einmal (hinter einem Flag), aber es wurde in diesem Commit entfernt. Ich habe diesen Screenshot aus internen Diskussionen über diese Funktion gefunden:
d.h. das Performance-Problem lag im Code für die Scroll-Synchronisation, nicht bei der Einfügung der Zeilennummern
Also ja, ich habe keine Einwände gegen die Einfügung der data-source-line in den Core, solange sie nur in der Vorschau hinzugefügt wird. Wärst du daran interessiert, einen PR dafür zu erstellen, @pipkin?