Scrivito 0.90.0

Verbesserungen

Ein neues API für Definition und Auswahl von Editoren

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.

Ein Helper für alle Attributtypen

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

Destruktive Änderungen

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.

Weitere Verbesserungen und Änderungen

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]