Die meisten WYSIWYG-Editoren sind Wrapper um HTMLs contenteditable- und execCommand-APIs. Diese APIs wurden von Microsoft entwickelt, um die Live-Bearbeitung von Webseiten in Internet Explorer 5.5 zu unterstützen, und wurden schließlich von anderen Browsern rückentwickelt und kopiert.
Da diese APIs nie vollständig spezifiziert oder dokumentiert wurden und WYSIWYG-HTML-Editoren einen enormen Umfang haben, hat jede Browserimplementierung ihre eigenen Fehler und Eigenheiten. JavaScript-Entwickler sind somit gezwungen, die Inkonsistenzen zu lösen.
Trix umgeht diese Inkonsistenzen, indem es contenteditable als Ein-/Ausgabegerät behandelt: Wenn Eingaben im Editor erfolgen, wandelt Trix diese in eine Bearbeitungsoperation auf seinem internen Dokumentmodell um und rendert dann dieses Dokument zurück in den Editor. Dies gibt Trix vollständige Kontrolle darüber, was nach jedem Tastenanschlag geschieht, und vermeidet die Notwendigkeit, execCommand überhaupt zu verwenden.
Installation
Führen Sie bin/rails action_text:install aus, um das Yarn-Paket hinzuzufügen und die erforderliche Migration zu kopieren. Außerdem müssen Sie Active Storage für eingebettete Bilder und andere Anhänge einrichten. Bitte lesen Sie den Leitfaden "Active Storage Overview" für weitere Informationen.
Action Text verwendet polymorphe Beziehungen mit der Tabelle action_text_rich_texts, sodass sie mit allen Modellen geteilt werden kann, die Rich-Text-Attribute haben. Wenn Ihre Modelle mit Action Text-Inhalten UUID-Werte für Bezeichner verwenden, müssen alle Modelle, die Action Text-Attribute verwenden, UUID-Werte für ihre eindeutigen Bezeichner verwenden. Die generierte Migration für Action Text muss ebenfalls aktualisiert werden, um type: :uuid für die :record references-Zeile anzugeben.
Nach Abschluss der Installation sollte eine Rails-Anwendung folgende Änderungen aufweisen:
Und schließlich zeigen Sie den bereinigten Rich-Text auf einer Seite an:
<%=@message.content %>
Um den Rich-Text-Inhalt zu akzeptieren, müssen Sie nur das referenzierte Attribut zulassen:
class MessagesController < ApplicationController
def create
message = Message.create! params.require(:message).permit(:title, :content)
redirect_to message
end
end
Rendern von Rich-Text-Inhalten
Standardmäßig wird Action Text Rich-Text-Inhalte innerhalb eines Elements mit der Klasse .trix-content rendern:
Elemente mit dieser Klasse, ebenso wie der Action Text Editor, werden durch das Trix-Stylesheet gestylt. Um eigene Styles bereitzustellen, entfernen Sie die Zeile = require trix aus der app/assets/stylesheets/actiontext.css-Datei, die vom Installationsprogramm erstellt wurde.
Um das HTML, das um Rich-Text-Inhalte gerendert wird, anzupassen, bearbeiten Sie das Layout app/views/layouts/action_text/contents/_content.html.erb, das vom Installationsprogramm erstellt wurde.
Um das HTML anzupassen, das für eingebettete Bilder und andere Anhänge (sogenannte Blobs) gerendert wird, bearbeiten Sie die Vorlage app/views/active_storage/blobs/_blob.html.erb, die vom Installationsprogramm erstellt wurde.
Rendering attachments
Zusätzlich zu Anhängen, die über Active Storage hochgeladen wurden, kann Action Text alles einbetten, was durch eine signierte GlobalID aufgelöst werden kann.
Action Text rendert eingebettete <action-text-attachment>-Elemente, indem es deren sgid-Attribut in eine Instanz auflöst. Sobald aufgelöst, wird diese Instanz an render weitergegeben. Das resultierende HTML wird als Nachfolger des <action-text-attachment>-Elements eingebettet.
Als Nächstes betrachten Sie einen Rich-Text-Inhalt, der ein <action-text-attachment>-Element einbettet, das auf die signierte GlobalID der Benutzerinstanz verweist:
Action Text verwendet die Zeichenkette "BAh7CEkiCG…", um die Benutzerinstanz aufzulösen. Als Nächstes betrachten Sie das Teilansichtsfragment users/_user der Anwendung:
Wenn Action Text die Benutzerinstanz nicht auflösen kann (zum Beispiel, wenn der Datensatz gelöscht wurde), wird automatisch eine Standardersatzteilansicht gerendert.
Rails stellt eine globale Teilansicht für fehlende Anhänge bereit. Diese Teilansicht ist in Ihrer Anwendung unter views/action_text/attachables/missing_attachable installiert und kann geändert werden, wenn Sie unterschiedliches HTML rendern möchten.
Um eine andere Teilansicht für fehlende Anhänge zu rendern, definieren Sie eine Klassenmethode to_missing_attachable_partial_path:
class User < ApplicationRecord
def self.to_missing_attachable_partial_path
"users/missing_attachable"
end
end
Um sich mit dem Rendern des <action-text-attachment>-Elements in Action Text zu integrieren, muss eine Klasse folgendes tun:
Das Modul ActionText::Attachable einbinden.
Die Methode #to_sgid(**options) implementieren (die durch das GlobalID::Identification-Concern verfügbar gemacht wird).
(Optional) Die Methode #to_attachable_partial_path deklarieren.
(Optional) Eine Klassenmethode #to_missing_attachable_partial_path für den Umgang mit fehlenden Datensätzen deklarieren.
Standardmäßig binden sich alle Abkömmlinge von ActiveRecord::Base das GlobalID::Identification-Concern ein und sind daher ActionText::Attachable kompatibel.
Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten
zu können und die Zugriffe auf unsere Website zu analysieren.
Sie akzeptieren unsere Cookies, wenn Sie fortfahren diese Webseite zu nutzen.
Datenschutzerklärung.