Ciao, ho alcuni post importati da un altro software per forum con interruzioni di riga nei titoli. Questi vengono visualizzati correttamente nell’anteprima del post, ma non vengono renderizzati come titoli nel post finale. Sto riscontrando questo problema sul mio forum aggiornato ieri e anche qui su Discourse Meta:
Test del titolo con interruzioni di riga
Paragrafo normale.
Titolo senza interruzioni di riga
Lascia vuoto <h2> e racchiude il testo successivo in <p>:
<h2 dir="ltr">
</h2><p dir="ltr">Test del titolo con interruzioni di riga</p>
Sono sicuro al 99% che si tratti di una recente regressione, poiché ho controllato specificamente i titoli nei post importati dallo stesso utente durante il processo di migrazione, e sia l’utente che io ricordiamo che venivano renderizzati correttamente.
2 Mi Piace
sam
(Sam Saffron)
11 Aprile 2023, 1:16am
3
Hmm, considerando le cose ltr lì @Osama , potrebbe essere correlato al CSS flipper che abbiamo aggiunto di recente?
2 Mi Piace
Osama
12 Aprile 2023, 1:56am
4
Non credo, perché l’HTML finale/cotto del post è errato e il CSS flipper (sia quello vecchio che quello nuovo) non è assolutamente coinvolto nel processo di cottura del post.
^ il testo all’interno del <p> dovrebbe essere all’interno dell’<h2> e non dovrebbe esserci affatto <p> (penso).
6 Mi Piace
selase
(Selase Krakani)
8 Maggio 2023, 6:15pm
5
Sembra che ciò accada durante la compilazione, in particolare durante l’analisi markdown.
sanitized = markdown(working_text, options)
doc = Nokogiri::HTML5.fragment(sanitized)
add_nofollow = !options[:omit_nofollow] && SiteSetting.add_rel_nofollow_to_user_content
add_rel_attributes_to_user_content(doc, add_nofollow)
strip_hidden_unicode_bidirectional_characters(doc)
sanitize_hotlinked_media(doc)
add_mentions(doc, user_id: opts[:user_id]) if SiteSetting.enable_mentions
scrubber = Loofah::Scrubber.new { |node| node.remove if node.name == "script" }
loofah_fragment = Loofah.fragment(doc.to_html)
loofah_fragment.scrub!(scrubber).to_html
Passare un’intestazione con interruzioni di riga a PrettyText.markdown restituisce il contenuto dell’intestazione racchiuso in un tag p.
E poi, durante la pulizia, il paragrafo viene estratto dal tag dell’intestazione, risultando in quanto segue:
Suppongo che ciò accada poiché un paragrafo in un tag di intestazione non è conforme alle specifiche?
Sto ancora esaminando il codice del parser markdown per capire perché il contenuto viene racchiuso nel tag p in primo luogo.
2 Mi Piace
sam
(Sam Saffron)
9 Maggio 2023, 12:02am
7
Oh questo è molto correlato a:
Took a quick look out of curiosity. It looks like an issue with the Nokogiri library.
[image]
From what uses Discourse here:
Loofah.fragment uses Nokogiri’s HTML4 parser.
This could be fixed using Loofah.html5_fragment as long as Nokogiri >= 1.14.0 and Loofah >= 2.21.0. Discourse already uses Nokogiri::HTML5.fragment; that would make sense.
Note: Loofah 2.21.0 is not yet released; currently in RC1.
Va bene se aspetto qualche altra settimana che esca Loofah
Manderò un Tweet a Mike per menzionare che è saltato fuori questo problema.
2 Mi Piace
Ciao, grazie per aver esaminato la questione. L’HTML non si preoccupa delle interruzioni di riga, quindi tecnicamente questo è corretto:
<h2>
Heading test with line breaks
</h2>
Sembra semplicemente essere un problema dell’analizzatore Markdown che viene eseguito dopo/all’interno dell’analizzatore HTML, che genera tag <p> per i ritorni a capo.
1 Mi Piace
nat
(Natalie T)
20 Giugno 2023, 12:40pm
11
Ciao, abbiamo risolto questo problema con
main ← loofah
opened 02:35AM - 12 May 23 UTC
https://meta.discourse.org/t/markdown-preview-and-result-differ/263878
The re… sult of this markdown had different results in the composer preview and the post. This is solved by updating Loofah to the latest version and using html5 fragments like our user had reported. While the change was only needed in [cooked_post_processor.rb](https://github.com/discourse/discourse/pull/21500/files#diff-67de7f44aa04f02ceba9770e5d83b4465add3bd4297be871f94a2233cd4831a7), I've updated the other areas of our codebase to also use the html5 fragment.
> <strike>
>
> Additionally, how come
>
> ```qml
> import QtQuick
> import QtQuick.Controls 2.15 as QQC2
> import QtQuick.Layouts
> import QtPositioning
> ```
>
> and prepension of `QQC2` before `Action`, `Button`, `ApplicationWindow`, and `Frame` doesn't work, whereas
>
> ```qml
> import QtQuick
> import QtQuick.Controls
> import QtQuick.Layouts
> import QtPositioning
> import QtQuick.Controls 2.15 as QQC2
> ```
>
> and addition of `QQC2.Button` (per https://discuss.kde.org/t/qml-pyqt6-cant-get-native-control-appearance/1240/2?u=rokejulianlockhart) does?
>
> </strike>
<img width="643" alt="Screenshot 2023-05-11 at 3 15 36 PM" src="https://github.com/discourse/discourse/assets/1555215/e7087502-b0a1-4219-be0b-ad3904cc6a6f">
Related:
- ~~https://github.com/discourse/discourse/pull/21500~~
- https://github.com/discourse/discourse-footnote/pull/62
- https://github.com/discourse/discourse-bbcode/pull/50
come si vede qui:
Test di intestazione con interruzioni di riga
Paragrafo normale.
Intestazione senza interruzioni di riga
8 Mi Piace
Felice di sentirlo, grazie @nat ! Richiede la rielaborazione dei post?
2 Mi Piace
nat
(Natalie T)
20 Giugno 2023, 1:21pm
13
Sì, richiede una nuova cottura — non possiamo eseguirla automaticamente per te con questa correzione poiché è un’operazione costosa.
3 Mi Piace
nat
(Natalie T)
Chiuso
22 Giugno 2023, 12:40pm
14
Questo argomento è stato chiuso automaticamente dopo 2 giorni. Non sono più consentite nuove risposte.