Teile von zwei Absätzen zu spoilern funktioniert nicht richtig

Im Markdown-Modus geben Sie Folgendes ein:

A B

C D

Wählen Sie B und C, aber nicht A und D, dann „Spoiler verwischen“.
Das Ergebnis sieht dann so aus:

A [spoiler]
B

C
[/spoiler] D

Und das Ergebnis wird nicht als Spoiler verwischt.

A [spoiler]
B

C
[/spoiler] D

Versuchen Sie es nun erneut im Rich-Text-Modus. Beginnen Sie mit Folgendem:

A B

C D

Wählen Sie B und C und verwischen Sie den Spoiler.
Der Absatzumbruch wird gelöscht und das Ergebnis sieht dann so aus:

A BC D

Wenn Sie zurück in den Markdown-Modus wechseln, sieht das Ergebnis so aus:

A [spoiler]BC[/spoiler] D
1 „Gefällt mir“

Welches Ergebnis würden Sie in diesem Fall erwarten, da der Spoiler weder Inline noch Block sein kann?

Ich denke, die Idee, dass ein Spoiler nicht sowohl Inline als auch Block sein kann, ist eine Tatsache von CSS, über die der Benutzer nicht informiert werden muss.

Hintergrund: Wie geht HTML damit um?

Betrachten Sie das Fettdrucken. Sie können dies heute in Discourse bbcode schreiben:

A [b]B

C[/b] D

Oder Sie können dies in HTML schreiben:

<!DOCTYPE html>
<html>
<body>
<p>A <strong>B</p>

<p>C</strong> D</p>
</body>
</html>

Es wird genau so gerendert, wie Sie es erwarten würden:

A B

C D

Aber die DOM-Darstellung sieht so aus:

<p>A <strong>B</strong></p>
<strong> </strong>
<p><strong>C</strong> D</p>

Die HTML-Spezifikation sieht etwas Ähnliches für mehrblockige Hyperlinks vor. Wenn Sie dies in HTML schreiben:

<!DOCTYPE html>
<html>
<body>
<p>A <a href="https://example.com.">B</p>

<p>C</a> D</p>
</body>
</html>

Die HTML-Spezifikation sieht vor, dass die DOM-Darstellung wie folgt aussieht, mit drei Hyperlinks:

<body>
<p>A <a href="https://example.com.">B</a>
</p><a href="https://example.com."> </a>
<p><a href="https://example.com.">C</a> D</p>
</body>

Mein Vorschlag: Verknüpfte Spoiler

Man könnte sich vorstellen, mehrabsätzige Inline-Spoiler auf ähnliche Weise zu rendern:

<p>A <spoiler>B</spoiler></p>

<p><spoiler>C</spoiler> D</p>

Aber Spoiler unterscheiden sich von Fettdruck, da Spoiler interaktiv sind. Wenn Sie auf den B-Teil des Spoilers klicken, soll sowohl der B- als auch der C-Teil des Spoilers aufgedeckt werden; es soll sich wie „ein Spoiler“ anfühlen und aussehen.

Ich denke, der Weg, dies zu handhaben, ist die Unterstützung von verknüpften Spoilern in der DOM-Darstellung. Vielleicht hätte <spoiler> ein Attribut wie name, und wenn Sie auf einen Spoiler klicken, würden alle Spoiler mit demselben Namen aufgedeckt. (Sollte dies mit Attributen, Eigenschaften oder einem anderen System zur Verknüpfung der drei Spoiler erfolgen? Ich weiß es nicht, machen Sie es, wie Sie wollen.)

Angenommen, Sie haben Markdown wie diesen:

A B

C

D E

[spoiler]F[/spoiler]

Und Sie wählen B, C und D aus und blenden sie aus.
Der Markdown würde dann so aussehen:

A [spoiler]B

C

D[/spoiler] E

[spoiler]F[/spoiler]

Und die generierte DOM würde so aussehen:

<p>A <inline-spoiler name="x">B</inline-spoiler></p>

<block-spoiler name="x"><p>C</p></block-spoiler>

<p><inline-spoiler name="x">D</inline-spoiler> E</p>

<block-spoiler name="y"><p>F</p></block-spoiler>

In JS würden beim Klicken auf einen der drei Spoiler alle Spoiler mit demselben „name“-Attribut zusammen aufgedeckt.

Aus der Perspektive des Endbenutzers würde es sich also so anfühlen, als ob man Inline- und Block-Spoiler mischen und anpassen könnte.

Ich habe dies von Bug nach Feature verschoben, da das, was wir hier untersuchen, derzeit eine nicht unterstützte Funktionalität ist.

@dfabulich Könnten Sie den Anwendungsfall mitteilen, den Sie unterstützen möchten? Das wird uns helfen zu verstehen, wie wir eine Lösung am besten angehen können. Können Sie uns erzählen, wie die Unterstützung dieser Form von Inline- + Block-Spoilern in Ihrer Community nützlich wäre oder wann diese auftreten?

Ich halte es für den falschen Ansatz, dies als „Funktion“ zu kategorisieren.

Ich könnte sagen: „Dieser Fehler ist zu schwer zu beheben; es macht keinen Sinn, ihn gegenüber anderer Arbeit zu priorisieren.“

Aber ich glaube nicht, dass irgendjemand das aktuelle Verhalten als korrekt verteidigen würde.

Was Ihre Frage betrifft, ist es nicht wirklich möglich, einen „Anwendungsfall“ für eine Fehlerbehebung zu geben. Funktionen haben Anwendungsfälle (Spoiler ausblenden: Benutzer möchten Spoiler ausblenden, damit sie Medien diskutieren können, ohne die Überraschung zu verderben), aber Fehler liegen innerhalb von Funktionen. Die Behebung von Fehlern ist die Art und Weise, wie eine Funktion ihren Anwendungsfall erfüllt.

Warum ist dieser Fehler wichtig? Weil wir Spoiler oft verwenden!

Wenn ich dieses Problem als „Fehler“ behandle und anerkenne, dass die Implementierung meines vorgeschlagenen Lösungsansatzes kostspielig sein könnte, kann ich Ihre Frage nach dem „Anwendungsfall“ am besten beantworten, indem ich eine andere Frage beantworte:

„Warum ist dieser Fehler wichtig? Angesichts der Tatsache, dass das aktuelle Verhalten falsch ist, wen kümmert es, dass Sie keinen Inline-Text über mehrere Absätze hinweg ausblenden können? Müssen Sie das wirklich tun?“

Und darauf würde ich antworten: Das aktuelle Erlebnis ist einfach verwirrend und untergräbt das Vertrauen des Benutzers in Discourse. Wenn Sie Text auswählen, auf „Spoiler ausblenden“ klicken und der Text, den Sie ausgewählt haben, einfach nicht ausgeblendet wird, ist das für alle Beteiligten peinlich.

Ehrlich gesagt wäre es eine geringfügige Verbesserung gegenüber dem aktuellen Verhalten, eine Fehlermeldung anzuzeigen, wenn ein Benutzer versucht, Teile von zwei Absätzen zu spoilern, und den Benutzer über die Art des Problems aufzuklären. Die Fehlermeldung könnte lauten: „In Discourse können Sie einen Teil eines Absatzes spoilern, oder Sie können einen oder mehrere ganze Absätze spoilern, aber Sie können keinen Spoiler erstellen, der Teile von zwei oder mehr Absätzen enthält.“

Aber stellen Sie sich jetzt vor, Sie müssten eine solche Fehlermeldung für fetten Text anzeigen? Oder kursiv?

Und das bringt uns zu der Frage, warum Spoiler für mich wichtig sind: Das Forum, das ich betreibe (und andere Discourse-Foren, an denen ich teilnehme), sind Gamer-Foren, in denen das Sprechen über Medien, und insbesondere das Nicht-Verderben von Lösungen für Rätsel, eine wirklich große Sache ist.

Ich kann verstehen, warum jemand sagen würde: „Das Ausblenden von Spoilern ist nicht so wichtig wie fette Schrift. Wir werden den Fehler für fette Schrift beheben, indem wir mehrere fette Abschnitte erstellen, aber für das Ausblenden von Spoilern haben wir einfach größere Probleme; lassen wir den Spoiler-Fehler ungelöst. Wir kümmern uns einfach nicht so sehr um Spoiler. Benutzer werden eine Problemumgehung finden.“

Aber für mich und mein Forum und die Foren, in denen ich lebe, ist das Ausblenden von Spoilern geringfügig wichtiger als fette Schrift. Deshalb dränge ich auf diese Spoiler-Ausblendungsfehler!

Was ist der „Anwendungsfall“? Der Anwendungsfall ist: Wir verwenden Spoiler, um über Medien zu sprechen, ohne die Überraschung zu verderben. Und daher sollte die Spoiler-Ausblendungsfunktion funktionieren und korrekt funktionieren, um diesen Bedarf zu decken.

1 „Gefällt mir“

Was meine Seite betrifft, denke ich, dass hier ein Bug und ein Feature vorliegen. Wir können uns über Semantik streiten, aber ich möchte erklären, wie wir das betrachten, damit Sie verstehen, was als Nächstes geschieht, da Spoiler für Sie und Ihre Community sehr wichtig sind.

Der Bug besteht darin, dass beim Versuch, einen Spoiler inline und über Blöcke hinweg anzuwenden, die Absatzumbrüche entfernt werden (im Rich-Text-Modus) und hinzugefügt werden (im Markdown-Modus):

Rich Text:

Markdown:

Ich stimme zu, dass dies keine angenehme Erfahrung ist. Wir können diesen Bug beheben, aber das Ergebnis wird entweder sein:

  • Zwei separate Spoiler, einer auf jeder Zeile, die separat angeklickt werden müssen, um sie anzuzeigen.
  • Ein einzelner Spoiler, aber der ausgewählte Inhalt wird in einen eigenen Block gezwungen.

Die Feature-Anfrage besteht darin, einen einzelnen Spoiler zu unterstützen, der inline beginnt und sich über mehrere Blöcke erstreckt und dann mit einem einzigen Klick angezeigt werden kann. So sind Spoiler nicht konzipiert.

Der Grund, warum ich nach Ihrem Anwendungsfall gefragt habe, ist, sowohl bei der Behebung des Bugs zu helfen als auch die Bedeutung des Features zu verstehen. Wir sehen Spoiler normalerweise entweder inline oder als Blöcke, daher frage ich mich, ob es bestimmte Situationen gibt, in denen der Inline-Plus-Block-Spoiler zum Einsatz kommt. Das hilft uns, besser zu verstehen, wie Sie Discourse nutzen, und wie eine Lösung Ihnen (und anderen, die die Bedürfnisse ihrer eigenen Community in dem, was Sie hier teilen, wiedererkennen) helfen könnte.

1 „Gefällt mir“

Angenommen, diese beiden Optionen, ich würde „Ein einzelner Spoiler, aber der ausgewählte Inhalt wird in einen eigenen Block gezwungen.“ wählen.

Ich kann dafür keinen anwendungsfallbasierten Grund angeben; Ich denke, das erzwungene Blockverhalten wäre immer noch fehlerhaft.

Aber die Option mit dem erzwungenen Block fühlt sich für mich „weniger fehlerhaft“ an, da sie nur beeinflusst, wie der Spoiler aussieht: Sie fügt am Anfang und Ende des Spoilers einen zusätzlichen Zeilenumbruch hinzu.

Mehrere nicht verknüpfte Spoiler beeinflussen, wie der Spoiler funktioniert. Die Leser müssten bis zu dreimal klicken, um den gesamten Spoiler aufzudecken: einmal für den führenden Inline-Spoiler, dann wieder für N Block-Spoiler und dann wieder für den nachfolgenden Inline-Spoiler.

Bei erzwungenen Block-Spoilern wird dies zu einem kosmetischen Hard Bug, etwas, an dem vielleicht nie jemand arbeiten wird.

2 „Gefällt mir“

Diese Darstellung ergibt für mich Sinn:

Wir werden daran arbeiten, das zu beheben; ich habe noch keine ETA für Sie, aber ich werde Sie hier informieren, sobald wir dies behoben haben.

1 „Gefällt mir“