Impossibile impostare il markdown come modalità predefinita

Ciao, scopro che anche quando ho impostato “default_composition_mode” su Markdown, agli utenti del mio forum viene proposto l’editor Rich Text all’avvio di un nuovo argomento. La versione del forum è “Discourse v3.5.0.beta9-dev — Commits · discourse/discourse · GitHub — Ember v5.12.0”.

Ogni volta che applico la modifica, mi viene chiesto “Vuoi applicare questa modifica storicamente? Questo cambierà le preferenze per 15 utenti esistenti.” e clicco Sì. Anche allora, agli utenti viene proposto l’editor Rich Text. Si tratta di un bug noto?

Modifica - nota: Ho questo problema con gli utenti che non hanno mai utilizzato l’opzione di commutazione per passare dalla modalità editor rich/markdown. Hanno semplicemente effettuato l’accesso oggi dopo che avevo già impostato la modalità di composizione predefinita nel fine settimana, subito dopo l’aggiornamento. Avevo anche nascosto l’opzione di commutazione tramite CSS del tema.

2 Mi Piace

A seguito di ciò, abbiamo un plugin che utilizza i token BBCode “wrap_open”, che non sono ancora supportati dall’editor di testo avanzato. Pertanto, dobbiamo assicurarci di rimanere in modalità Markdown per ora.

Ho usato Claude Sonnet per generare il seguente codice per garantirlo. Sarei felice di ricevere feedback su come potrei migliorarlo (soprattutto se presenta bug :sweat_smile:). Condivido anche questo nel caso in cui possa aiutare altri amministratori del forum. Il codice va in Impostazioni tema > JS (/admin/customize/themes/2/common/js/edit):

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

export default apiInitializer((api) => {
  // Forza il passaggio dell'editor dell'utente alla modalità markdown
  function switchToMarkdownMode() {
    const currentUser = api.getCurrentUser();

    // L'utente dovrebbe essere connesso se il composer è stato aperto
    if (!currentUser) {
      console.error('Nessun utente trovato');
      return;
    }

    // Ottenuta questa opzione da qui
    // 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) {
      // Passa solo se non è già in modalità markdown
      // Esempio di utilizzo: https://github.com/discourse/discourse/blob/87476ce2c18fb8f856dda7ff03804ed5fbb0ff38/app/assets/javascripts/discourse/app/services/user-tips.js#L127
      currentUser.set('user_option.composition_mode', 0);

      // Salva la preferenza dell'utente sul server
      currentUser.save(['composition_mode']).then(() => {
        console.log('Passato con successo alla modalità markdown');
      }).catch((error) => {
        console.error('Impossibile aggiornare la modalità di composizione:', error);
      });

      // Attiva immediatamente l'interfaccia del composer corrente
      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('Attivato il composer corrente in modalità markdown');
          }
        }
      }, 100); // Piccolo ritardo per garantire il rendering completo del composer
    } else {
      console.log('Già in modalità markdown, nessuna modifica necessaria');
    }
  }

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

Questa è generalmente una cattiva pratica, fare affidamento sui tempi per cose del genere è fragile.

Lascia che separi questo, vogliamo certamente consentire agli amministratori di impostare i valori predefiniti in modalità markdown.

Qual è una riproduzione minima qui?

2 Mi Piace

Proverò a riprodurre questo + lavorerò a una correzione domani, ma non sono sicuro del perché ciò accada poiché l’admin imposta per impostazione predefinita tutti i valori delle opzioni utente (se si utilizza l’opzione utente esistente nel prompt), e questo è tutto ciò che usiamo per controllare l’interruttore.

2 Mi Piace

Grazie per le risposte rapide! :slightly_smiling_face: Non sono sicuro di come posso creare una riproduzione minima per questo. Sono felice di condividere qualsiasi informazione aggiuntiva dal mio forum se puoi condividere i passaggi per farlo.

2 Mi Piace

Ho provato a riprodurlo oggi senza successo. Ho una domanda però: gli utenti aggiornano il browser dopo che hai apportato la modifica? Perché se non lo fanno, abbiamo ancora i loro vecchi dati di preferenza utente nel browser in ember, quindi la nuova preferenza non verrà ancora utilizzata.

Affinché ciò funzioni come previsto, ho fatto questo:

  • Verificato sull’utente A che l’editor fosse impostato sulla modalità avanzata
  • Come amministratore, ho modificato l’impostazione predefinita sulla modalità markdown e l’ho applicata a tutti gli utenti
  • Come utente A, ho ricaricato la pagina e riaperto l’editor, e ho visto che era in modalità markdown

Se non avessi ricaricato al passaggio 3, avrei ancora visto la modalità avanzata.

1 Mi Piace

Grazie per il follow-up, Martin. Avevo già impostato la modalità su Markdown domenica. Avevo poi effettuato l’accesso con un account di prova lunedì, in un profilo browser separato, che ha invece ricevuto l’editor Rich.

Inoltre, se questo può essere d’aiuto, ogni volta che imposto “default_composition_mode” su “Markdown”, ricevo l’avviso: “Vuoi applicare questa modifica storicamente? Questo cambierà le preferenze per 61 utenti esistenti.” Capisco che dovrei riceverlo la prima volta, ma sembra un bug che mi venga richiesto ogni volta per un certo numero di utenti.

Per ulteriori test, ho appena effettuato l’accesso anche a un altro account di prova che non effettuava l’accesso da 10 mesi. Anche questo era impostato sulla modalità Rich Text per impostazione predefinita.

1 Mi Piace

Questo è davvero molto strano… quanti utenti ci sono in totale sul tuo sito? Mi chiedo se si blocchi nel passaggio in cui dovrebbe aggiornare tutti gli utenti dalla modifica delle impostazioni del sito, perché ho notato che non c’è nulla nell’interfaccia utente che indichi che il lavoro è ancora in corso.

Dipende da quanti utenti l’hanno modificato con l’interruttore nel frattempo. Sembra che funzioni correttamente per me nei test locali.

1 Mi Piace

Secondo la nostra pagina /about, abbiamo 20.000 membri.

Chiarirò che i passaggi sono i seguenti:

  1. Visita /admin/site_settings/category/all_results?filter=default_composition_mode
  2. Imposta default_composition_mode su Modalità Markdown. Anche quando è già in modalità Markdown, puoi aprire il menu a discesa e selezionare l’opzione Markdown.
  3. Ricevi l’avviso per XX numero di utenti. Accettalo.
  4. Aspetta dieci minuti, quindi ricarica la pagina.
  5. Imposta default_composition_mode su Modalità Markdown (come al punto 2).
  6. Di nuovo, ricevi l’avviso per lo stesso numero di utenti.

Come hai menzionato, anch’io non so quanto tempo ci vuole (più di 10 minuti?) per aggiornare le preferenze storiche degli utenti. Inoltre, non penso che tutti quegli utenti avrebbero aggiornato le loro preferenze in così poco tempo. Potrei star perdendo qualcosa qui.

1 Mi Piace

Ok, certo, decisamente non sembra che molte persone stiano attivando l’opzione in quel lasso di tempo :thinking: Riesci a fare una registrazione dello schermo per mostrare cosa sta succedendo?

Ti consiglio anche di dare un’occhiata alla scheda Network negli strumenti per sviluppatori di Chrome. Dovrebbe mostrare 2 richieste come questa dopo aver salvato (la prima è quella per mostrare il prompt di XX utenti, la seconda è per salvare effettivamente l’impostazione ed eseguire il backfill):

image

La seconda deve avere uno stato 200, altrimenti, se ti sposti altrove, non verrà eseguito il backfill per gli utenti esistenti.

Grazie per le informazioni aggiuntive. Le due richieste sono mostrate nell’immagine sottostante. Entrambe sono state piuttosto veloci.

Una registrazione video è disponibile a questo link di Drive. Ho impostato l’opzione, accettato la finestra di avviso, atteso un po’, ricaricato la pagina e poi l’ho impostata di nuovo. Poi ho ricevuto di nuovo la finestra di avviso.

1 Mi Piace

Ok, la trama se complica… esta parte donde eliges Markdown cuando ya tienes Markdown seleccionado y te ofrece guardar:

No debería suceder… hay un error aquí donde considera que el valor del elemento de la lista (0) es diferente del valor de la configuración (’0’). Así que creo que el Guardar aquí no hace nada. Puedo corregir ese error, pero ¿puedes hacer esto?:

  • Cambia la configuración a “Texto enriquecido”
  • Guárdalo, pero elige “No, solo aplica los cambios en el futuro”
  • Vuelve a cambiar a “Markdown”
  • Guárdalo y elige “Sí” para aplicarlo retroactivamente

Y mira si eso soluciona los problemas que estás teniendo.

1 Mi Piace

Grazie per avermelo fatto sapere. Ho effettuato l’accesso con un vecchio account di prova e sembra che abbia funzionato correttamente: ha attivato la modalità Markdown al primo avvio :slightly_smiling_face:

C’è un modo per verificare che tutti gli utenti siano in modalità Markdown, ad esempio utilizzando il Data Explorer?

2 Mi Piace

Sono contento che abbia risolto il problema!

Sì, assolutamente, potresti fare una query come:

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

I valori sono qui:

2 Mi Piace

Grazie, tutti i nostri utenti sono ora in modalità Markdown :partying_face:

3 Mi Piace

@martin Ho spostato questo argomento dal supporto al bug e lo chiuderò, presumendo che tu abbia corretto il bug. Se non l’hai fatto, puoi riaprirlo?

1 Mi Piace

È stato corretto da FIX: Don't show setting save/cancel buttons when selecting the current value by OsamaSayegh · Pull Request #34552 · discourse/discourse · GitHub

5 Mi Piace