Dies tritt in meiner Entwicklungsumgebung auf, in einem Live-Discourse-Forum https://discourse.gohugo.io/ und im Discourse-Playground.
Im Allgemeinen wird bei Code-Blöcken mit Trennlinien (fenced code blocks), bei denen keine Sprache festgelegt ist, die automatische Erkennung aktiviert. Dies funktioniert bei einer normalen Highlight.JS-Nutzung (Node oder Browser) immer, indem etwas ausgewählt wird.
Discourse scheint solche Blöcke als <code class="lang-auto"> zu speichern, was keine gültige Sprache ist ![]()
Ich habe mit dem AI-Bot ask.discourse.cm…30386 gesprochen:
Er sagte, dass ihr einige Magie zur LAUFZEIT anwendet, um das „lang-auto“ zu entfernen und dann highlight.js die automatische Erkennung erneut ausführen lässt. Es sieht so aus, als ob diese Aktualisierung nicht immer stattfindet, BEVOR highlight.JS den Code bearbeitet. Das wirkt wie ein Fehler in der highlight.js-Integration und der Implementierung der automatischen Erkennung innerhalb von Discourse.
Das Deaktivieren einer Standardsprache funktioniert ebenfalls nicht, da dann das „Entfernen von lang-auto“ nicht funktioniert und es so aussieht, als ob der Discourse-Weg die automatische Erkennung nicht erneut ausführt.
- Das manuelle Festlegen der Sprache funktioniert immer – für integrierte und eine benutzerdefinierte (hugo-templates) Sprache, die über die PluginAPI (registerHLJSLanguage) als Theme-Komponente hinzugefügt wurde.
- Ohne Sprache schlägt es je nach Timing und Race Conditions von content() fehl.
Das Festlegen der Standardsprache auf „text“ ist keine Option, da wir möchten, dass sie hervorgehoben wird, und wir die automatische Erkennung aus Gründen der Benutzerfreundlichkeit wünschen (und sie funktioniert…).
Hier ist ein Markdown-Beispiel, bei dem der zweite Code-Block fehlschlägt (natürlich nur, wenn die Standardsprache auf „auto“ gesetzt ist). Leicht reproduzierbar mit dem unten stehenden Markdown auf https://try.discourse.org/
und innerhalb von 24 Stunden: Failed Discourse Autodetection breaks rendering of fenced code blocks - support - Discourse Demo
# Das funktioniert
```
{{ $currentPagemd5 := md5 $currentPage.File.Path }}
{{ $currentPagemd5ext := (print $currentPagemd5 ".json")}}
```
# Das ist fehlgeschlagen und hat „lang-auto“ zugewiesen
```
{{ $currentPage := . }}
{{ $jsonFile := "" }}
{{ with $currentPage.File }}
{{ $currentPagemd5 := md5 $currentPage.File.Path }}
{{ $currentPagemd5ext := (print $currentPagemd5 ".json")}}
{{ $files := readDir "data/commits/" }}
{{if gt (len $files ) 0}}
<div class="bord-bas"></div>
<div>
<details>
<summary>Changements de la page</summary>
<div>
{{ range $files }}
{{ if eq .Name $currentPagemd5ext }}
{{ $jsonFile := $currentPagemd5 }}
{{ $data := index $.Site.Data.commits $jsonFile }}
<ul>
{{ range $data }}
<li>
{{ dateFormat "02/01/2006" .commit_date }} : {{ trim .message "\n" }} ({{ .author }})
</li>
{{ end }}
</ul>
{{ end }}
{{ end }}
</div>
</details>
</div>
{{ end }}
{{ end }}
```
