Das JavaScript-API bietet nun eine neue, prägnantere Möglichkeit, Editoren für die In-place-Bearbeitung zu definieren:
scrivito.define_editor("editor_name", { can_edit: function(element) { // 1. Prüfen: ist der Redakteur für die Bearbeitung des Elements geeignet? }, activate: function(element) { // 2. Den Redakteur aktivieren. } });
Um festzustellen, ob ein Editor in der Lage ist, ein bestimmtes Element zu bearbeiten, ruft das User-Interface can_edit
auf. Wenn der Aufruf einen wahren Wert zurück gibt, wird der Editor über activate
aktiviert.
Zusätzlich gibt es ein neues API, mit der Editoren für bestimmte Felder spezifziert werden können:
scrivito.select_editor(function(element, editor) { if ($(element).is(".my_field")) { editor.use("my_editor"); // Use "my_editor" if CSS class is "my_field". } if ($(element).is(".restricted_field")) { editor.disable(); // Disable editing if CSS class is "restricted_field". } });
Wenn der select_editor
-Aufruf den Editor auf use
setzt, überprüft das User-Interface, ob dieser Editor existiert. Ist dies der Fall, ruft es die can_edit
-Methode auf (siehe oben). Dadurch wird bestimmt, ob der Editor in der Lage ist, das Feld zu bearbeiten. In diesem Fall aktiviert das UI den Editor durch den Aufruf der activate
Methode.
Mit der disable
-Methode kann man die Bearbeitung eines Feldes komplett verhindern. Dies geschieht unabhängig von allen nachfolgenden Aufrufen von use
.
Eine detaillierte Dokumentation zu diesem Thema finden Sie im Artikel Using and Defining Editors auf scrivito.com.
Der scrivito_tag
-Helper rendert jetzt Attribute, für die vorher dedizierte Helper benötigt wurden. Aus diesem Grund wurden diese dedizierten Helper entfernt, nämlich scrivito_edit_enum
, scrivito_edit_multienum
, scrivito_edit_reference
, scrivito_edit_referencelist
, scrivito_edit_link
, und scrivito_edit_linklist
. Wenn Sie auf diese SDK-Version upgraden, sollten Aufrufe dieser Helper durch Aufrufe des scrivito_tag
-Helpers ersetzt werden.
# Anstelle von <%= scrivito_edit_enum @obj, :my_enum %> <%= scrivito_edit_multienum @obj, :my_multienum %> <%= scrivito_edit_reference @obj, :my_reference %> <%= scrivito_edit_referencelist @obj, :my_referencelist %> <%= scrivito_edit_link @obj, :my_link %> <%= scrivito_edit_linklist @obj, :my_linklist %> # können Sie jetzt schreiben: <%= scrivito_tag :div, @obj, :my_enum %> <%= scrivito_tag :div, @obj, :my_multienum %> <%= scrivito_tag :div, @obj, :my_reference %> <%= scrivito_tag :div, @obj, :my_referencelist %> <%= scrivito_tag :div, @obj, :my_link %> <%= scrivito_tag :div, @obj, :my_linklist %>
Die Helper wurden entfernt, da die entsprechenden Editoren nicht mehr über sie angesprochen werden müssen. Stattdessen werden die Editoren nun voreingestellt für die betreffenden Attributtypen aktiviert.
Diese Helper wurden bisher auch zum Rendern der Attributtypen in der Vorschau benötigt.
scrivito_tag
bietet diese Funktionalität derzeit noch nicht und erzeugt auch kein Markup wie die abgeschafften Helper es erstellt haben. In den meisten Applikationen wurden diese Helper jedoch nicht in den Views der Vorschau genutzt. Müssen die Helper in bestimmten Anwendungen weiterhin genutzt werden, können sie einfach in der App definiert werden:
def scrivito_edit_enum(obj_or_widget, attribute_name, options = {}) scrivito_tag(:div, obj_or_widget, attribute_name, options) end
def scrivito_edit_multienum(obj_or_widget, attribute_name, options = {}) scrivito_tag(:div, obj_or_widget, attribute_name, options) do obj_or_widget[attribute_name].join(", ") end end
def scrivito_edit_reference(obj_or_widget, attribute_name, options = {}) scrivito_tag(:div, obj_or_widget, attribute_name, options) do obj_or_widget[attribute_name].try(:description_for_editor) end end
def scrivito_edit_referencelist(obj_or_widget, attribute_name, options = {}) referencelist = obj_or_widget[attribute_name] scrivito_tag(:div, obj_or_widget, attribute_name, options) do if referencelist.any? content_tag(:ul) do capture do referencelist.each do |reference| li = content_tag(:li) do content_tag(:span, reference.description_for_editor, class: "list-content") end concat li end end end end end end
def scrivito_edit_link(obj_or_widget, attribute_name, options = {}) link = obj_or_widget[attribute_name] || Scrivito::Link.new(url: "") scrivito_tag(:div, obj_or_widget, attribute_name, options) do content_tag(:ul) do content_tag(:li) do content_tag(:span, class: "list-content") do query = link.query.present? ? "?#{link.query}" : "" fragment = link.fragment.present? ? "##{link.fragment}" : "" url = link.internal? ? scrivito_path(link).sub(/\?.*/, "#{query}#{fragment}") : link.url description = link.internal? ? link.obj.description_for_editor : link.url "#{link.title} #{link_to(description, url, target: :_blank)}".html_safe end end end end end
def scrivito_edit_linklist(obj_or_widget, attribute_name, options = {}) linklist = obj_or_widget[attribute_name] scrivito_tag(:div, obj_or_widget, attribute_name, options) do if linklist.any? content_tag(:ul) do capture do linklist.each do |link| li = content_tag(:li) do content_tag(:span, class: "list-content") do query = link.query.present? ? "?#{link.query}" : "" fragment = link.fragment.present? ? "##{link.fragment}" : "" url = link.internal? ? scrivito_path(link).sub(/\?.*/, "#{query}#{fragment}") : link.url description = link.internal? ? link.obj.description_for_editor : link.url "#{link.title} #{link_to(description, url, target: :_blank)}".html_safe end end concat li end end end end end end
Wenn über den scrivito_tag
-Helper ein nicht existierendes Attribut gerendert werden soll, gibt Scrivito nun einen Fehler zurück.
Das Namensschema der Data-Attribute, die von Scrivitos In-place-Editoren erkannt werden, wurde vereinheitlicht:
Die Editoren, die von Scrivito bereitgestellt werden, können über mehrere HTML-Attribute konfiguriert werden. Diese Attribute wurden in der Vergangenheit nicht konsistent benannt. Ab diesem Release werden alle Data-Attribute, die von Scrivito erkannt werden, mit einem data-scrivito-editors-
Präfix versehen.
Veraltet | Umbenannt in |
---|---|
data-autosave |
data-scrivito-editors-autosave |
data-date-format |
data-scrivito-editors-date-format |
data-filter-context |
data-scrivito-editors-filter-context |
data-filters |
data-scrivito-editors-filters |
data-max |
data-scrivito-editors-max |
data-min |
data-scrivito-editors-min |
data-newlines |
data-scrivito-editors-multiline *
|
data-placeholder |
data-scrivito-editors-placeholder |
data-reload |
data-scrivito-editors-reload |
data-step |
data-scrivito-editors-step |
data-time-format |
data-scrivito-editors-time-format |
data-values |
nicht verwendet |
*
Bei dieser Gelegenheit wurde auch data-newlines
(nun veraltet) zu data-scrivito-editors-multiline
umbenannt. In der Scrivito-Dokumentation finden Sie eine Liste aller verfügbaren Data-Attribute.
In diesem Zuge haben wir auch die Namen der Scrivito-Editoren begradigt. Der WYSIWYG-Editor Redactor kann nun mit der Option editor: 'redactor'
des scrivito_tag
-Helpers zur Verfügung gestellt werden. Der voreingestellte editor: 'html'
kann aber weiterhin genutzt werden. Verwenden Sie html
, um den primären WYSIWYG-HTML-Editor von Scrivito zu aktivieren. In einem der kommenden Releases wird der Medium Editor den Redactor als primären Editor ablösen.
Wenn Sie scrivito.editors.html_editor.redactor.options
in Ihrem JavaScript verwendet haben, aktualisieren dieses bitte zu scrivito.editors.redactor_editor.options
.
Aufgrund des schwerfälligen und fehlerträchtigen Verhaltens können leere Stings nicht mehr als Werte von enum
oder multienum
-Attributen gesetzt werden.
Wir haben einen alternativen HTML Editor zu der Sammlung der Scrivito Editoren hinzugefügt. Der MediumEditor kann den Redakteuren für noch besseres WYSIWYG zur Verfügung gestellt werden.
Fügen Sie einfach den medium
Editor zum scrivito_tag
hinzu:
scrivito_tag(my_obj_or_widget, :my_html_attribute, {}, editor: :medium)
Es gibt nun eine published?
-Methode für Arbeitskopien. Mit dieser Methode kann man feststellen, ob eine Arbeitskopie die veröffentlichte ist oder nicht. Darüber hinaus wurde die published
-Klassenmethode eingeführt: mit ihr kann die Arbeitskopie, die den veröffentlichten Inhalt repräsentiert, ermittelt werden. Mit dem folgenden Code werden beispielsweise alle Arbeitskopien, die bearbeitet werden können, ermittelt:
editable_workspaces = Scrivito::Workspace.all.reject(&:published?) # oder editable_workspaces = Scrivito::Workspace.all - [Scrivito::Workspace.published]