Wenn ich HTML in ein Thema einfüge, um ein Thema zu erstellen, formatiert Discourse das HTML automatisch neu (es „verarbeitet
Klar, es gibt eine Route, um den rohen Beitragsinhalt einzusehen. Nimm deinen Beitrag als Beispiel. Die URL lautet
https://meta.discourse.org/t/get-back-the-real-raw-data-that-created-a-post/189183
Um den rohen Inhalt einzusehen, ersetze /t/slug durch /raw.
https://meta.discourse.org/raw/189183
Danke, aber das scheint bei mir nicht zu funktionieren. Ich möchte Daten erhalten, die das exakte HTML beibehalten, wie es ursprünglich eingefügt wurde – wenn das ursprüngliche HTML also beispielsweise ein div-Tag enthielt, soll das zurückgegebene Datenobjekt dieses div-Tag ebenfalls enthalten.
Was ich beispielsweise in der „raw“-Antwort gefunden habe, enthält Markdown-Formatierung, obwohl die Originaldaten keine enthielten.
Ich werde versuchen, jetzt ein Beispiel zusammenzustellen, um zu verdeutlichen, was ich meine.
Ok. Hier ist mein Versuch für ein Beispiel:
Ich habe ein paar Zeilen mit unterschiedlicher Formatierung in einem Textverarbeitungsprogramm geschrieben, und das erzeugte HTML sah so aus:
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> </o:p></p>
<p class=MsoNormal><b>This text is bold</b>.<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><i>This text is italicized</i>.<o:p></o:p></p>
<p class=MsoNormal><o:p> </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> </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>
Verarbeiteter Discourse-Beitrag:
Wenn ich dieses HTML in einen Discourse-Beitrag einfüge, sieht es so aus (nachdem es den „Cook“-Prozess durchlaufen hat):
Hier ist ein Text. Schriftart = Calibri, Größe 12pt
Dieser Text ist fett.
Dieser Text ist kursiv.
Dieser Text hat eine größere Schrift = Calibri, Größe 18.
Und hier ist noch etwas zufälliger Text, der zentriert ist = Garamond, Größe 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.
Was ich zurückbekommen möchte
Es ist in Ordnung, dass Discourse den Beitrag verarbeitet und so anzeigt, wie es das tut. Aber was ich jetzt möchte, ist die Möglichkeit, einen Beitrag später zu nehmen und das ursprüngliche, zugrunde liegende HTML zurückzubekommen. Die Daten, die ich zurückbekomme, sollten also so aussehen:
<body lang=EN-US style='tab-interval:.5in;word-wrap:break-word'>
<!--StartFragment-->
<p class=MsoNormal>Hier ist etwas Text. Schriftfamilie = Calibri, Größe 12pt<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><b>Dieser Text ist fett</b>.<o:p></o:p></p>
(etc.)
Wenn ich jetzt das „raw“-Endpunkt wie von Ihnen bereitgestellt verwende, liefert es dieses HTML nicht. Stattdessen liefert es nur den Text mit, es scheint, den meisten Formatierungen und Abständen entfernt.
Ist es möglich, das ursprüngliche, zugrunde liegende HTML zurückzubekommen?
Ich verstehe also immer noch nicht, oder ich habe einen Schritt übersehen. Ich habe gerade einen Beitrag auf try.discourse.org erstellt: https://try.discourse.org/t/testing-html-cooking/1405. Der Rohinhalt ist https://try.discourse.org/raw/1405. Der Rohinhalt sieht definitiv so aus, wie Sie sagten, dass er aussehen sollte.
Könnten Sie mir Schritt für Schritt erklären, wie ich das reproduzieren kann? Ich habe das oben von Ihnen geteilte „Original-HTML
Du hast recht. Der Rohlink sieht tatsächlich so aus, wie ich es meinte. Ich bin mir nicht sicher, warum das vorher nicht funktioniert hat. Ich werde ein paar Dinge testen und mich dann melden.
Ich denke, das Problem besteht darin, dass der HTML-Code, den Sie möchten, beim Einfügen in den Browser bereits umgewandelt wird, sodass dieser Inhalt niemals bei raw ankommt.
Inhalte aus Ihrem Fragment, die im Raw-Modus sichtbar sind
Siehe https://meta.discourse.org/raw/189183/7
Hier ist ein Text. Schriftart = Calibri, Größe 12pt
Dieser Text ist fett.
Wenn Sie den Inhalt jedoch aus Word kopieren und dann einfügen, wird der gesamte HTML-Code auf der Frontend-Seite in Markdown umgewandelt.
Danke an alle. Ja, @pfaffman, das ist zumindest teilweise der Grund für meine Verwirrung hier.
Nehmen wir an, das Ziel ist es, aus Word zu kopieren und dann in ein Discourse-Thema einzufügen; und später die „rohen
Nein. Du kannst im Editor nachschauen und den rohen Text sehen, der erstellt wird, wenn du aus Word einfügst. Das ist alles, denn die Magie, die das Einfügen aus der Zwischenablage in Markdown verwandelt, findet im Browser statt – zwischen dem Einfügen und dem Anzeigen im Editorfenster.
Hier liegt ein entscheidendes Missverständnis vor: Der Rohinhalt ist Markdown, kein HTML.
Wir verfügen über magische
Funktionen, die beim Einfügen in den Composer HTML in Markdown umwandeln.
Und was es noch verwirrender macht, ist, dass das Markdown HTML enthalten kann. ![]()
Diese Umwandlung findet jedoch (im Editor) nicht statt, wenn du tatsächlichen HTML-Code einfügst. Das ist es, was ich früher übersehen habe.
Oder vielleicht, wie @pfaffman sagte, findet die Umwandlung tatsächlich immer statt, aber Markdown kann HTML behalten, wenn es als roher Code eingefügt wird, nicht jedoch, wenn die Ausgabe des Codes eingefügt wird.
Richtig, damit es funktioniert, muss die Zwischenablage einen Inhaltstyp von text/html haben.
Können auch andere Formate wie RTF (Rich Text Format) im Markdown wie HTML erhalten bleiben?
HTML wird im Markdown nicht per se erhalten, sondern es werden lediglich einige wichtige Tags unterstützt (z. B. <em> Hervorhebung), da wir das Postel-Gesetz befolgen, wo dies keine Probleme verursacht.
Welches Problem versuchst du zu lösen?
Das Ziel ist es, zu verstehen, wie der Prozess funktioniert (relevant für einige Projekte). Dieses Gespräch hat bereits dabei geholfen. Ich frage mich immer noch, ob Sie beim Kopieren aus Microsoft Word Zugriff auf den ursprünglich formatierten Text haben.
Nein. Du müsstest dich in den JavaScript-Code einarbeiten, der dies beim Einfügen verarbeitet.
Dies liegt an der Behandlung von „HTML zu Markdown
Das ist sehr hilfreich. Nur zur Klärung: Warum sollte die Bearbeitung durch den Editor Notepad einen Unterschied machen?
Dadurch würden alle Word-Formatierungen entfernt und nur reiner Text übrig bleiben.
Dies liegt daran, dass eine Anwendung beim „Kopieren