Ciao
Ho iniziato da poco a lavorare con Discourse e dalla mia esperienza di 1 settimana posso sicuramente dire che il livello di ingresso è piuttosto alto per uno sviluppatore che ha effettivamente bisogno di modificare le cose principali, questo è dovuto alla mancanza di documentazione/informazioni reali, specialmente se parliamo delle nuove opzioni più recenti, poiché posso trovare solo qualcosa che non funziona più per la versione 3.6.0 piuttosto che il nuovo approccio e anche se ne ho trovate alcune, il livello di dettaglio in quelle è basso, nessun esempio di vita reale o spiegazioni più dettagliate su come usare le cose.
Tuttavia, ho bisogno di modificare il componente second-factor-add-totp.gjs e non ci sono riuscito poiché non ci sono informazioni su come farlo correttamente nel mio tema personalizzato.
Ho scoperto che esiste qualcosa chiamato PluginOutlet che è progettato per funzionare come un gancio che puoi usare per iniettare il tuo codice personalizzato o persino modificare l’output se l’elemento è racchiuso in PluginOutlet (non sono sicuro, c’è qualcosa come api.renderInOutlet, ma non ho trovato alcuna informazione normale su come usarlo). Guardando quei componenti Ember, non vedo lì PluginOutlet che potrebbe potenzialmente aiutare a fare almeno alcune manipolazioni con la struttura usando almeno JS puro.
Puoi chiarire se è qualcosa che può essere aggiunto lì e se potrei usarlo per modificare la struttura della finestra modale o almeno usare JS puro per spostare alcuni elementi al loro posto.
Inoltre, forse non l’ho trovato, ma esiste una documentazione con esempi per i nuovi approcci?
Certamente.
Quindi, secondo la versione “modificata” che ho, devo aggiornare un po’ il design per il Modale MFA (quando l’utente deve configurare un’app di autenticazione per MFA).
Con aggiornamento intendo, ad esempio, spostare il QR Code nella struttura HTML, per essere più specifici nel testo del sito “js.user.second_factor.enable_description”, il QR Code dovrebbe trovarsi da qualche parte tra il nuovo testo fornito (markup HTML).
Un altro esempio è assicurarsi che “Inserisci manualmente” mostri invece il codice effettivo che può essere copiato cliccandoci sopra (manualmente tramite trigger JS per farlo apparire e semplicemente spostarlo).
Tutto ciò può essere ottenuto utilizzando manipolazioni JS regolari, senza una ricostruzione effettiva della struttura del componente originale, ma la sfida principale per me è capire un posto dove questo JS possa essere inserito in modo che venga eseguito all’apertura del modale, cosa che non sono ancora riuscito a capire.
Chiarimento aggiuntivo: sto usando un tema personalizzato che è memorizzato tramite l’opzione GIT.
Ciao @Yan_Rudenko, la documentazione migliore per iniziare è probabilmente questo tutorial:
Come hai menzionato, i Plugin Outlets sono il modo migliore per personalizzare l’interfaccia utente. Ma questi non sono disponibili ovunque. Solo alcune parti dell’interfaccia utente sono progettate per essere personalizzate.
Manipolare il DOM usando JS normale causerà errori, perché il nostro framework di rendering perderà il controllo degli elementi che ha renderizzato sullo schermo. È meglio attenersi ai plugin outlet supportati e ad altre API JS di Discourse (trattate anche nel tutorial).
Ciao @david, grazie per il link al tutorial, ma l’ho già controllato e non ho trovato risposte a quello che stavo cercando. Gli esempi sono basilari e non coprono, ad esempio, come ottenere una categoria specifica (invece di fare una chiamata ajax) o come utilizzare l’API di Discourse nel codice (citato https://docs.discourse.org/), che è presente per quanto ne so e vedo. Ecco perché ho scritto qui per ottenere maggiori dettagli dalle persone che lavorano con Discourse quotidianamente e conoscono molte cose che non sono presenti nella documentazione.
Capisco perfettamente che l’uso di JavaScript puro possa causare problemi, ma è l’unica cosa che mi è venuta in mente per ora, forse in futuro sarò in grado di modificarla in modo più appropriato se ce ne saranno.
Quindi, se ho capito bene, nella versione attuale di Discourse che sto utilizzando, ovvero la 3.6.0.beta2-latest, le modifiche che ho menzionato non potranno essere apportate con gli strumenti integrati di Discourse? A causa della mancanza di PluginOutlets in quei componenti?
Il team di sviluppo sta considerando di aggiungerli ai componenti menzionati nelle future release, dato che presumo non ci siano problemi tecnici, ma si tratta di una decisione da parte di alcune persone che ci lavorano?
@david, ti ringrazio per la proposta, la prenderò in considerazione quando avrò il tempo necessario, ma devi capire che per una persona che ha appena iniziato a usare Discourse, questo potrebbe richiedere del tempo, poiché devo capire come prepararne uno con le modifiche giuste + come hai menzionato la fase di approvazione + il tempo prima che venga inserito nella prossima release.
Speravo che il team di sviluppo, molto più qualificato, potesse prepararlo in 1 ora se si trattasse solo di aggiungere un wrapper PluginOutlet e alcuni all’interno dei componenti in posti diversi (potrei sbagliarmi), il che ridurrebbe il tempo necessario per consegnarlo nella nuova release.
Tuttavia, come ho menzionato sopra, prenderò in considerazione la tua proposta.
Ancora, non ho ricevuto una risposta riguardo alla mia domanda, se è possibile fare le cose che ho menzionato all’interno della versione attuale di Discourse o se le modifiche che ho menzionato devono essere prima aggiunte/contribuite (aggiungendo il PluginOutlet in quei componenti)?
Il motivo per cui lo chiedo è che ho un ambito di lavoro che deve essere svolto, ma non posso farlo e devo fornire una spiegazione al team sul perché non posso farlo, quindi o l’ambito di lavoro verrà modificato per fare ciò che possiamo fare o dovrò contribuire con la speranza che venga aggiunto al core e rilasciato nella prossima release. Quindi ho bisogno di una conferma dal team di sviluppo di Discourse se questo è possibile o meno.
Le cose rotte vanno in Bug, le funzionalità mancanti in Feature (o nel caso di, ad esempio, plugin outlets Dev)
Usi il branch stabile? Allora c’è parecchio tempo prima della prossima release stabile, ma altrimenti non devi aspettare che i commit vengano aggiunti al branch più recente dopo che la PR è stata unita.
Utilizzo la configurazione Docker per Discourse e hai sollevato un buon suggerimento riguardo al branch, sì, potrei essere in grado di cambiarlo mentre la PR viene unita e non aspettare fino al rilascio effettivo.
Guardando app.yml vedo che utilizza la versione (branch) tests-passed, che guardando GIT presumo non sia la migliore da usare per la stabilità. Quale è preferibile usare main o passare a latest tag? È possibile passare a un tag per la configurazione Docker?
@david, @Falco Ho creato una PR, per favore revisionatela e fatemi sapere se manca qualcosa. Ho bisogno che venga progredita al più presto, quindi se foste in grado di darle priorità in qualche modo, ve ne sarei molto grato.