Hola, tengo algunas publicaciones importadas de otro software de foros con saltos de línea en los encabezados. Estos se muestran correctamente en la vista previa de la publicación, pero no se renderizan como encabezados en la publicación final. Estoy viendo este problema en mi foro actualizado ayer y también aquí en Discourse Meta:
Prueba de encabezado con saltos de línea
Párrafo normal.
Encabezado sin saltos de línea
Deja el <h2> en blanco y envuelve el texto posterior en <p>:
<h2 dir="ltr">
</h2><p dir="ltr">Prueba de encabezado con saltos de línea</p>
Estoy 99% seguro de que se trata de una regresión reciente, ya que verifiqué específicamente los encabezados en las publicaciones importadas del mismo usuario durante el proceso de migración, y el usuario y yo recordamos que se renderizaban correctamente.
2 Me gusta
sam
(Sam Saffron)
11 Abril, 2023 01:16
3
Hmm, dado el material LTR allí, @Osama , ¿podría estar relacionado con el volteador de CSS que agregamos recientemente?
2 Me gusta
Osama
12 Abril, 2023 01:56
4
No lo creo porque el HTML final/cocinado de la publicación es incorrecto y el volteador de CSS (ya sea el antiguo o el nuevo) no está involucrado en el proceso de cocción de la publicación.
^ el texto dentro del <p> debería estar dentro del <h2> y no debería haber ningún <p> en absoluto (creo).
6 Me gusta
selase
(Selase Krakani)
8 Mayo, 2023 18:15
5
Esto parece ocurrir durante la cocción, específicamente el análisis de 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
Pasar una cabecera con saltos de línea a PrettyText.markdown devuelve el contenido de la cabecera envuelto en una etiqueta p.
Y luego, durante la limpieza, el párrafo se extrae de la etiqueta de cabecera, lo que da como resultado lo siguiente:
Supongo que esto sucede ya que un párrafo en una etiqueta de cabecera no cumple con las especificaciones.
Todavía estoy revisando el código del analizador de markdown para averiguar por qué el contenido se envuelve en una etiqueta p en primer lugar.
2 Me gusta
sam
(Sam Saffron)
9 Mayo, 2023 00:02
7
Esto está muy relacionado con:
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.
No me importa esperar unas semanas más a que salga Loofah.
Enviaré un Tweet a Mike para mencionarle que esto ha surgido.
2 Me gusta
Hola, gracias por investigar esto. A HTML no le importan los saltos de línea, así que técnicamente esto es correcto:
<h2>
Encabezado de prueba con saltos de línea
</h2>
Simplemente parece ser un problema del analizador de Markdown que se ejecuta después/dentro del analizador de HTML, que está generando etiquetas <p> para los saltos de línea.
1 me gusta
nat
(Natalie T)
20 Junio, 2023 12:40
11
Hola, hemos solucionado esto 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
como se ve aquí:
Prueba de encabezado con saltos de línea
Párrafo normal.
##Encabezado sin saltos de línea##
8 Me gusta
Me alegra oírlo, ¡gracias @nat ! ¿Esto requiere volver a procesar las publicaciones?
2 Me gusta
nat
(Natalie T)
20 Junio, 2023 13:21
13
Sí, requiere un nuevo horneado; no podemos hacerlo automáticamente con esta corrección, ya que es una operación costosa.
3 Me gusta
nat
(Natalie T)
Cerrado
22 Junio, 2023 12:40
14
Este tema se cerró automáticamente después de 2 días. Ya no se permiten nuevas respuestas.