Sì, se andassi completamente in quella direzione, dovresti rinunciare alla possibilità di modificare i contenuti in Discourse per garantire l’integrità completa dell’HTML.
Stavo pensando che potrebbe esserci una via di mezzo in cui applichi questo approccio solo ai tag img nei post HTML importati.
Ma ora sto rimettendomi in discussione. Fare questo in modo selettivo richiederebbe modifiche in molte parti dell’elaborazione dei post.
Sì, penso che questa sia probabilmente l’opzione migliore. Avevo iniziato a lavorarci a giugno 2020, ma si è rivelato un lavoro molto impegnativo e ho dovuto passare ad altri progetti. Avevo due approcci per permettere URL upload:// nei tag <img… nessuno dei due è perfetto. Dai miei appunti:
Implementazione 1:
Nel flusso di elaborazione del markdown, analizzare il contenuto di ogni html_block (abusando leggermente della libreria xss.js) ed elaborare tutti i tag immagine con attributi src che iniziano con upload://.
Vantaggi: tutto avviene nel flusso del markdown, l’elaborazione viene eseguita solo sui token html_block
Svantaggi: un po’ un uso improprio del sanificatore xss.js. Potrebbe non essere un parser HTML5 perfetto
Questa opzione potrebbe essere migliorata utilizzando un’implementazione DOM JavaScript conforme agli standard (ad esempio jsdom) sul server, ma sembra piuttosto pesante.
Implementazione 2:
Permettere attributi src con upload:// per tutto il flusso del markdown, per poi sostituirli in un secondo momento. Sul client, questo è in realtà piuttosto semplice: stavamo già sostituendo asincronamente gli URL upload:// dopo la cottura. Sul server, questo richiede un’ulteriore fase di elaborazione utilizzando Nokogiri.
Vantaggi: il parser è conforme agli standard HTML5
Svantaggi: implementazione diversa su client/server, rende il flusso leggermente più complesso
Penso che l’opzione 2 sia probabilmente la strada da seguire. Dovremo quindi aggiornare il job pull_hotlinked_images per mantenere i tag <img, senza sostituirli con il Markdown. Spero di riuscire a trovare il tempo per riprendere questo lavoro presto
Non capisco davvero la complicazione qui. È chiaro che il tag HTML per le immagini viene sostituito con il formato Markdown – ad esempio . Perché non aggiungere semplicemente due ritorni a capo prima del !? Questo permetterebbe al rendering di funzionare correttamente e farebbe sì che la funzione di caricamento delle immagini operi senza problemi, evitando immagini rotte e problemi di cross-site.
Esiste una situazione reale, non teorica, in cui quello spazio bianco potrebbe causare problemi? Quel problema è peggiore dello stato attuale del plugin, in cui “le immagini sono semplicemente rotte tutto il tempo”?
@david, hai notato che “la soluzione con il ritorno a capo probabilmente non avverrà” perché “la cosa fondamentale per noi è mantenere l’integrità del contenuto”. Ma il contenuto è già modificato inserendo i tag fin dall’inizio. Io… non capisco davvero come questo possa essere in qualche modo migliore.
Al momento, ogni volta che qualcuno include un’immagine nel proprio post di WordPress, le immagini risultano rotte e devo spesso gestire commenti del tipo “le immagini non funzionano”, seguiti spesso da risposte come “sì, è perché Discourse fa schifo”. Vorrei evitare entrambe queste cose.
Capisco che l’impostazione “non scaricare le immagini” possa essere una soluzione temporanea, ma in realtà voglio che le immagini vengano scaricate, quindi spero che questa possa essere solo una soluzione provvisoria.