Je travaille sur un plugin Markdown et j’ai des difficultés à ajouter un paramètre du site permettant de désactiver la fonctionnalité. J’ai écrit le plugin en suivant la structure de Discourse Footnote, qui inclut un paramètre permettant de désactiver ce plugin. J’ai installé le plugin footnote et vérifié qu’il pouvait être désactivé depuis l’interface utilisateur et que son test correspondant passait. Cependant, la désactivation de mon plugin depuis les paramètres du site n’a aucun effet, et le test unitaire le confirme en échouant.
Je ne sais pas ce que je fais différemment par rapport au plugin footnote. Il est possible que mon utilisation de opts.features soit complètement erronée ou repose sur de mauvaises hypothèses, car comme presque partout ailleurs, j’ai simplement remplacé « footnotes » par « ruby ». Toute aide serait appréciée.
Les aspects clés liés au paramètre du site incluent :
Voici le test qui échoue continuellement (pas encore dans le dépôt) :
it "can be disabled" do
SiteSetting.enable_markdown_ruby = false
markdown = <<~MD
Here is some text: {漢字|かん|じ}.
MD
html = <<~HTML
<p>Here is some text: {漢字|かん|じ}.</p>
HTML
cooked = PrettyText.cook markdown.strip
expect(cooked).to eq(html.strip)
end
Comme prévu, l’échec indique que le texte cuit est généré comme si le Markdown était toujours appliqué.
expected: "<p>Here is some text: {漢字|かん|じ}.</p>"
got: "<p>Here is some text: <ruby>漢<rt>かん</rt>字<rt>じ</rt></ruby>.</p>"
Ce que je fais habituellement dans ce genre de cas, c’est commencer par imprimer des éléments.
Avez-vous essayé d’ajouter quelques instructions console.log internes pour afficher les variables ? Cela pourrait aider à éclaircir la situation. Je pense que les paramètres sont bien envoyés au moteur Markdown, votre test semble légitime.
J’ai trouvé le problème. Il s’agissait en effet d’un problème lié à la façon dont j’utilisais opts.features, comme je le soupçonnais. Après avoir examiné le code markdown de base, j’ai réalisé que le nom de la fonctionnalité est basé sur le nom du fichier. J’avais nommé mon fichier markdown-ruby.js.es6, donc le nom de la fonctionnalité était implicitement markdown-ruby, même si j’attribuais la fonctionnalité ruby dans mon code. Le renommage du fichier en ruby.js.es6 a résolu le problème.
Il est encore un peu flou pour moi si opts.features que je modifie représente toutes les fonctionnalités ou seulement le sous-ensemble markdown. S’il s’agit de toutes les fonctionnalités, ruby me semble un peu trop court/vague et je pourrais renommer le fichier et la fonctionnalité en markdown-ruby juste pour être prudent.