zwischenstand

This commit is contained in:
2024-02-13 16:36:09 +00:00
parent 0b4a474180
commit 49e55a90f7
173 changed files with 15832 additions and 1359 deletions

View File

@@ -41,22 +41,30 @@ fields:
- name: collectionName
type: string
meta:
label: Collection Name
label:
de: Collection Name
en: Collection Name
- name: entryId
type: string
meta:
label: Entry ID
label:
de: Entry ID
en: Entry ID
- name: versionNr
type: number
meta:
label: Version Nr
label:
de: Version Nr
en: Version Nr
- name: manipulatedBy
type: string
meta:
label: Manipulated By
label:
de: Manipulated By
en: Manipulated By
- name: eventDescription
type: string
@@ -65,38 +73,59 @@ fields:
widget: select
choices:
- id: create
name: Create
name:
de: Erstellt
en: Create
- id: update
name: Update
name:
de: Update
en: Update
- id: delete
name: Delete
name:
de: Gelöscht
en: Delete
- id: recreate
name: Recreate
name:
de: Wiederhergestellt
en: Recreate
- id: activate
name: Activate
name:
de: Aktiviert
en: Activate
- name: updateLogs
type: object[]
meta:
label: Veränderungen
label:
de: Veränderungen
en: Update Logs
subFields:
- name: field
type: string
meta:
label: Feldname
label:
de: Feldname
en: Fieldname
- name: previous
type: string
meta:
label: Vorheriger Wert
label:
de: Vorheriger Wert
en: Previous Value
- name: current
type: string
meta:
label: Aktueller Wert
label:
de: Aktueller Wert
en: Current Value
- name: entry
type: object
meta:
label: Entry
label:
de: Eintrag
en: Entry

View File

@@ -37,7 +37,6 @@ meta:
tablist:
activeTab: general
tabs:
- name: general
label: Allgemein
@@ -124,8 +123,12 @@ fields:
- type: string
name: path
meta:
label: Pfad
helperText: "Ein Pfad sollte mit einem / starten und ohne eins enden."
label:
de: Pfad
en: Path
helperText:
de: "Ein Pfad sollte mit einem / starten und ohne eins enden."
en: "A path should start with a / and end without one."
containerProps:
layout:
size:
@@ -133,73 +136,20 @@ fields:
small: "col-12"
large: "col-6"
- type: boolean
name: active
meta:
label: Aktiv
helperText: Ist dies Aktiviert, so wird der Inhalt verfügbar.
defaultValue: true
containerProps:
layout:
size:
default: "col-6"
small: "col-12"
large: "col-6"
- !include fields/active.yml
- !include fields/contentType.yml
- type: string
name: type
meta:
label: Inhaltstyp
widget: select
defaultValue: page
containerProps:
layout:
size:
default: "col-6"
small: "col-12"
large: "col-6"
choices:
- name: Seite
id: page
- name: pageTitle
type: string
meta:
label: Titel der Seite
helperText: "Dieser Titel wird in der Seite als h1 angezeigt."
dependsOn:
eval: $.type == "page"
containerProps:
layout:
size:
default: "col-6"
small: "col-12"
large: "col-6"
- name: rows
type: object[]
meta:
label: Zeilen
widget: grid
metaElements: []
subFields: !include fieldLists/row.yml
- !include fields/pageTitle.yml
- !include fields/rows.yml
- name: meta
type: object
meta:
label: Meta Agaben
label:
de: Meta Agaben
en: Meta Data
dependsOn:
eval: $.type == "page"
subFields: !include fieldLists/meta.yml
- 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.
- !include fields/manualSort.yml

View File

@@ -1,16 +1,49 @@
# attribute auf column ebene
- name: contentType
type: string
meta:
label: ""
label:
de: Inhaltstyp
en: Content Type
widget: select
choices:
- name: Bild
id: image
- name:
de: Bilder
en: Images
id: images
- name: Modul Import
- name:
de: Modul Import
en: Module Import
id: moduleImport
- name:
de: Formular
en: form
id: form
- name: Text
- name:
de: Text
en: Text
id: text
- name:
de: Google Maps
en: Google Maps
id: googleMaps
- !include ../fields/images.yml
- name: moduleImport
type: string
meta:
label:
de: Modul Import
en: Module Import
dependsOn:
eval: $parent.contentType == 'moduleImport' || $parent.contentType == 'form'
widget: foreignKey
foreign:
collection: module
id: id
subNavigation: 0
render:
defaultCollectionViews: true
- !include ../fields/text.yml

View File

@@ -13,12 +13,17 @@ subFields:
- name: groupTitle
type: string
meta:
label: Checkbox Gruppe Titel
label:
de: Gruppe Titel
en: Group title
- name: checkboxes
type: object[]
meta:
label: Checkbox Gruppe
label:
de: Checkbox Gruppe
en: Checkbox Group
direction: row
widget: containerLessObjectArray
subFields:

View File

@@ -11,6 +11,7 @@ meta:
eval: $parent?.inputWidgets?.includes('defaultCalendar')
subFields:
- name: standardInputProperties
type: object
meta:
widget: containerLessObject
subFields: !include standardInputProperties.yml

View File

@@ -10,29 +10,25 @@ subFields:
- name: props
type: object
meta:
label: Datumauswahl Eigenschaften
label:
de: Datumauswahl Eigenschaften
en: Date selection properties
subFields:
- name: allowedDateRanges
type: object[]
meta:
label: Erlaubte Datumsbereiche
label:
de: Erlaubte Datumsbereiche
en: Allowed date ranges
widget: containerLessObjectArray
subFields:
- name: from
type: date
meta:
label: Von
widget: date
containerProps:
layout:
size:
default: "col-6"
small: "col-12"
large: "col-6"
- !include ../../fields/from.yml
- name: to
type: date
meta:
label: Bis
label:
de: Bis
en: To
widget: date
containerProps:
layout:
@@ -41,34 +37,10 @@ subFields:
small: "col-12"
large: "col-6"
- name: excludeDays
type: string[]
meta:
label: Auszuschließende Wochentage
widget: selectArray
choices:
- id: monday
name: Montag
- id: tuesday
name: Dienstag
- id: wednesday
name: Mittwoch
- id: thursday
name: Donnerstag
- id: friday
name: Freitag
- id: saturday
name: Samstag
- id: sunday
name: Sonntag
- !include ../../fields/excludedDays.yml
- name: standardInputProperties
type: object
meta:
widget: containerLessObject
subFields: !include standardInputProperties.yml

View File

@@ -27,17 +27,7 @@
small: "col-12"
large: "col-6"
- name: emailCC
type: string[]
meta:
label:
de: Email CC
en: Email CC
widget: string
useDefaultArray: true
helperText:
de: "Bsp: zyx@gmail.com"
en: "E.g.: zyx@gmail.com"
- !include ../../fields/emailCC.yml
- name: emailIntroduction
type: string
@@ -49,10 +39,22 @@
de: "Bsp: Hallo xyz, sie haben eine neue Kaufanfrage erhalten!"
en: "E.g.: Hello xyz, you have received a new purchase request!"
- name: sendFormBtnText
type: string
meta:
label:
de: Formular Absenden Button Text
en: Form Submit Button Text
helperText:
de: "Bsp: Absenden"
en: "E.g.: Submit"
- name: rows
type: object[]
meta:
label: Zeile
label:
de: Zeile
en: Row
widget: grid
addElementLabel: Zeile Hinzufügen
@@ -60,7 +62,9 @@
- name: title
type: string
meta:
label: Zeilenname
label:
de: Zeilenname
en: Row name
helperText:
de: "Sollte der Titel keinen Wert enthalten, wird kein Zeilenname angezeigt!"
en: "If the title does not contain a value, no row name will be displayed!"
@@ -68,7 +72,9 @@
- name: emailTitle
type: string
meta:
label: Email Abschnitt Titel
label:
de: Email Abschnitt Titel
en: Email section title
helperText:
de: "Sollte der Titel keinen Wert enthalten, wird kein Abschnitt Titel angezeigt!"
en: "If the title does not contain a value, no section title will be displayed!"
@@ -77,16 +83,38 @@
type: object[]
meta:
label: Spalte
addElementLabel: Spalte hinzufügen
label:
de: Spalte
en: Column
addElementLabel:
de: Spalte hinzufügen
en: Add column
widget: grid
direction: horizontal
subFields:
- name: title
type: string
meta:
label: Überschrift
helperText: Optional
label:
de: Überschrift
en: Headline
helperText:
de: Optional
en: Optional
- name: emailTitle
type: string
meta:
label:
de: Email Abschnitt Titel
en: Email section title
- name: annotation
type: string
meta:
label:
de: Zusatzinformation
en: Additional information
- name: inputWidgets
type: string[]
@@ -96,33 +124,63 @@
en: Displayed input fields
widget: selectArray
choices:
- name: Nummernblock
- name:
de: Nummernblock
en: Number block
id: labelNumber
- name: Zeitenauswahlfeld
- name:
de: Zeitenauswahlfeld
en: Time selection field
id: times
- name: Auswahlfeld
- name:
de: Auswahlfeld
en: Selection field
id: select
- name: Datumsauswahl - Standard Kalender
- name:
de: Datumsauswahl - Standard Kalender
en: Date selection - Standard calendar
id: defaultCalendar
- name: Datumauswahl - Custom Kalender
- name:
de: Datumauswahl - Custom Kalender
en: Date selection - Custom calendar
id: customCalendar
- name: Nummerfeld
- name:
de: Nummerfeld
en: Number field
id: number
- name: Checkbox Gruppe
- name:
de: Checkbox Gruppe
en: Checkbox group
id: checkboxGroup
- name: Mehrfachauswahl
- name:
de: Mehrfachauswahl
en: Multiple selection
id: multiSelect
- name: Textfeld
- name:
de: Textfeld
en: Text field
id: text
- name:
de: Zeitenauswahl
en: Time selection
id: timeSelect
- name:
de: Standardauswahl
en: Standard selection
id: standardSelect
- !include standardSelect.yml
- !include labelNumberInput.yml
- !include timesInput.yml
- !include dateInput.yml
@@ -131,3 +189,4 @@
- !include datePicker.yml
- !include multiSelectInput.yml
- !include textInputs.yml
- !include timeSelect.yml

View File

@@ -1,7 +1,9 @@
name: labelNumberInput
type: object[]
meta:
label: Nummer block
label:
de: Nummer block
en: Number block
dependsOn:
eval: $parent?.inputWidgets?.includes('labelNumber')
helperText:
@@ -12,7 +14,9 @@ subFields:
- name: group
type: number
meta:
label: Gruppe
label:
de: Gruppe
en: Group
helpterText:
de: Pflichtfeld seperierung. Aus einem Nummernblock muss mindestens eine Gruppe input haben.
en: Mandatory field separation. A number block must have at least one group input.
@@ -34,7 +38,9 @@ subFields:
- name: emailName
type: string
meta:
label: Email Name
label:
de: Email Name
en: Email name
containerProps:
layout:
size:
@@ -62,7 +68,9 @@ subFields:
- name: emailName
type: string
meta:
label: Email Name
label:
de: Email Name
en: Email name
containerProps:
layout:
size:

View File

@@ -8,6 +8,7 @@ meta:
eval: $parent?.inputWidgets?.includes('multiSelect')
subFields:
- name: standardInputProperties
type: object
meta:
widget: containerLessObject
subFields: !include standardInputProperties.yml
@@ -15,24 +16,32 @@ subFields:
- name: options
type: object[]
meta:
label: Mehrfachauswahl Optionen
label:
de: Mehrfachauswahl Optionen
en: Multi Select Options
direction: row
widget: containerLessObjectArray
subFields:
- name: name
type: string
meta:
label: Name
label:
de: Name
en: Name
- name: props
type: object
meta:
label: Mehrfachauswahl Eigenschaften
label:
de: Mehrfachauswahl Eigenschaften
en: Multi Select Properties
subFields:
- name: additionalAddableValues
type: boolean
meta:
label: Zusätzliche hinzufügbare Werte
label:
de: Zusätzliche hinzufügbare Werte
en: Additional addable values
containerProps:
layout:
size:

View File

@@ -8,6 +8,7 @@ meta:
eval: $parent?.inputWidgets?.includes('number')
subFields:
- name: standardInputProperties
type: object
meta:
widget: containerLessObject
subFields: !include standardInputProperties.yml

View File

@@ -1,7 +1,9 @@
- name: emailTitle
type: string
meta:
label: Email Titel
label:
de: Email Titel
en: Email title
containerProps:
layout:
size:
@@ -12,7 +14,9 @@
- name: placeholder
type: string
meta:
label: Platzhalter
label:
de: Platzhalter
en: Placeholder
containerProps:
layout:
size:
@@ -23,7 +27,9 @@
- name: notRequired
type: boolean
meta:
label: nicht Notwendig
label:
de: nicht Notwendig
en: not required
containerProps:
layout:
size:
@@ -34,7 +40,9 @@
- name: fieldOrder
type: number
meta:
label: Reihenfolge
label:
de: Reihenfolge
en: Order
helperText:
de: Die kleinste angegebene Zahl wird am weitesten oben in der Formularspalte stehen
en: The smallest specified number will be at the top of the form column.
@@ -44,8 +52,20 @@
default: "col-6"
small: "col-12"
large: "col-6"
- name: textTitle
type: string
meta:
label: Text Titel
helperText: Alternative zu textPlaceholder
label:
de: Text Titel
en: Text title
helperText:
de: Alternative zu textPlaceholder, steht dann über dem Inputfeld
en: Alternative to textPlaceholder, then stands above the input field
- name: groupTitle
type: string
meta:
label:
de: Gruppe Titel
en: Group title

View File

@@ -0,0 +1,58 @@
name: standardSelect
type: object
meta:
label: Standardauswahl
dependsOn:
eval: $parent?.inputWidgets?.includes('standardSelect')
subFields:
- name: standardInputProperties
type: object
meta:
widget: containerLessObject
subFields: !include standardInputProperties.yml
- name: selectEntries
type: object[]
meta:
label:
de: Auswahleingabe Möglichkeiten
en: Selection input options
widget: containerLessObjectArray
addElementLabel: Auswahleingabe hinzufügen
direction: horizontal
subFields:
- name: shownValue
type: string
meta:
label:
de: Angezeigter Wert
en: Displayed value
containerProps:
layout:
size:
default: "col-6"
small: "col-12"
large: "col-6"
- name: value
type: string
meta:
label:
de: per Email gesendeter Wert
en: Value sent by email
containerProps:
layout:
size:
default: "col-6"
small: "col-12"
large: "col-6"
- name: defaultValue
type: boolean
meta:
label:
de: Standardwert
en: Default value
helperText:
de: "Wird dieser Wert ausgewählt, wird er als Standardwert gesetzt"
en: "If this value is selected, it will be set as the default value"

View File

@@ -7,6 +7,7 @@ meta:
eval: $parent?.inputWidgets?.includes('text')
subFields:
- name: standardInputProperties
type: object
meta:
widget: containerLessObject
subFields: !include standardInputProperties.yml
@@ -14,7 +15,9 @@ subFields:
- name: textArea
type: boolean
meta:
label: Großes Textfeld
label:
de: Großes Textfeld
en: Large text field
containerProps:
layout:
size:
@@ -25,7 +28,9 @@ subFields:
- name: emailValidation
type: boolean
meta:
label: E-Mail-Validierung
label:
de: E-Mail-Validierung
en: E-mail validation
containerProps:
layout:
size:
@@ -36,7 +41,9 @@ subFields:
- name: telValidation
type: boolean
meta:
label: Telefon-Validierung
label:
de: Telefon-Validierung
en: Phone validation
containerProps:
layout:
size:

View File

@@ -0,0 +1,45 @@
name: timeSelect
type: object
meta:
label: Zeitenwahl
dependsOn:
eval: $parent?.inputWidgets?.includes('timeSelect')
subFields:
- name: standardInputProperties
type: object
meta:
widget: containerLessObject
subFields: !include standardInputProperties.yml
- name: selectEntries
type: object[]
meta:
label: Auswahleingabe
widget: containerLessObjectArray
helperText: "Die Angaben werden in folgendes Übersetzt: Anfangspunkt - Endpunkt"
direction: horizontal
subFields:
- name: leftSide
type: string
meta:
label: Anfangspunkt
helperText: Bspw. 14:30
containerProps:
layout:
size:
default: "col-6"
small: "col-12"
large: "col-6"
- name: rightSide
type: string
meta:
label: Endpunkt
helperText: Bspw. 15:30
containerProps:
layout:
size:
default: "col-6"
small: "col-12"
large: "col-6"

View File

@@ -14,8 +14,12 @@ subFields:
- name: times
type: object[]
meta:
label: Zeitenangabe
helperText: "Die Angaben werden in folgendes Übersetzt: Anfangspunkt - Endpunkt"
label:
de: Zeitenauswahl Möglichkeiten
en: Time selection options
helperText:
de: "Die Angaben werden in folgendes Übersetzt: Anfangspunkt - Endpunkt"
en: "The information is translated into the following: starting point - end point"
direction: horizontal
widget: containerLessObjectArray
@@ -23,8 +27,12 @@ subFields:
- name: from
type: string
meta:
label: Anfangspunkt
helperText: Bspw. 14:30
label:
de: Anfangspunkt
en: Starting point
helperText:
de: Bspw. 14:30
en: E.g. 14:30
containerProps:
layout:
size:
@@ -36,7 +44,9 @@ subFields:
type: string
meta:
label: Endpunkt
helperText: Bspw. 15:30
helperText:
de: Bspw. 15:30
en: E.g. 15:30
containerProps:
layout:
size:
@@ -44,6 +54,7 @@ subFields:
small: "col-12"
large: "col-6"
- name: standardInputProperties
type: object
meta:
widget: containerLessObject
subFields: !include standardInputProperties.yml

View File

@@ -1,7 +1,9 @@
- name: title
type: string
meta:
label: Titel
label:
de: Titel
en: Title
containerProps:
layout:
size:
@@ -12,7 +14,11 @@
- name: description
type: string
meta:
label: Beschreibung
label:
de: Beschreibung
en: Description
inputProps:
multiline: true
containerProps:
layout:
size:
@@ -22,4 +28,8 @@
- name: keywords
type: string
meta:
label: Schlüsselwörter
inputProps:
multiline: true
label:
de: Schlüsselwörter
en: Keywords

View File

@@ -1,9 +1,30 @@
# attribute auf row ebene
- name: title
type: string
meta:
label:
de: Titel
en: Title
- name: backgroundImage
type: string
meta:
label:
de: Hintergrundbild
en: Background Image
widget: foreignKey
foreign:
collection: medialib
id: id
subNavigation: 0
render:
defaultCollectionViews: true
- name: columns
type: object[]
meta:
label: Spalten
label:
de: Spalten
en: Columns
direction: row
widget: grid
subFields: !include ../fieldLists/column.yml
subFields: !include ./column.yml

View File

@@ -0,0 +1,16 @@
type: boolean
name: active
meta:
label:
de: Aktiv
en: Active
helperText:
de: Ist dies Aktiviert, so wird der Inhalt verfügbar.
en: If this is activated, the content will be available.
defaultValue: true
containerProps:
layout:
size:
default: "col-6"
small: "col-12"
large: "col-6"

View File

@@ -0,0 +1,3 @@
backup:
active: true # sollen backups beim verändern erstellt werden
collectionName: backups # in welcher collection es gespeichert werden soll

View File

@@ -0,0 +1,19 @@
type: string
name: type
meta:
label:
de: Inhaltstyp
en: Content Type
widget: select
defaultValue: page
containerProps:
layout:
size:
default: "col-6"
small: "col-12"
large: "col-6"
choices:
- name: # name der im admin angezeigt wird
de: Seite
en: Page
id: page # wert der in der datenbank gespeichert wird

View File

@@ -0,0 +1,11 @@
name: emailCC
type: string[]
meta:
label:
de: Email CC
en: Email CC
widget: string
useDefaultArray: true
helperText:
de: "Bsp: zyx@gmail.com"
en: "E.g.: zyx@gmail.com"

View File

@@ -0,0 +1,40 @@
name: excludeDays
type: string[]
meta:
label: Auszuschließende Wochentage
widget: checkboxArray
choices:
- id: monday
name:
de: Montag
en: Monday
- id: tuesday
name:
de: Dienstag
en: Tuesday
- id: wednesday
name:
de: Mittwoch
en: Wednesday
- id: thursday
name:
de: Donnerstag
en: Thursday
- id: friday
name:
de: Freitag
en: Friday
- id: saturday
name:
de: Samstag
en: Saturday
- id: sunday
name:
de: Sonntag
en: Sunday

View File

@@ -0,0 +1,6 @@
name: file
type: file
meta:
label:
de: Datei
en: File

View File

@@ -0,0 +1,7 @@
type: object
name: formular
meta:
label:
de: Formular
en: Form
widget: jsonField

View File

@@ -0,0 +1,13 @@
name: from
type: date
meta:
label:
de: Von
en: From
widget: date
containerProps:
layout:
size:
default: "col-6"
small: "col-12"
large: "col-6"

View File

@@ -0,0 +1,37 @@
# Der Key des Objektes definiert den Namen des Filters.
# Jeder Filter ist eine Liste von Bildmanipulationen, die
# nacheinander angewandt werden.
# Die manipulierten Bilder werden gecachet. Ein nachträgliches
# Anpassen der Filter erfordert also das Löschen der gecachten
# Dateien welche sich jeweils neben den original Bilddateien
# im "uploadPath" der Kollektion befinden.
xs:
- fit: true
height: 90
width: 90
resampling: lanczos
quality: 60
s:
- fit: true
height: 300
width: 300
resampling: lanczos
quality: 60
m:
- fit: true
height: 600
width: 600
resampling: lanczos
quality: 60
l:
- fit: true
height: 1200
width: 1200
resampling: lanczos
quality: 60
xl:
- fit: true
height: 2000
width: 2000
resampling: lanczos
quality: 60

View File

View File

@@ -0,0 +1,25 @@
name: images
type: string[]
meta:
label:
de: Bild
en: Image
dependsOn:
eval: $parent.contentType == 'images'
widget: foreignKey # Verwendetes Widget.
foreign:
collection: medialib # Name der Sammlung, in der die ausgewählten Daten gespeichert sind.
id: id # Feldname, das als eindeutige Kennung für die ausgewählten Daten verwendet wird.
subNavigation: 0 # Bestimmt, welche Navigation für die Auswahl der ausgewählten Daten angezeigt wird.
#projection: xyz
#sort: "title"
render:
defaultCollectionViews: true
# alternativ könnte auch folgendes verwendet werden:
#raw: true
#eval: |
# (function() {
# var out = "";
# out += "<div style=\"color: #999;\">" + $foreignEntry.title + "</div>";
# return out;
# })()

View File

@@ -0,0 +1,11 @@
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.

View File

@@ -0,0 +1,27 @@
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
name: Datei
- source: category
name:
de: Kategorie
en: Category
filter: true
- source: updateTime
type: datetime
filter: true
label:
de: letztes Update
en: last update

View File

@@ -0,0 +1,25 @@
type: simpleList
mediaQuery: "(min-width: 0px)"
defaultSelect: false
selectionPriority: 3 #gibt an, wenn mediaQuery passt, mit welcher priorität es default mäßig ausgewählt sein soll, je niedriger, desto wichtiger
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 # gibt an, in welches feld die datei hochgeladen werden soll
pageAsDropArea: false # wenn true, wird filedrop area garnicht erst angezeigt, da die ganze seite drag n drop funktionalität hat
primaryText:
source: file
filter: true
secondaryText:
source: alt
filter: true
tertiaryText:
source: category
filter: true

View File

@@ -0,0 +1,30 @@
type: table
mediaQuery: "(min-width: 800px)"
defaultSelect: false
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: false
columns:
- source: file
name:
de: Datei
en: File
filter: true
- source: category
name:
de: Kategorie
en: Category
filter: true
- source: updateTime
type: datetime
label:
de: letztes Update
en: last update
filter: true

View File

@@ -0,0 +1,10 @@
multiupload:
fields:
- source: category # gibt an, welche Felder in der Modalansicht bearbeitet werden können, wenn die Eigenschaft nicht festgelegt ist, werden automatisch alle Felder ausgewählt
prefilledFields: # gibt an, welche Felder in der Modalansicht vorbefüllt werden können, wenn die Eigenschaft nicht festgelegt ist, werden automatisch alle Felder ausgewählt
- source: title
defaultValue: # extrahiert den namen des files und fügt ihn in das feld "title" ein
eval: |
(function(){
return "Title" + $file.name
})()

View File

@@ -0,0 +1,23 @@
name: pageTitle
type: string
meta:
label:
de: Titel der Seite
en: Page Title
helperText:
de: "Dieser Titel wird in der Seite als h1 angezeigt."
en: "This title is displayed in the page as h1."
dependsOn:
eval: $.type == "page"
inputProps:
#multiline: true
#placeholder: Seitentitel
#...
#openapi:
# example: Demo Titel
containerProps:
layout:
size:
default: "col-6"
small: "col-12"
large: "col-6"

View File

@@ -0,0 +1,6 @@
quickEdit: # Erlaubt das Bearbeiten von Einträgen in der Listenansicht, ohne dass eine neue Seite geöffnet wird
enabled: true
fields: # felder, die in dieser Ansicht bearbeitet werden können
- title
- alt
- file

View File

@@ -0,0 +1,9 @@
name: rows
type: object[]
meta:
label:
de: Zeilen
en: Rows
widget: grid
metaElements: []
subFields: !include ../fieldLists/row.yml

View File

@@ -0,0 +1,9 @@
name: text
type: string
meta:
widget: richtext
label:
de: Text
en: text
dependsOn:
eval: $parent.contentType == 'text'

View File

@@ -0,0 +1,6 @@
name: fulltextindex # Ein eindeutiger Name für den Index. Es ist optional, wird jedoch empfohlen, um den Index später leicht identifizieren zu können.
key: # Bestimmt, auf welche Felder der Index angewendet werden soll. Dies kann ein einfacher String sein, wenn der Index nur ein Feld umfasst, oder ein Array von Strings, wenn der Index mehrere Felder umfasst.
- $text:$** # definiert einen Volltextindex über alle Felder. Der spezielle Operator $text wird verwendet, um einen Volltextindex zu erstellen, und der Operator $\*\* bezeichnet alle Felder in der Sammlung.
background: true
unique: false # Wenn auf true gesetzt, erzwingt dies, dass der Index eindeutige Werte enthält. Wenn Sie versuchen, einen Eintrag mit einem bereits indizierten Wert hinzuzufügen, wird ein Fehler ausgelöst.
defaultLanguage: german # Wird verwendet, um die Sprache für Textindizes festzulegen. Dies ist wichtig für die Volltextsuche, da verschiedene Sprachen unterschiedliche Tokenisierungs- und Stemmungsregeln haben.

View File

@@ -35,8 +35,4 @@ hooks:
file: hooks/forms/post_return.js
fields:
- type: object
name: formular
meta:
label: Formular
widget: jsonField
- !include fields/form.yml

View File

@@ -46,11 +46,16 @@ hooks:
type: javascript
file: hooks/lighthouse/post_create.js
indexes:
- !include fields/textIndex.yml
fields:
- name: analyzedPaths
type: string[]
meta:
label: Analyzed Paths
label:
de: Analysierten Pfade
en: Analyzed Paths
- name: performance
type: number
meta:
@@ -58,15 +63,21 @@ fields:
- name: accessibility
type: number
meta:
label: Accessibility
label:
en: Accessibility
de: Zugänglichkeit
- name: bestPractices
type: number
meta:
label: Best Practices
label:
en: Best Practices
de: Beste Praktiken
- name: seo
type: number
meta:
label: SEO
label:
en: SEO
de: SEO
- name: lighthouseMetrics
type: object
meta:
@@ -75,45 +86,67 @@ fields:
- name: FCPS
type: number
meta:
label: First Contentful Paint Score
label:
en: First Contentful Paint Score
de: Erster Inhaltlicher Anstrich Score
- name: FCPV
type: number
meta:
label: First Contentful Paint Value
label:
en: First Contentful Paint Value
de: Erster Inhaltlicher Anstrich Wert
- name: FMPV
type: number
meta:
label: First Meaningful Paint Value
label:
de: Erster Bedeutungsvoller Anstrich Wert
en: First Meaningful Paint Value
- name: FMPS
type: number
meta:
label: First Meaningful Paint Score
label:
en: First Meaningful Paint Score
de: Erster Bedeutungsvoller Anstrich Score
- name: SIS
type: number
meta:
label: Speed Index Score
label:
en: Speed Index Score
de: Geschwindigkeitsindex Score
- name: SIV
type: number
meta:
label: Speed Index Value
label:
en: Speed Index Value
de: Geschwindigkeitsindex Wert
- name: TTIS
type: number
meta:
label: Time to Interactive Score
label:
en: Time to Interactive Score
de: Zeit bis zur Interaktion Score
- name: TTIV
type: number
meta:
label: Time to Interactive Value
label:
en: Time to Interactive Value
de: Zeit bis zur Interaktion Wert
- name: FPIDS
type: number
meta:
label: First Potential Input Delay Score
label:
de: Erste potenzielle Eingabe Verzögerung Score
en: First Potential Input Delay Score
- name: FPIDV
type: number
meta:
label: First Potential Input Delay Value
label:
en: First Potential Input Delay Value
de: Erste potenzielle Eingabe Verzögerung Wert

View File

@@ -26,4 +26,6 @@ fields:
- type: string
name: lighthouseSubpath
meta:
label: PagespeedPaths
label:
de: Zu analysierenden Pfad
en: Path to analyze

View File

@@ -1,25 +1,29 @@
# Der Name der Kollektion ist beliebig, aber wird in unserem
# Beispiel vom ContentBuilder als "medialib" referenziert.
# Der Name der Kollektion wird in der Rest-API-URL verwendet, z.B.
# /_/tibi_starter/medialib
name: medialib
# Enthält die Kollektion Felder vom Typ "file", so werden die
# hochgeladenen Dateien unter dem Ordner abgelegt, der mit
# "uploadPath" bestimmt wird.
uploadPath: ../media/medialib
meta:
allowExportAll: true
label:
allowExportAll: true # Erlaubt das Exportieren aller Einträge in dieser Sammlung - Nur für Admins
label: # label der Collection in der Sidebar
de: Medienbibliothek
en: Media Library
muiIcon: multimedia
muiIcon: multimedia # icon in navigation
defaultSort:
field: sort
order: MANUALLY
order: MANUALLY #alternativ auch ASC und DESC möglich
backup:
active: true
collectionName: backups
active: true # sollen backups beim verändern erstellt werden
collectionName: backups # in welcher collection es gespeichert werden soll
quickEdit:
quickEdit: # Erlaubt das Bearbeiten von Einträgen in der Listenansicht, ohne dass eine neue Seite geöffnet wird
enabled: true
fields:
fields: # felder, die in dieser Ansicht bearbeitet werden können
- title
- alt
- file
@@ -31,48 +35,20 @@ meta:
defaultImageFilter: xs
multiupload:
fields: []
fields:
- source: category # gibt an, welche Felder in der Modalansicht bearbeitet werden können, wenn die Eigenschaft nicht festgelegt ist, werden automatisch alle Felder ausgewählt
prefilledFields: # gibt an, welche Felder in der Modalansicht vorbefüllt werden können, wenn die Eigenschaft nicht festgelegt ist, werden automatisch alle Felder ausgewählt
- source: title
defaultValue: # extrahiert den namen des files und fügt ihn in das feld "title" ein
eval: |
(function(){
return "Title" + $file.name
})()
views:
- type: table
mediaQuery: "(min-width: 0px)"
defaultSelect: false
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: false
columns:
- source: file
name: Datei
- source: updateTime
type: datetime
label: letztes Update
- 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
name: Datei
- source: updateTime
type: datetime
label: letztes Update
- !include fields/medialibSimpleList.yml
- !include fields/medialibTable.yml
- !include fields/medialibCardList.yml
subNavigation:
- name: modalForeign # Name des Eingabefelds oder der Ansicht.
@@ -93,71 +69,168 @@ meta:
}
//!js
# Allgeine Zugriffsregeln auf Kollektions-Ebene werden mit dem
# "permissions" Objekt festgelegt.
permissions:
# Unter "public" werden die Zugriffsrechte für die Öffentlichkeit
# definiert.
public:
# "methods" führt die HTTP-Methoden auf, die erlaubt sind
methods:
# "get: true" bedeutet hier, dass jeder die Daten lesen darf
get: true
# "post", also Einträge erstellen, "put" = Bearbeiten und
# "delete" = löschen darf die Öffentlichkeit nicht.
post: false
put: false
delete: false
# Ist "validProjections" definiert, sind auch nur genau die
# aufgelisteten Projektionen erlaubt, welche zwingend mit dem
# GET-Parameter "projection=..." ausgewählt werden müssen.
validProjections:
- list
- details
# Der Key "user" steht für ALLE Benutzer die dem Projekt
# zugeordnet sind.
# D.h. eine feinere Abstufung auf Benutzerebene ist mit dem
# Key "user" allein nicht möglich.
# Für eine feinere Abstufung können nachgelagerte Hooks
# dienen oder die Verwendung von zugeordneten benutzerdefinierten
# "permissions" (siehe meta Objekt).
user:
methods:
get: true
post: true
put: true
delete: true
# Fehlt "validProjections", sind automatisch alle Projektionen
# erlaubt, wobei hier auch der GET-Parameter "projection="
# weggelassen werden darf und somit alle Felder in der Ausgabe
# zu finden sind.
# Folgende Brechtigung wird angewandt, wenn der Zugriff über
# den GET-Parameter "token=" oder die Header-Anweisung "token: "
# angefragt wird.
# "token" ist dabei die Markierung, dass es sich um einen Token
# handelt und "${TOKEN}" ist der benutzerdefinierte Token selbst.
# Dieser wird hier über eine Umgebungsvariable "TOKEN" injiziert,
# die in "config.yml.env" definiert werden kann mit "TOKEN=...".
token:${TOKEN}:
methods:
get: true
post: true
put: true
delete: true
# Alle Berechtigungs-Namen, die nicht "public", "user" oder "token:..."
# heißen, sind benutzerdefinierte Berechtigungen, die Benutzern
# zugeordnet werden können.
# Eine mögliche Auflistung um Vorschläge im tibi-admin anzubieten,
# werden im Top-Level meta-Objekt der "config.yml" unter "permissions"
# definiert.
pages:
methods:
get: true
post: true
put: true
delete: true
# Projektionen der Daten werden via GET-Parameter "projection=..."
# referenziert.
# "projections" is ein Objekt, dass die Namen der Projektionen
# als Key führt.
projections:
# dashboard = name der Projektion
dashboard:
# "select" definiert als Keys die Felder, die beim Abruf
# dieser Projektion in den Ausgabe-Daten enthalten sind.
# Felder werden über die Punkt-Notation referenziert.
select:
# keine auflistung von feldern, da alle felder ausgewählt werden
details:
# Alternativ kann "select" auch Auschlussregeln definieren.
# Eine Mischung von Inkludieren und Auschluss ist NICHT
# möglich.
select:
file: 0
list:
select:
file: 1
alt: 1
hooks:
# Hooks für die Methode "get"
#get:
# "read"-Schritt wird ausgeführt, bevor die Daten von der Datenbank
# gelesen werden.
#read:
#"type" ist derzeit immer "javascript"
# type: javascript
#"file" zeigt auf die Datei mit dem Javascript-Code relativ zum
#Ordner der "config.yml" Datei.
# file: hooks/democol/get_read.js
#"return"-Schritt wird ausgeführt, bevor die gelesenen Daten über
#HTTP übertragen werden.
#return:
# type: javascript
# file: hooks/democol/get_return.js
# Hooks für die Methode "post"
post:
# "bind" wird ausgeführt, bevor die übertragenen Daten in eine
# Objekt-Struktur umgewandelt werden.
# Der tibi-server erwarten nach diesem Schritt gültige JSON-Daten,
# d.h. sollte es möglich gemacht werden, dass andere Daten übertragen
# werden, sind diese in diesem Hook abzufangen und zu verarbeiten.
#bind:
# type: javascript
# file: hooks/democol/post_bind.js
# "validate" wird ausgeführt, bevor die Daten validiert werden.
#validate:
# type: javascript
# file: hooks/democol/post_validate.js
# "create" wird ausgeführt, bevor das Objekt/Dokument in der Datenbank
# angelegt wird.
#create:
# type: javascript
# file: hooks/democol/post_create.js
# "return" wird ausgeführt, bevor die Serverantwort über HTTP
# übertragen wird.
return:
type: javascript
file: hooks/clear_cache.js
put:
#bind:
# type: javascript
# file: hooks/democol/put_bind.js
#validate:
# type: javascript
# file: hooks/democol/put_validate.js
# "bind" und "validate" habe die gleiche Bedeutung wie Hooks der
# Methode "post".
# "update" wird ausgeführt bevor das Objekt in der Datenbank
# aktualisiert wird.
#update:
# type: javascript
# file: hooks/democol/put_update.js
# "return" wird auch hier vor der Serverantwort ausgeführt.
return:
type: javascript
file: hooks/clear_cache.js
imageFilter:
xs:
- fit: true
height: 90
width: 90
resampling: lanczos
quality: 60
s:
- fit: true
height: 300
width: 300
resampling: lanczos
quality: 60
m:
- fit: true
height: 600
width: 600
resampling: lanczos
quality: 60
l:
- fit: true
height: 1200
width: 1200
resampling: lanczos
quality: 60
xl:
- fit: true
height: 2000
width: 2000
resampling: lanczos
quality: 60
imageFilter: !include fields/imageFilter.yml
# "fields" stellen die Eigentliche Struktur der Kollektion dar.
# "fields" ist als Array angelegt um eine Standard-Sortierung
# im tibi-admin vorzugeben.
fields:
- name: file
type: file
meta:
label:
de: Datei
en: File
# Das Einbinden von Feldern über extra Dateien bietet sich nur
# an, wenn das jeweilige Feld mehrfach von dieser oder anderen
# Kollektionen verwendet wird.
# Auf die möglichen Definitionen wird im Kapitel "fields"
# eingegangen.
- !include fields/file.yml
- name: alt
type: string
@@ -179,14 +252,11 @@ fields:
de: Der Titel wird angezeigt, wenn die Datei geladen wird.
en: The title is displayed when the file is loaded.
- name: sort
type: number
- name: category
type: string
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.
de: Kategorie
en: Category
- !include fields/manualSort.yml

View File

@@ -87,8 +87,12 @@ fields:
- name: type
type: string
meta:
label: Modultyp
helperText: "Wählen Sie den Typ des Moduls aus."
label:
de: Modultyp
en: Module Type
helperText:
de: "Wählen Sie den Typ des Moduls aus."
en: "Choose the type of the module."
widget: select
choices:
- name: { de: "Formular", en: "Form" }

View File

@@ -4,10 +4,6 @@ uploadPath: ../media/navigation
meta:
label: "Navigation"
muiIcon: navigation
allowExportAll: true
backup:
active: true
collectionName: backups
views:
- type: simpleList
mediaQuery: "(max-width:599px)"
@@ -17,7 +13,6 @@ meta:
mediaQuery: "(min-width:600px)"
columns:
- source: tree
name: Navigationsbaum
permissions:
public:
@@ -32,15 +27,60 @@ permissions:
post: false
put: true
delete: false
hooks:
post:
return:
type: javascript
file: hooks/clear_cache.js
put:
return:
type: javascript
file: hooks/clear_cache.js
x-endpoint: &endpoint
name: endpoint
type: boolean
meta:
defaultValue:
eval: 1 == 1
label: Endpunkt
x-elemente: &elemente
name: elements
type: object[]
meta:
label:
de: Elemente
en: elements
folding:
previewUnfolded: name
previewFolded: name
x-name: &name
name: name
type: string
meta:
label:
de: Name
en: name
helperText:
de: Dieser Name wird zur Anzeige in der Navigation verwendet.
en: This name is used for display in the navigation.
x-page: &seite
name: page
type: string
meta:
label:
de: Seite
en: page
widget: select
dependsOn:
eval: |
(function(){
if($parent.endpoint == undefined) return true;
return $parent.endpoint
})()
choices:
endpoint: content
params:
sort: path
projection: navigation
mapping:
id: id
name: path
fields:
- name: tree
@@ -48,7 +88,9 @@ fields:
meta:
label: Baum
widget: select
helperText: Die Servicenavigation sollte Seiten wie bspw. die Datneschutzerklärung oder das Impressum umfassen.
helperText:
de: Die Servicenavigation sollte Seiten wie bspw. die Datneschutzerklärung oder das Impressum umfassen.
en: The service navigation should include pages such as the data protection declaration or the imprint.
choices:
- id: 0
name:
@@ -59,38 +101,37 @@ fields:
de: Servicenavigation
en: service navigation
- name: pages
type: object[]
meta:
label:
de: Seiten
en: pages
folding:
previewUnfolded: name
previewFolded: name
widget: containerLessObjectArray
- <<: *elemente
subFields:
- name: name
type: string
- *endpoint
- *name
- *seite
- name: image
type: file
meta:
label:
de: Name
en: name
helperText: Dieser Name wird zur Anzeige in der Navigation verwendet.
label: Bild
dependsOn:
eval: |
(function(){
if($parent.endpoint == undefined) return false;
return !$parent.endpoint
})()
- name: page
type: string
- name: elements
type: object[]
meta:
label:
de: Seite
en: page
widget: select
choices:
endpoint: page
params:
sort: path
projection: navigation
mapping:
id: id
name: path
de: Elemente
en: elements
dependsOn:
eval: |
(function(){
if($parent.endpoint == undefined) return false;
return !$parent.endpoint
})()
folding:
previewUnfolded: name
previewFolded: name
subFields:
- *name
- *seite