2017-01-23 3 views
2

Ich verwende quill.formatText(), um meinem Texteditor ein benutzerdefiniertes "Highlight" -Format hinzuzufügen. Ich streckte einen Klecks wie so:quill.formatText() lässt verschachtelte Formate nicht zu

let Inline = Quill.import('blots/inline'); 
class highlight extends Inline { 
    static create() { 
     return super.create(); 
    } 

    static formats() { 
     return true; 
    } 
} 
highlight.blotName = 'highlight'; 
highlight.className = 'highlight'; 
highlight.tagName = 'span'; 
Quill.register(highlight); 

ich dann quill.formatText(start, selectionLength, 'highlight', true); nennen, die in einem <span class="highlight"> Tag meiner Auswahl wickelt. So weit, ist es gut.

Das Problem ist, ich möchte jede Auswahl in einem eigenen span Tag gewickelt werden. Wenn ich den Text zweifach auswähle, bleibt nur der äußere span übrig.

Zum Beispiel mit dem Text test inside text. Wenn ich die ganze Reihe zusätzlich nur das Wort inside hervorzuheben, würde ich bekommen erwarten:

<span class="highlight">Test <span class="highlight">inside</span> text</span>

Während ich tatsächlich bekommen:

<span class="highlight">Test inside text</span>

Es scheint, wie dies eine ist Optimierung, die QuillJS hinter den Kulissen macht - kann ich es trotzdem ausschalten, so dass ich beide verschachtelten span s behalten kann?

+0

Auch für die Aufzeichnung, so dass zwei disjunkte Highlights Konserven beide der 'span' s ganz gut. Nur wenn sie sich schneiden oder verschachteln, entscheidet Quill sich zu optimieren. – Pete

Antwort

1

Anstatt das Format nur wahr oder falsch zu machen, versuchen Sie es mit einer Art ID, die den Anwendungsfall identifiziert. Sie können dann entweder ein Datenattribut zum Bereich hinzufügen, um die ID zu halten, oder eine eindeutige Klasse wie in Ihren Kommentaren erstellen.

Sie könnten diesen Pull-Request auf Pinole hilfreich in immer zu einer Lösung finden, die für Sie arbeitet (oder auch nur diesen Code verwenden, um direkt)

https://github.com/quilljs/quill/pull/1217

+0

Hi Rik, genau das suche ich. Der Code in dieser PR sieht ziemlich einfach aus, also sollte ich in der Lage sein, ihn für meine Bedürfnisse zu finalisieren. – Pete

1

Dies ist keine reine Optimierung - es ist notwendig für den Determinismus, den Quill garantiert. Wenn Sie Text "Test in Text" haben und sagen, dass es fett gedruckt ist, garantiert Quill die Ausgabe <strong>Test inside text</strong>, nicht <strong>Test inside </strong><strong>text</strong> oder <strong>Test <strong>inside</strong> text</strong> oder die unendliche Anzahl von legalen HTML-Optionen.

Quill ist so konzipiert, dass es eindeutig ist, so dass Sie entweder Mehrdeutigkeit aus Ihrem Design entfernen oder einen Editor verwenden können, der dies ermöglicht.

+0

Hallo Jason, danke für die Antwort. Ich verstehe, warum der Mechanismus vorhanden ist, um ungültiges HTML zu verhindern, aber das Beispiel der obigen 'span's ist vollkommen gültig und unzweideutig. Das Hinzufügen von benutzerdefinierten 'span' -Tags war der Punkt, an dem ein benutzerdefinierter Blot verwendet wurde. Wenn beispielsweise Text in zwei" Highlight "-Klassen enthalten ist, sollte er dunkler angezeigt werden, unabhängig klickbar sein usw. Falls nicht ein Weg, diesen Determinismus sozusagen "auszuschalten", gibt es einen anderen Weg, dies zu erreichen? Ich füge diese Highlights nur im 'readOnly'-Modus ein. – Pete

+0

Nein, das Beispiel, das ich gepostet habe, ist absolut legales HTML. Aber es ist zweideutig, wie es Ihr Beispiel ist, welches das Problem ist. – jhchen

+0

Ich verstehe. Wäre es in diesem Fall empfehlenswert, den 'className' meines benutzerdefinierten" highlight "Blots zu ändern? Also könnte ich in 'quill.formatText()' zum Beispiel einen zusätzlichen Parameter wie folgt eingeben: 'quill.formatText (start, length, 'highlight', 2, true);' und dann Logik irgendwo im Blot um den Klassennamen "highlight-2" zu machen. Auf diese Weise könnte ich "highlight-1", "highlight-2", etc. machen, die nicht stören und zusammengeführt werden.Ich weiß, dass das nicht die eigentliche Syntax von 'formatText' ist, aber ich habe kein solides Verständnis von Blots, um zu wissen, ob so etwas möglich ist. – Pete

Verwandte Themen