tibi-docs/api/collections/medialib.yml

234 lines
8.8 KiB
YAML

# Der Name der Kollektion ist beliebig, aber wird in unserem
# Beispiel vom ContentBuilder als "medialib" referenziert.
name: medialib
uploadPath: ../media/medialib
meta:
label:
de: Medienbibliothek
en: Media Library
muiIcon: multimedia
defaultSort:
field: sort
order: MANUALLY #alternativ auch ASC und DESC möglich
# "defaultImageFilter" dient auch hier nur zur Reduzierung der
# Bildgröße bei der Anzeige im tibi-admin (Listen).
# Die Bildgröße für die Einbindung ins erzeugte HTML des ContentBuilder
# hat hiermit nix zu tun.
defaultImageFilter: s
multiupload:
fields:
- source: description #specify wich fields should be editable in Modal, if property isnt set, then all fields will automatically be selected
prefilledFields: #specifies wich fields should have a default value, wont be visible to the user, just an informational text for wich fields will recieve an default value.
- source: title
defaultValue:
eval: |
(function(){
return "Title" + $file.name
})()
# Wird unter "image-/file-/videoSelect" im ContentBuilder Feld kein
# "subNavigation" Index definiert, werden auch folgende "views"
# verwendet.
views:
- type: simpleList
mediaQuery: "(min-width: 0px)"
selectionPriority: 3 #gibt an, wenn mediaQuery passt, mit welcher priorität es default mäßig ausgewählt sein soll, je niedriger, desto wichtiger
primaryText:
source: path
filter: true
secondaryText:
source: title
filter: true
tertiaryText:
source: description
filter: true
fileDropArea:
label:
{
de: "Ziehen Sie Dateien per Drag and Drop hierher oder klicken Sie, um Dateien auszuwählen.",
en: "Drag and drop some files here, or click to upload.",
}
helperText: { de: "Maximale Uploadgröße: 1,54 MB", en: "Maximum upload size: 1.54MB" }
targetField: file
pageAsDropArea: true
columns:
- source: file
- source: updateTime
type: datetime
label: letztes Update
- source: title
filter: true
- source: description
filter: true
- type: table
mediaQuery: "(min-width: 768px)"
selectionPriority: 2
fileDropArea:
label:
{
de: "Ziehen Sie Dateien per Drag and Drop hierher oder klicken Sie, um Dateien auszuwählen.",
en: "Drag and drop some files here, or click to upload.",
}
helperText: { de: "Maximale Uploadgröße: 1,54 MB", en: "Maximum upload size: 1.54MB" }
targetField: file
pageAsDropArea: true
columns:
- source: file
- source: updateTime
type: datetime
label: letztes Update
- source: title
filter: true
- source: description
filter: true
- type: cardList
mediaQuery: "(min-width: 1200px)"
selectionPriority: 1
fileDropArea:
label:
{
de: "Ziehen Sie Dateien per Drag and Drop hierher oder klicken Sie, um Dateien auszuwählen.",
en: "Drag and drop some files here, or click to upload.",
}
helperText: { de: "Maximale Uploadgröße: 1,54 MB", en: "Maximum upload size: 1.54MB" }
targetField: file
pageAsDropArea: false
fields:
- source: file
- source: updateTime
type: datetime
label: letztes Update
- source: title
filter: true
- source: description
filter: true
# Wird ein "subNavigation" Index für "image-/file-/videoSelect" definiert,
# wird die entsprechende Navigation aus folgender Liste angesprochen.
# "0" ist dabei der Index für das erste Element dieser Liste.
subNavigation:
- # Der "name" der Navigation ist für die Mediathek nicht von Bedeutung,
# kann aber für "eval"-Code interessant sein.
name: modal
# Auf "label" wurde hier verzichtet, damit dieses Element nicht in der
# Hauptnavigation des tibi-admin auftaucht.
# Folgende Ansicht wird für unsere Auswahl der Datei im ContentBuilder
# angeboten.
views:
- type: cards
mediaQuery: "(min-width: 0px)"
fields:
- source: file
- source: updateTime
type: datetime
label: letztes Update
- source: title
filter: true
- source: description
filter: true
# Damit der ContentBuilder weiß, welche Datei ausgewählt wurde, ist
# ist folgender "defaultCallback" notwendig.
# Die Funktion wird beim Klick auf die entsprechende Datei aufgerufen.
# Als Funktionsparameter steht der gesamte Datensatz der Auswahl zur
# Verfügung.
# Die Funktionen "parent.selectAsset" und "parent.focus" sind ContentBuilder
# spezifisch und schließen die Listenansicht direkt nach Übergabe der
# Datei-URL.
# Die URL setzt sich aus dem Pfad zur Datei und dem Filter "l" zusammen.
# Es wurde eine relative URL konstruiert, da das ContentBuilder-Widget
# mit "baseHref" zur Projekt-URL erstellt wird.
defaultCallback:
eval: |
//js
(entry) => {
parent.selectAsset("medialib/" + entry.id + "/" + entry.file?.src + "?filter=l")
parent.focus()
}
//!js
- name: modalForeign # Name des Eingabefelds oder der Ansicht.
defaultSort: # Standard-Sortierkriterien, die angewendet werden, wenn keine anderen Sortierkriterien spezifiziert sind.
field: "path" # Standardmäßig wird nach dem "path"-Feld sortiert.
order: "ASC" # Standardmäßig wird in aufsteigender Reihenfolge (ASC) sortiert.
views: # Liste der Ansichten, die in diesem Feld angezeigt werden können.
- type: table # Es wird eine Tabellenansicht verwendet.
columns: # Liste der Spalten, die in der Tabelle angezeigt werden.
- path # Es wird nur die Spalte "path" angezeigt.
defaultCallback: # Standard-Callback-Funktion, die ausgeführt wird, wenn keine andere spezifiziert ist.
eval: | # Der Code wird als JavaScript evaluiert.
//js
(entry) => { // Diese Funktion nimmt den Eintrag (entry) als Argument.
parent.selectEntry(entry) // Die Funktion selectEntry auf dem übergeordneten Objekt wird mit dem Eintrag als Argument aufgerufen.
}
//!js
permissions:
public:
methods:
get: true
post: false
put: false
delete: false
user:
methods:
get: true
post: true
put: true
delete: true
projections:
dashboard:
select:
hooks:
delete:
return:
type: javascript
file: hooks/medialib/delete_return.js
fields:
# Ein Feld vom Typ "file" wird für die Mediathek natürlich
# benötigt.
- name: file
type: file
meta:
label:
de: Datei
en: File
- name: title
type: string
meta:
label:
de: Titel
en: Title
- name: description
type: string
meta:
widget: richtext
label:
de: Kurzbeschreibung
en: Short Description
- name: sort
type: number
meta:
label:
de: Manuelle Sortierung
en: Manual Sorting
inputProps:
{ readonly: true, placeholder: { de: "Wert wird automatisch gesetzt", en: "Value is set automatically" } }
helperText:
de: Dieses Feld wird für die manuelle Sortierung benötigt. Sobald ein Eintrag per Drag&Drop verschoben wurde, wird die neue Position innerhalb der Liste eingetragen.
en: This field is required for manual sorting. As soon as an entry is moved using Drag&Drop, the new position is entered in the list.