Coloration automatique du code cassée dans la vue de code en plein écran

Priorité/Gravité :
Faible
Plateforme :
Chrome 124, Ubuntu 22
Version :
Discourse v3.3.0.beta2-dev
Description :
Discourse effectue la coloration syntaxique automatique avec hljs, même lorsqu’aucun langage n’a été spécifié. Cette fonctionnalité fonctionne dans la vue normale du sujet, mais pas lors de la visualisation du code en plein écran.
Étapes reproductibles :

  1. Créez un sujet avec un bloc de code, sans spécifier le langage
System.out.println("hello world");
  1. Visualisez le sujet et constatez que hljs a détecté un langage et appliqué la coloration syntaxique.
  2. Cliquez sur le bouton plein écran en haut à droite du bloc de code.
  3. Voyez que la détection de langage hljs a échoué et qu’aucune coloration syntaxique n’est appliquée.

Voici quelques captures d’écran dans une grande image, en raison des restrictions sur les nouveaux utilisateurs :confused:.

3 « J'aime »

Merci pour le rapport, @oskar1, je peux confirmer ce bug localement. (Il est plus difficile de le reproduire sur meta car nous utilisons text et non auto comme default code lang sur meta.)

Nous allons nous pencher sur la correction de ce problème bientôt.

3 « J'aime »

Je pense que le problème se situe ici :thinking: :

https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/lib/highlight-syntax.js#L36-L52

Vous avez la classe lang-auto appliquée au code markdown et supprimée automatiquement ici pour que la bibliothèque puisse deviner la langue.

Cependant, lorsque vous passez en plein écran, lang-auto n’est plus dans l’élément, et vous n’avez que la classe language-<langue-détectée-ici>. Ainsi, lang est indéfini.

Une solution possible pourrait être ici – si lang-auto n’est pas trouvé, recherchez language-<...>.

const m = className.match(/^lang-(.+)$/);

const m = className.match(/^`(?:lang|language)-(.+)$/);

1 « J'aime »

Heureux d’examiner une PR si vous souhaitez en soumettre une @Arkshine, vous avez déjà fait une bonne partie du travail :wink:.

3 « J'aime »

J’ai fait une PR :+1: . J’espère que les tests sont assez bons !

2 « J'aime »

Merci @Arkshine, la correction est excellente, je vais la fusionner une fois que les tests passeront dans le CI.

3 « J'aime »

Ce sujet a été automatiquement fermé après 18 heures. Les nouvelles réponses ne sont plus autorisées.