Recuperare i dati "grezzi" originali che hanno creato un post?

Se incollo del codice HTML in un argomento per crearlo, Discourse riformatta automaticamente l’HTML (lo “cuoce”), mantenendo alcune (ma non tutte) le formattazioni sottostanti e rimuovendo i tag HTML dalla visualizzazione.

Esiste un modo per recuperare in seguito l’HTML originale che ho incollato nell’argomento al momento della creazione? La soluzione più vicina che riesco a trovare è effettuare una chiamata API con “raw=true” nell’endpoint e visualizzare la risposta in response.data.post_stream.posts[0].raw, come descritto qui.

Tuttavia, il testo “raw” restituito non è l’HTML originale. Non sono sicuro di cosa sia esattamente: sembra l’argomento “cotto” di base con tutti gli spazi rimossi.

Esiste un modo per recuperare quell’HTML originale che ho incollato?

3 Mi Piace

Certo, esiste un percorso per visualizzare il contenuto grezzo del post. Usa il tuo post come esempio. L’URL è

https://meta.discourse.org/t/get-back-the-real-raw-data-that-created-a-post/189183

Per visualizzare il contenuto grezzo, sostituisci /t/slug con /raw.

https://meta.discourse.org/raw/189183
7 Mi Piace

Grazie, ma sembra che non funzioni per me. Vorrei ricevere dati che mantengano l’HTML esatto come quando l’ho incollato inizialmente: quindi, se l’HTML originale aveva un tag div, ad esempio, voglio che i dati restituiti contengano quel tag div.

Quello che ho trovato nella risposta “raw”, per esempio, presenta una formattazione Markdown quando i dati originali non ne avevano.

Proverò a preparare un esempio ora per mostrare cosa intendo.

1 Mi Piace

Ok. Here’s my attempt at an example:

I wrote a few lines of different formatting in a word processor, and the html produced was:


Original HTML:

<style>
     ...
     /* Style Definitions */
     table.MsoNormalTable
    	{mso-style-name:"Table Normal";
    	mso-tstyle-rowband-size:0;
    	mso-tstyle-colband-size:0;
    	mso-style-noshow:yes;
    	mso-style-priority:99;
    	mso-style-parent:"";
    	mso-padding-alt:0in 5.4pt 0in 5.4pt;
    	mso-para-margin:0in;
    	mso-pagination:widow-orphan;
    	font-size:12.0pt;
    	font-family:"Calibri",sans-serif;
    	mso-ascii-font-family:Calibri;
    	mso-ascii-theme-font:minor-latin;
    	mso-hansi-font-family:Calibri;
    	mso-hansi-theme-font:minor-latin;
    	mso-bidi-font-family:"Times New Roman";
    	mso-bidi-theme-font:minor-bidi;}
    </style>
    <![endif]-->
    </head>

    <body lang=EN-US style='tab-interval:.5in;word-wrap:break-word'>
    <!--StartFragment-->

    <p class=MsoNormal>Here is some text. Font family = Calibri, size 12pt<o:p></o:p></p>

    <p class=MsoNormal><o:p>&nbsp;</o:p></p>

    <p class=MsoNormal><b>This text is bold</b>.<o:p></o:p></p>

    <p class=MsoNormal><o:p>&nbsp;</o:p></p>

    <p class=MsoNormal><i>This text is italicized</i>.<o:p></o:p></p>

    <p class=MsoNormal><o:p>&nbsp;</o:p></p>

    <p class=MsoNormal><span style='font-size:18.0pt'>This text is in a larger font
    = Calibri, size 18</span>.<o:p></o:p></p>

    <p class=MsoNormal><o:p>&nbsp;</o:p></p>

    <p class=MsoNormal align=center style='text-align:center'><span
    style='font-size:11.0pt;font-family:"Garamond",serif'>And here is some more random
    text that is centered = Garamond, size 11. Lorem ipsum dolor sit amet,
    consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
    dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
    laboris nisi ut aliquip ex ea commodo consequat.<o:p></o:p></span></p>

    <!--EndFragment-->
    </body>

    </html>

Cooked Discourse Post:

If I paste this html into a discourse post, it looks like this (after it goes through the “cook” process):

Here is some text. Font family = Calibri, size 12pt

 

This text is bold.

 

This text is italicized.

 

This text is in a larger font = Calibri, size 18.

 

And here is some more random text that is centered = Garamond, size 11. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.


What I’m Trying to Get Back

It’s fine for Discourse to cook the post and display it like it does. But what I want now is to be able to later take a post and get back the original, underlying HTML. So the data I get back should look like this:

<body lang=EN-US style='tab-interval:.5in;word-wrap:break-word'>
<!--StartFragment-->

<p class=MsoNormal>Here is some text. Font family = Calibri, size 12pt<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><b>This text is bold</b>.<o:p></o:p></p>

(etc.)

Right now if I plug in the “raw” endpoint like you provided, it does not provide this html. Rather, it just provides the text with, it seems, most formatting and spacing removed.

Is it possible to get the original, underlying html back?

Quindi non sto ancora seguendo, o mi sto perdendo un passaggio. Ho appena creato un post su try.discourse.org: https://try.discourse.org/t/testing-html-cooking/1405. Il contenuto grezzo è https://try.discourse.org/raw/1405. Il contenuto grezzo sembra davvero quello che hai detto che dovrebbe essere.

Puoi fornirmi istruzioni passo dopo passo su come riprodurre questo? Ho preso l’“HTML originale” che hai condiviso sopra, aggiunto un tag <html> e un tag <head> in alto in modo che fosse HTML valido, e ho creato un post con l’HTML nel corpo.

1 Mi Piace

Hai ragione. Il link grezzo sembra proprio quello che intendevo. Non sono sicuro del perché prima non funzionasse. Proverò alcune cose e ti risponderò.

1 Mi Piace

Penso che il problema sia che l’HTML che desideri viene convertito quando incollato nel browser, quindi quel contenuto non raggiunge mai raw.

Contenuto del tuo frammento visibile in raw

Vedi https://meta.discourse.org/raw/189183/7

Ecco un testo. Famiglia di caratteri = Calibri, dimensione 12pt

 

Questo testo è in grassetto.

Ma se copi il contenuto da Word e poi lo incolli, tutto l’HTML viene convertito in markdown sul lato client.

1 Mi Piace

Grazie a tutti. Sì, @pfaffman, questo è almeno in parte il motivo della mia confusione.

Immaginiamo che l’obiettivo sia copiare da Word, incollare in un argomento di Discourse e, in seguito, poter visualizzare i dati “grezzi” dell’argomento per recuperare la formattazione originale di Word.

È possibile?


AGGIORNAMENTO: Forse un esempio più chiaro (spero). Ecco un po’ di HTML:

<!DOCTYPE html>
<html>
<body>

<h1>Titolo</h1>

<p style="font-size: 35pt">Questo testo dovrebbe essere molto grande</p>

</body>
</html>

Se stampo l’output (ad esempio, nell’editor “prova” di W3Schools qui), ottengo due righe di testo, con le parole “Questo testo dovrebbe essere molto grande” visualizzate in dimensioni maggiori rispetto alla prima riga, in linea con lo stile “font-size: 35pt”.

Se copio quell’output (non il codice HTML, ma il risultato) e lo incollo nella maggior parte dei contesti, la formattazione viene mantenuta. Ad esempio, se lo incollo in Gmail la formattazione rimane, e se lo incollo in Microsoft Word la formattazione rimane: in entrambi i casi, la seconda riga è, correttamente, più grande della prima.

In Discourse, invece, la formattazione viene persa anche nella finestra dell’editor in modalità raw: viene rimossa tutta la formattazione, tranne l’aggiunta di un “#” markdown per l’h1.

Quindi, se copio il codice HTML effettivo e lo incollo nell’editor, il codice HTML viene effettivamente preservato e posso recuperarlo nella sua forma grezza. Ma se incollo il risultato del codice HTML, la formattazione viene persa, anche nella forma grezza.

Quando incollo l’output in Gmail o Word e questi mantengono la formattazione, devono conservare l’HTML. Discourse, invece, sembra rimuovere l’HTML quando incollo l’output HTML.

È possibile evitare che venga rimosso?

No. Puoi guardare nell’editor e vedere il testo grezzo che viene creato quando incolli da Word. È tutto quello che c’è, perché la magia dell’incolla-da-buffer-a-markdown avviene nel browser tra il momento in cui incolli e quello in cui lo vedi nella finestra dell’editor.

3 Mi Piace

Ecco il malinteso cruciale: il “raw” è Markdown, non HTML.

Abbiamo una magia :sparkles: che converte l’HTML in Markdown quando lo incollate nell’editor.

4 Mi Piace

E ciò che rende tutto più confuso è che il markdown può contenere HTML. :man_shrugging:

3 Mi Piace

Ma questa conversione non avviene (nel compositore) se incolli il codice HTML effettivo. Questo è quello che penso di aver perso in precedenza.

O forse, come ha detto @pfaffman, la conversione avviene effettivamente in ogni caso, ma il Markdown può mantenere l’HTML se incollato come codice puro, ma non se viene incollato l’output del codice.

Giusto, per funzionare deve avere un tipo di contenuto text/html negli appunti.

2 Mi Piace

Anche altri formati, come RTF (Rich Text Format), possono essere preservati nel Markdown come l’HTML?

L’HTML non viene preservato in senso stretto nel markdown; piuttosto, alcuni dei tag importanti sono supportati (ad esempio <em> emphasis), poiché cerchiamo di seguire la Legge di Postel laddove ciò non causi problemi.

Quale problema stai cercando di risolvere?

L’obiettivo è capire come funziona il processo (rilevante per alcuni progetti). Questa conversazione ha già contribuito a chiarirlo. Mi chiedo ancora se sia possibile accedere al testo con la formattazione originale quando si copia da Microsoft Word.

No. Dovresti esaminare il codice JavaScript che lo elabora durante l’incollaggio.

1 Mi Piace

Ciò è dovuto alla gestione “da HTML a Markdown”, che avviene all’incollamento.

Ecco il file sorgente rilevante. Noterai diversi elementi specifici di Microsoft Word (ad esempio MsoListParagraphCxSpFirst).

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/lib/to-markdown.js

Per assicurarti di ottenere il testo grezzo, passa prima il tuo contenuto incollato attraverso Blocco Note o uno strumento simile.

2 Mi Piace

Questo è molto utile. Solo per chiarire: perché passare attraverso Notepad farebbe la differenza?

Fare questo rimuoverà tutta la formattazione di Word e lascerà solo testo semplice.

Questo accade perché quando “copi” qualcosa, l’applicazione presenta effettivamente diverse visualizzazioni dei dati alle applicazioni in cui lo incollate. Discourse ha scelto la versione “ricca” con tutta la formattazione di Word, mentre Blocco note opterà per la versione “semplice”. Passandolo attraverso Blocco note, lasci solo la versione “semplice” che Discourse può vedere.