Impossible de définir le mode markdown par défaut

Salut, je constate que même lorsque j’ai défini « default_composition_mode » sur le mode Markdown, les utilisateurs de mon forum se voient proposer l’éditeur de texte enrichi lorsqu’ils créent un nouveau sujet. La version du forum est « Discourse v3.5.0.beta9-dev — Commits · discourse/discourse · GitHub — Ember v5.12.0 ».

Chaque fois que j’applique le changement, on me demande « Souhaitez-vous appliquer ce changement historiquement ? Cela modifiera les préférences de 15 utilisateurs existants. » et je clique sur Oui. Même ainsi, les utilisateurs se voient proposer l’éditeur enrichi. S’agit-il d’un bug connu ?

Edit - note : J’ai ce problème avec les utilisateurs qui n’ont jamais utilisé l’option de basculement pour échanger leur mode d’éditeur entre riche/markdown. Ils se sont simplement connectés aujourd’hui après que j’aie déjà défini le mode de composition par défaut le week-end, juste après la mise à niveau. J’avais également masqué l’option de basculement via le CSS du thème.

2 « J'aime »

Pour faire suite à cela, nous avons un plugin qui utilise des jetons BBCode « wrap_open », qui ne sont pas encore pris en charge par l’éditeur de texte enrichi. Nous devons donc nous assurer de rester en mode Markdown pour l’instant.

J’ai utilisé Claude Sonnet pour générer le code suivant afin de garantir cela. Je serais heureux de recevoir vos commentaires sur la façon dont je pourrais l’améliorer (surtout s’il contient des bugs :sweat_smile:). Je partage également ce code au cas où il aiderait d’autres administrateurs de forum. Le code se trouve dans les paramètres du thème > JS (/admin/customize/themes/2/common/js/edit) :

import {
  apiInitializer
} from "discourse/lib/api";

export default apiInitializer((api) => {
  // Force the user's editor to switch to markdown mode
  function switchToMarkdownMode() {
    const currentUser = api.getCurrentUser();

    // The user should be signed in if the composer was opened
    if (!currentUser) {
      console.error('No user found');
      return;
    }

    // Got this option from here
    // https://github.com/discourse/discourse/blob/f0fc5646dc9bd29b0e814faea490e34800e9b322/app/assets/javascripts/discourse/app/models/user.js#L262C1-L266C4
    const currentMode = currentUser.get('user_option.composition_mode');

    if (currentMode !== 0) {
      // Only switch if not already in markdown mode
      // Example usage: https://github.com/discourse/discourse/blob/87476ce2c18fb8f856dda7ff03804ed5fbb0ff38/app/assets/javascripts/discourse/app/services/user-tips.js#L127
      currentUser.set('user_option.composition_mode', 0);

      // Save the user preference to the server
      currentUser.save(['composition_mode']).then(() => {
        console.log('Successfully switched to markdown mode');
      }).catch((error) => {
        console.error('Failed to update composition mode:', error);
      });

      // Immediately toggle the current composer UI
      setTimeout(() => {
        const toggleButton = document.querySelector('.composer-toggle-switch[data-rich-editor]');
        if (toggleButton) {
          const isRichTextActive = toggleButton.getAttribute('aria-checked') === 'true';
          if (isRichTextActive) {
            toggleButton.click();
            console.log('Toggled current composer to markdown mode');
          }
        }
      }, 100); // Small delay to ensure composer is fully rendered
    } else {
      console.log('Already in markdown mode, no change needed');
    }
  }

  api.onAppEvent('composer:opened', () => {
    switchToMarkdownMode();
  });
});

C’est généralement une mauvaise pratique, s’appuyer sur le timing pour ce genre de choses est fragile.

Laissez-moi séparer cela, nous voulons certainement permettre aux administrateurs de définir des valeurs par défaut pour le mode markdown.

Quelle est une reproduction minimale ici ?

2 « J'aime »

Je vais essayer de reproduire cela + travailler sur une correction demain, mais je ne suis pas sûr de la raison pour laquelle cela se produirait, car l’administrateur définit par défaut toutes les valeurs d’options utilisateur (si vous utilisez l’option utilisateur existante dans l’invite), et c’est tout ce que nous utilisons pour contrôler le bouton d’activation/désactivation.

2 « J'aime »

Merci pour vos réponses rapides ! :slightly_smiling_face: Je ne suis pas sûr de la façon dont je peux créer une reproduction minimale pour cela. Je suis heureux de partager toute information supplémentaire de mon forum si vous pouvez partager les étapes pour cela.

2 « J'aime »

J’ai essayé de reproduire cela aujourd’hui sans succès. J’ai cependant une question : les utilisateurs actualisent-ils leur navigateur après que vous ayez effectué le changement ? Parce que sinon, nous avons toujours leurs anciennes données de préférence utilisateur dans le navigateur en ember, donc la nouvelle préférence ne sera pas encore utilisée.

Pour que cela fonctionne comme prévu, j’ai fait ceci :

  • Vérifié sur l’utilisateur A que l’éditeur était basculé en mode riche
  • En tant qu’administrateur, j’ai changé la valeur par défaut en mode markdown et appliqué à tous les utilisateurs
  • En tant qu’utilisateur A, j’ai rechargé la page et rouvert l’éditeur, et j’ai vu qu’il était en mode markdown

Si je n’avais pas rechargé à l’étape 3, j’aurais toujours vu le mode riche.

1 « J'aime »

Merci pour votre suivi, Martin. J’avais déjà défini le mode sur Markdown dimanche. Je me suis ensuite connecté avec un compte de test lundi, dans un profil de navigateur distinct, qui a reçu l’éditeur Rich à la place.

Aussi, si cela peut aider, chaque fois que je définis “default_composition_mode” sur “Markdown”, je reçois l’avertissement : “Voulez-vous appliquer cette modification historiquement ? Cela modifiera les préférences de 61 utilisateurs existants.” Je comprends que je devrais obtenir cela la première fois, mais cela semble être un bug qu’il me le demande à chaque fois pour un certain nombre d’utilisateurs.

Pour des tests supplémentaires, je me suis également connecté à un autre compte de test qui ne s’était pas connecté depuis 10 mois. Il était également défini sur le mode Texte enrichi par défaut.

1 « J'aime »

C’est très étrange en effet… combien d’utilisateurs y a-t-il sur votre site au total ? Je me demande si cela bloque à l’étape où il est censé mettre à jour tous les utilisateurs à partir du changement de paramètre du site, car j’ai remarqué qu’il n’y a rien dans l’interface utilisateur pour indiquer que le travail est toujours en cours.

Cela dépend du nombre d’utilisateurs qui l’ont modifié avec le basculeur dans l’intervalle. Il semble que cela fonctionne correctement pour moi en test local.

1 « J'aime »

Selon notre page /about, nous avons 20 000 membres.

Je vais clarifier que les étapes sont les suivantes :

  1. Visitez /admin/site_settings/category/all_results?filter=default_composition_mode
  2. Définissez default_composition_mode sur le mode Markdown. Même lorsqu’il est déjà en mode Markdown, vous pouvez ouvrir le menu déroulant et sélectionner l’option Markdown.
  3. Obtenez l’avertissement pour XX nombre d’utilisateurs. Acceptez-le.
  4. Attendez dix minutes, puis rechargez la page.
  5. Définissez default_composition_mode sur le mode Markdown (identique à l’étape 2).
  6. Encore une fois, obtenez l’avertissement pour le même nombre d’utilisateurs.

Comme vous l’avez mentionné, je ne sais pas non plus combien de temps il faut (plus de 10 minutes ?) pour mettre à jour les préférences historiques des utilisateurs. De plus, je ne pense pas que tous ces utilisateurs aient mis à jour leurs préférences en si peu de temps. Je pourrais manquer quelque chose ici.

1 « J'aime »

D’accord, ça ne ressemble vraiment pas à beaucoup de monde qui basculerait pendant ce temps :thinking: Pourriez-vous faire un enregistrement d’écran pour montrer ce qui se passe ?

Je vous conseillerais également de jeter un œil à l’onglet Réseau dans les outils de développement Chrome. Il devrait montrer 2 requêtes comme celle-ci après que vous ayez sauvegardé (la première est celle qui affiche l’invite de XX utilisateurs, la seconde est celle qui sauvegarde réellement le paramètre et effectue le remplissage) :

image

La seconde doit avoir un statut 200, sinon, si vous naviguez ailleurs, elle n’aura pas effectué le remplissage pour les utilisateurs existants.

Merci pour les informations supplémentaires. Les deux requêtes sont présentées dans l’image ci-dessous. Les deux ont été assez rapides.

Un enregistrement vidéo est disponible à ce lien Drive. J’ai défini le paramètre, accepté la boîte de dialogue d’avertissement, attendu un peu, rechargé la page, puis je l’ai défini à nouveau. Ensuite, j’ai de nouveau reçu la boîte de dialogue d’avertissement.

1 « J'aime »

L’intrigue se complique… cette partie où vous choisissez Markdown alors que vous avez déjà sélectionné Markdown et qu’il propose d’enregistrer :

Ne devrait pas arriver… il y a un bug ici où la valeur de l’élément de liste (0) est considérée comme différente de la valeur du paramètre (’0’). Je pense donc que l’enregistrement ici ne fait rien. Je peux corriger ce bug, mais pouvez-vous faire ceci :

  • Changer le paramètre en « Texte enrichi »
  • L’enregistrer, mais choisir « Non, appliquer uniquement les modifications futures »
  • Revenir à « Markdown »
  • L’enregistrer, et choisir « Oui » pour l’appliquer rétroactivement

Et voir si cela résout les problèmes que vous rencontrez.

1 « J'aime »

Merci de m’avoir informé. Je me suis connecté avec un ancien compte de test et cela semble avoir fonctionné correctement : le mode Markdown a été activé dès la première exécution :slightly_smiling_face:

Existe-t-il un moyen de vérifier que tous les utilisateurs sont en mode Markdown, par exemple en utilisant l’Explorateur de données ?

2 « J'aime »

Heureux d’apprendre que cela a résolu le problème !

Oui, absolument, vous pourriez faire une requête comme :

SELECT composition_mode, COUNT(composition_mode) FROM user_options GROUP BY composition_mode;

Les valeurs sont ici :

2 « J'aime »

Merci, tous nos utilisateurs sont maintenant en mode Markdown :partying_face:

3 « J'aime »

@martin J’ai déplacé ce sujet du support vers le bug et je vais le fermer, en supposant que vous avez corrigé le bug. Si ce n’est pas le cas, pouvez-vous le rouvrir ?

1 « J'aime »

Il a été corrigé par FIX: Don't show setting save/cancel buttons when selecting the current value by OsamaSayegh · Pull Request #34552 · discourse/discourse · GitHub

5 « J'aime »