Scrivito 0.66.0

Verbesserungen

Mehrere Vorschau-Größen

In der Vorschau von Scrivito können Seiten nun in unterschiedlichen Größen dargestellt werden. Damit kann überprüft werden, ob die Seiten sich an typische Bildschirmgrößen anpassen und wie sie dann aussehen.

Sich überschneidende Änderungen vermeiden

Normalerweise sollte eine Seite nicht in mehr als einer Arbeitskopie gleichzeitig bearbeitet werden. Wenn eine Seite in zwei oder mehr Arbeitskopien bearbeitet wurde - und eine davon veröffentlicht wird -, entsteht ein Konflikt in den nicht veröffentlichten Arbeitskopien. Da sich auf der Seite nicht mehr aktuelle Inhalte befinden könnten, verhindert Scrivito die Veröffentlichung der Arbeitskopien, solange keine Entscheidung über den finalen Inhalt getroffen wurde.

Scrivito zeigt nun eine Konflikt-Warnung auf der Toolbar an (“Neue Version”), wenn eine andere Version der Seite veröffentlicht wurde. Wenn diese Seite schon in einer anderen Arbeitskopie bearbeitet wurde, besteht ein Konflikt und die Warnung lautet entsprechend (“Konflikt”).

Wenn noch kein Konflikt besteht, das Bearbeiten der Seite aber einen Konflikt erzeugen würde, wird ein "Potentieller Konflikt" angezeigt. Wenn man auf diese Warnung klickt, werden die Arbeitskopien, die den potentiellen Konflikt verursachen, aufgelistet. Über diese Liste kann man zu den betreffenden Arbeitskopien navigieren.

Verbesserte Selektion der Elemente im Content Browser

Bisher hatte in der Thumbnail-Ansicht jedes Element im Content Browser zwei Bereiche, die angeklickt werden konnten. Eine, um die Eigenschaften des angeklickten Objektes anzuzeigen, und eine, um es auszuwählen. Dies war irritierend und wurde deswegen zusammengelegt. Ein Klick auf ein Objekt wählt dieses nun aus, und gleichzeitig werden dessen Eigenschaften angezeigt. Die Auswahl weiterer Elemente leert die Detail-Sektion. Stattdessen wird die Anzahl der ausgewählten Objekte angezeigt.

Ferner wird die bestehende Auswahl aufgehoben, wenn ein anderer Filter selektiert wird. Keine versteckte Auswahl mehr!

Bessere Handhabung von Uploads

Während binäre Inhalte hochgeladen werden, wird nun ein Fortschrittsindikator eingeblendet:

Außerdem werden Objekte, die in der aktuellen Content-Browser-Session hochgeladen wurden, in der neuen Sektion "Zuletzt hinzugefügt" aufgeführt. 

URLs binärer Objekte umformen

Mit der BinaryRewrite-Klasse kann nun die URL von binären CMS-Objekten umgeschrieben werden. So können binäre Daten von einem anderen Standort abgerufen werden (beispielsweise über einen Proxy oder von einem gespiegelten Server aus).

Dadurch wird es auch möglich, die URLs von Bildern auf die gewünschte Domain zeigen lassen statt auf das CDN, das von Scrivito genutzt wird. Dazu wird eine before_action im ApplicationController benötigt:

class ApplicationController < ActionController::Base
  protect_from_forgery
  before_action :set_binary_rewriting

  private

    def set_binary_rewriting
      Scrivito::BinaryRewrite.enable_for(request) do |binary_url|
        binary_url.sub(
          "https://scrivito-public-cdn.s3-eu-west-1.amazonaws.com/",
          "https://my.reverse.proxy.com/")
      end
    end
end

Hochgeladene Ressourcen haben keinen Pfad mehr

Beim Hochladen von Ressourcen über das User Interface in das CMS wird den entsprechenden CMS-Objekten kein Pfad mehr zugewiesen. Beim Einfügen eines Bildes per Drag-and-Drop oder auch beim Hochladen über den Content Browser wird das _path Attribut des neuen CMS-Objekts auf nil gesetzt.

Bisher wurde für hochgeladene Ressourcen ein zum Teil zufälliger Pfad (/_resources/random_part/filename) gesetzt. Diese Änderung kann sich auf bestehende Applikationen negativ auswirken. Aus diesem Grund:

  • Testen Sie, ob Ihre Applikation problemlos mit nil-Pfaden und nil-Parents von Bildern umgehen kann.
  • Stellen Sie außerdem sicher, dass kein Code auf der “_resources”-Komponente des Pfades beruht - beispielsweise in Suchen.

Neuer Attribut-Typ: stringlist

Scrivito hat einen neuen Attributtyp: stringlist.  Attribute dieses Typs können mehrere Strings speichern. Beispiel:

class MyPage < Obj
  attribute :tags, :stringlist
end

page = MyPage.createpage.tags # => []
page.update(tags: ["ruby", "rails"])
page.tags # => ["ruby", "rails"]
page.update(tags: page.tags + ["scrivito", "cms"])
page.tags # => ["ruby", "rails", "scrivito", "cms"]

Weitere Verbesserungen und destruktive Änderungen

Destruktiv: BasicObj.valid_page_classes_beneath, BasicObj#valid_widget_classes_for, BasicWidget#valid_widget_classes_for und BasicWidget.valid_container_classes müssen nun gültige Klassen zurückgeben. Strings oder Symbols werden nicht mehr unterstützt:

# Bisher => funktioniert nciht länger
def self.valid_page_classes_beneath(parent_path)
  [:BlogPage, "LoginPage", ScreencastPage]
end

# Jetzt
def self.valid_page_classes_beneath(parent_path)
  [BlogPage, LoginPage, ScreencastPage]
end

Bei Scrivito konnte schon immer die Größe der Dialoge mit einem HTML-Attribut festgelegt werden. Mit diesem SDK-Release werden nun darauf zugeschnittene Ruby-on-Rails-Helper-Methoden eingeführt, um die Handhabung komfortabler zu gestalten.

  • scrivito_large_dialog
  • scrivito_medium_dialog (voreingestellt)
  • scrivito_small_dialog

Beispiel:

<%= scrivito_large_dialog do %>
  <%= scrivito_details_for 'Title and Category' do %>
    <%= scrivito_tag :div, @obj, :title %>
    <%= scrivito_tag :div, @obj, :category %>
  <% end %>
<% end %>

Es gibt eine zusätzliche Helper-Methode, Scrivito::Workspace.use(id_or_title). Sie vereinfacht es, eine Arbeitskopie basierend auf ihrer ID oder ihrem Titel zur aktuellen zu machen:

# bisher
Scrivito::Workspace.current = Scrivito::Workspace.find(id)
Scrivito::Workspace.current = Scrivito::Workspace.find_by_title(title)

# jetzt
Scrivito::Workspace.use(id)
Scrivito::Workspace.use(title)

Das Ruby-API akzeptiert nun  nil-Werte für alle Attributtypen, auch solche, bei denen Listen involviert sind wie multienum oder widgetlist-Attribute. Dasselbe gilt für das JS-API: man kann nun beispielsweise ein multienum-Attribut leeren, indem man dessen Wert auf null setzt.


Um die aktuelle Seite beispielsweise mit Kollegen zu teilen, enthält das Seitenmenü nun einen Eintrag, der einen Dialog öffnet, über den die aktuelle Seiten-URL in die Zwischenablage kopiert werden kann.


Um einen Hinweis zu geben, ob das UI im Bearbeitungsmodus ist oder nicht, wurde der Seiteneigenschaften-Menü-Eintrag nun geteilt: “Seiteneigenschaften Anzeigen" und  “Seiteneigenschaften bearbeiten”. Natürlich werden über letzteren auch die Seiteneigenschaften angezeigt. 


Im Arbeitskopie-Menü werden nun neben dem Titel der Arbeitskopie auch deren Besitzer angezeigt.


Beim Wechsel in eine Arbeitskopie, in der die aktuelle Seite nicht existiert, leitet Scrivito nun auf  Obj.homepage weiter. Bislang wurde eine 404-Fehlermeldung angezeigt.


Wenn Widgets über den scrivito_tag-Helper gerendert werden, kann man nun - zusätzlich zum äusseren - das innere HTML-Element wählen. Im folgenden Beispiel wird das widgetlist-Attribut “body” innerhalb eines “ul”-Tags gerendert und beinhaltet einzelne Widgets jeweils in “li”-Elementen:

scrivito_tag(:ul, @obj, :body, {}, inner_tag: :li)

Wenn keine “alt”-Option an den scrivito_image_tag-Helper übergeben wird, ruft dieser nun BasicObj#alt_description auf, um den Wert des “alt”-Attributs des resultierenden “img”-Tags zu bestimmen. Als Voreinstellung gibt diese Methode BasicObj#title zurück. Man kann BasicObj#alt_description in der Applikation überschreiben, um diese Beschreibung an die eigenen Zwecke anzupassen. Beispielsweise könnte der Wert eines vom Redakteur gesetzten CMS-Objektattributs zurückgegeben werden.

Bislang war BasicObj#display_title der voreingestellte Wert des “alt”-Attributs, der den Binary#filename des BasicObj#binary zurückgab. Der W3C rät von diesem Verhalten ab.


Wenn das “show”-Template eines Widgets fehlt, wird im Development-Modus nun ein Fehler ausgegeben. Im Production-Modus wird ein dazu passender Fehler ausgegeben, während für normale Besucher der Seite kein Fehler angezeigt wird.


Man kann den Content Browser nun so konfigurieren, dass er Filter abhängig vom Bearbeitungskontext anbietet. Mit diesem Feature können dem Redakteur ausschließlich Bilder angezeigt werden, wenn Bilder zu HTML-Inhalten hinzugefügt werden sollen oder wenn er Bild-Verlinkungen ändert. Man kann damit auch verhindern, dass in einer Video-Galerie versehentlich Bilder hinzugefügt werden, etc. 

Weitere Details und Beispiele finden Sie in der Content Browser Dokumentation zu scrivito.content_browser.filters, scrivito.content_browser.open(filter_context: {}) und data-filter-context.


Wir haben die Unterstützung des data-filter-HTML-Attributs entfernt, das bislang ein Alias von data-filters war. Nutzen Sie stattdessen bitte data-filters.