Scrivito 0.70.0

Verbesserungen

Bilder "in place" bearbeiten

Bilder können nun direkt über Scrivitos User Interface bearbeitet werden. Dafür wurde ein vielseitiges Bildbearbeitungsprogramm integriert, das leicht zu benutzen ist:Photo Editor SDK von img.ly. Es wird automatisch über den scrivito_image_tag Helper verfügbar gemacht:

<%# app/views/image/details.html.erb %>
<%= scrivito_image_tag @obj %>

Für die Bildbearbeitung im Content Browser muss nur das Bild, das bearbeitet werden soll, ausgewählt werden. Der Editor kann dann in der Detail-Ansicht geöffnet werden: 

Redakteure können die Bearbeitungsfunktion über das Stift-Icon öffnen:

Klickt man auf das Stift-Icon, wird der Editor geöffnet. Er bietet seine Bearbeitungsmöglichkeiten über eine Werkzeugleiste an:

Jedes Werkzeug umfasst in der Regel mehrere Varianten, beispielsweise unterschiedliche Richtungen beim Rotations-Werkzeug.

Einführung der Bildskalierung

Scrivito bietet nun eine Funktion zur Skalierung von Bildern an, mit der herunterskalierte Versionen von Bildern erzeugt werden können. Redakteure, die die Website durch viel zu große Bilder verlangsamen, sind somit kein Grund zur Sorge mehr: mit den neuen Bildskalierungsfunktionen kann sichergestellt werden, dass Bilder auf eine vernünftige Größe reduziert werden, bevor sie an den Browser ausgeliefert werden.

Dafür kann einfach die neue transform-Option des scrivito_image_tag-Helpers genutzt werden:

<%= scrivito_image_tag @obj, :my_image, {}, transform: {width: 640, height: 480} %>

Zur programmatischen Lösung fortgeschrittener Anwendungsfälle kann auch direkt die neue  Binary#transform API-Methode genutzt werden:

thumbnail = @obj.blob.transform(width: 50, height: 50, fit: :crop)

Wenn in der gesamten Applikation eine grundlegende Bildskalierung (ohne viel Codezu schreiben) angewendet werden soll, kann einfach eine default_image_transformation in Scrivito::Configuration definiert werden. Diese Transformation wird dann auf jedes von Scrivito gerenderte Bild angewandt. 

Neues Design für Seiten- und Widget-Browser

Bei der Auswahl eines Seiten- oder Widget-Typs werden nun die fünf zuletzt verwendeten Typen separat im Dialog angeboten. 

Darüber hinaus können oft genutzte Typen definiert werden, um diese schneller auswählbar zu machen.

Die häufig genutzten Seiten- und Widget-Typen können mit dem folgenden JavaScript-API spezifiziert werden:

scrivito.popular_obj_classes = ['HeadlineWidget', 'TextWidget', 'ImageWidget', 'VideoWidget'];

Zusätzlich wurden die Boxen, die Seiten- oder Widget Typen verkörpern, verkleinert, und ihre Beschreibungen werden nur noch angezeigt, wenn man mit dem Mauszeiger über die Box ffährt.

Widgets komfortabler hinzufügen

Statt neue Widgets über den "Widget einfügen"-Eintrag des Menüs zu einer Seite hinzuzufügen, können diese nun über das obere oder untere Plus-Element des gerade fokussierten Widgets hinzugefügt werden.

Neuer String-Listen-Editor

Das Scrivito UI unterstützt die Bearbeitung von Stringlist-Attributen nun ohne weiteres Zutun. Der neue Editor wird automatisch für alle stringlist-Attribute aktiviert, die über den scrivito_tag-Helper gerendert werden.

Größerer Komfort beim Editieren im Content Browser

Um die Bearbeitung im Content Browser komfortabler zu gestalten, kann dessen Details-View nun maximiert werden.

Destruktive Änderungen

Im Zusammenhang mit dem Tool für die Bildbearbeitung wurde der Editor, der die Drag-und-Drop-Funktion für Bilder in binären Feldern umsetzt, von “image” zu "image_drop” umbenannt. Wenn explizit “data-editor=image” in der Applikation genutzt wird, sollte dies zu “data-editor=image_drop” geändert werden. Damit verhalten sich Bilder auf den Seiten genau wie vorher. Der Editorname “image” wurde der neuen In-place-Bildbearbeitung zugeordnet.


Das CMS-Objekt, das als root-Objekt der Website (/) gerendert wird, kann nun mit dem neuen choose_homepage-Aufruf statt mit der Klassenmethode “Obj.homepage” gerendert werden. choose_homepage erhält die Rack-Umgebung als ersten Parameter, wodurch die Homepage anhand von Aufruf-Parametern wie der Seiten-URL oder einem Wert der Session gesetzt werden kann.

Diese Erweiterung führt dazu, dass die “Obj.homepage” und “Obj#homepage?”-Methoden nutzlos sind, weshalb sie aus dem SDK entfernt wurden. Wenn Sie “Obj.homepage” in Ihrer Applikation überschrieben haben, kann dieser Code einfach in den choose_homepage Aufruf verschoben werden. Als Beispiel:

# Die 'homepage'-Methode in app/models/obj.rb ...

class Obj < BasicObj
  def self.homepage
    Obj.find_by_path('/en')
  end
end

# ... wird zu Folgendem in config/initializers/scrivito.rb:

Scrivito.configure do |config|  
  config.choose_homepage do |env|
    Homepage.find_by_path('/en')
  end
end

Die “Scrivito::NamedLink”-Klasse wurde aus dem SDK entfernt. Wenn Ihre Rails-Applikation auf dem “NamedLink”-Mechanismus beruht, können Sie diese einfach selbst implementieren und anstelle von “Scrivito::NamedLink” nutzen:

class NamedLink
  def self.find_named_link_obj
    Obj.find_by_path("/_named_links") # or use your own implementation
  end
  def self.get_object(title)
    link = find_named_link_obj.related_links.find { |link| link.title == title.to_s }
    raise "The NamedLink '#{title.to_s}' does not exist" unless link
    link.obj
  end
end

Die Reihenfolge von Menü-Einträgen wird nun per  scrivito.menu_order = […] gesetzt. Dies ersetzt die nun nicht mehr funktionierende Methode scrivito.configure_menu_order:

// vorher, nun funktionslos
scrivito.configure_menu_order(["special_command", "scrivito.sdk.*"])

// jetzt
scrivito.menu_order = ["special_command", "scrivito.sdk.*"]

Weitere Verbesserungen und behobene Fehler:

Um Nutzern einen deutlicheren optischen Hinweis zu geben, hebt der "binary"-Editor nun immer die Bereiche hervor, in die binäre Dateien eingefügt werden können.


Scrivito schließt nun Kontextmenüs wenn man außerhalb von ihnen klickt.


Mit den Generatoren für Seiten und Widgets kann nun eine Liste von Attributen definiert werden. Der Aufruf

rails g scrivito:widget my_widget my_string:string my_enum:enum

erzeugt die folgende Widget Klasse:

class MyWidget < Widget
  attribute :my_string, :string
  attribute :my_enum, :enum, values: []
end

Wenn ein Fehler in einem Widget erzeugt wird, ist die gesamte Seite nicht mehr erreichbar. Scrivito bietet nun einen Hook namens #on_scrivito_widget_error(widget, error), mit dem man dieses Verhalten im Controller überschreiben kann. Diese Methode kann auch einen HTML-Platzhalter einfügen, der statt des defekten Widgets gerendert wird. Details hierzu sind aufRubyDoc dokumentiert.


Wir haben die Performanz der Seite für Website-Besucher verbessert, indem JavaSkript Code, der nur für die Bearbeitung benötigt wird, entfernt wurde. Dadurch wurde auch ein Fehler behoben, bei dem das Styling nicht korrekt angewendet wurde wenn “sass-rails” in der Version 5.0 eingesetzt wird.


Das Logging wurde verbessert:  wann immer das Scrivito SDK mit dem Backend kommuniziert, wird ein Eintrag in das Rails-Log geschrieben (im “development” Log-Level). Dies hilft Programmierern dabei, ein besseres Verständnis für die Auswirkungen ihres Codes auf die Performance zu entwickeln.

Beispielsweise schreibt das SDK, nachdem eine Liste aller Arbeitskopien vom Backend geholt wurde, den folgenden Eintrag ins Log:

Scrivito GET /workspaces (328.7ms)

Man kann nun “Scrivito::Link” Objekte miteinander vergleichen.