backend & types

This commit is contained in:
2024-01-27 18:58:35 +00:00
parent 91bfa0864d
commit 0b4a474180
219 changed files with 5211 additions and 12325 deletions

View File

@@ -1,5 +0,0 @@
name: additionalData # Name des Eingabefelds.
type: object # Datentyp des Eingabefelds.
meta:
label: { de: "Zusätzliche Daten", en: "Additional Data" } # Feldlabel.
widget: jsonField # Verwendetes Widget.

View File

@@ -1,5 +0,0 @@
name: age # Name des Eingabefelds.
type: int # Datentyp des Eingabefelds.
meta:
label: { de: "Alter", en: "Age" } # Feldlabel.
widget: number # Verwendetes Widget.

View File

@@ -1,117 +0,0 @@
# Der Name des Feldes ist natürlich beliebig wählbar.
name: content
# "string" als Datentyp ist zwingend.
type: string
meta:
label:
de: Inhalt
en: content
# Die Bezeichnung des ContentBuilder-Widgets ist "contentbuilder".
widget: contentbuilder
# Die Anzeige des ContentBuilder im tibi-admin geschieht innerhalb
# eines iframes. Das ist notwendig, da der ContentBuilder eigene
# Styles mitbringet, die sich nicht mit den Styles des tibi-admin
# vermischen sollten.
# Via "baseHref" wird der <base>-Tag im iframe gesetzt.
# somit können alle relativen Pfade im ContentBuilder (z.B. Bilder)
# aufgelöst werden.
# Wie man hier sieht, ist die Angabe via "eval" mittels möglich.
# Der Kontext ist auf Feldebene, wie bei "dependsOn" und "defaultValue".
# Alternativ kann die Angabe auch direkt als String erfolgend.
# Dann natürlich ohne die Evaluierung der Variable "$projectBase", wie hier.
baseHref:
eval: $projectBase
# Sollen weitere CSS-Datei in das iframe geladen werden, können diese
# hier aufgelistet werden.
# Die Angabe kann direkt als Array erfolgen oder via "eval", dessen
# Code das Array der Strings mit den Dateipfaden zurückgibt.
# Auch zu beachten ist hier die relative Angabe. Da "baseHref" gesetzt
# ist, wird der Pfad relativ zu dieser Projekt-Basis innerhalb des
# tibi-server aufgelöst.
# Die Auslieferung der CSS-Dateien direkt über den tibi-server kann
# nur funktionieren, wenn "_dist_" in der "assets" Konfiguration der
# "config.yml" definiert ist.
cssHref:
- _/assets/_dist_/index.css
# Um eine Kollektion stellvertretend als Mediathek anzubinden, sind die
# Angaben unter "imageSelect", "fileSelect" und "videoSelect" zu tätigen.
# "imageSelect" betrifft die Einbindung von Bildern, "fileSelect" die
# Einbindung von Dateien, "videoSelect" die Einbindung von Videos.
imageSelect:
# Die Angabe "collection" ist zwingend. Hier wird die Kollektion
# definiert, die als Sammlung für die Bilder/Datei dient.
# Der Aufbau der Kollektion ist dabei frei, solange ein Upload-Feld
# für die Dateien existiert, welches die URL zur Datei zurückgibt.
collection: medialib
# Optional kann ein Filter und View für die Einbindung der Bilder/Dateien
# definiert werden. Dies geschieht über einen "subNavigation"
# Eintrag innerhalb des "meta.subNavigation" Arrays, der Kollektion
# (hier bei "medialib").
# Die Angabe hier ist die auszuwählende Navigation per Index des Arrays.
subNavigation: 0
fileSelect:
collection: medialib
subNavigation: 0
videoSelect:
collection: medialib
subNavigation: 0
# "customTags" des ContentBuilder können verwendet werden um die Einbindung
# von Modulen ins HTML zu ermöglichen.
# Die folgende Auflistung ist dabei ein Beispiel für ein Modul.
customTags:
- # Der Platzhalter wird 1:1 ins HTML übernommen und ist dabei frei
# definierbar.
# Die eigentliche Funktion eines Modul-Systems muss dann später
# im Frontend implementiert werden.
placeholder: "<my-module class='tibi-module' title='Titel' description='Beschreibung'>Mein Modul</my-module>"
# Die Benennung für die UI des ContentBuilder geschieht über die
# "label" Angabe, die mehrsprachig erfolgen kann.
label:
de: "Mein Modul"
en: "My Module"
# Um direkt Style-Angaben in das iframe des ContentBuilder zu übernehmen,
# werden diese hier angegeben.
# Natürlich ist auch hier wieder die Angabe via "eval" möglich.
# Nachfolgendes Beispiel erzeugt im ContentBuilder eine deutliche Darstellung
# des eingebundenen Moduls.
style: |
/*css*/
.is-builder {
max-width: 1200px;
margin: 0 auto;
}
.tibi-module {
padding: 10px;
border: 3px dashed #c4c4c4;
display: block;
text-align: center;
font-size: 14px;
color: black;
}
.tibi-module::before {
content: "\1F5BD ";
font-size: 16px;
color: black;
}
.tibi-module::after {
content: " title=\"" attr(title) "\" description=\"" attr(description) "\"";
font-size: 10px;
color: #555;
display: block;
padding-top: 5px;
}
/*!css*/

View File

@@ -1,57 +0,0 @@
# Der Name des Feldes wird in der Datenbank zum Objekt ebenso
# wie in der Ein- und Ausgabe über die API verwendet.
name: date
# Über "type" wird der Datentyp in der Datenbank festgelegt.
# Mögliche Typen sind weiter unten aufgelistet.
type: date
# Direkt am Feld kann eine Index-Definition erfolgen.
# Folgende mögliche Werte können ihn die Liste aufgenommen werden:
# "single" - Standard-Index für diese Feld
# "unique" - Das Feld muss einen eindeutigen Wert haben
# "text" - Alle "text"-Indexanganben aller Felder werden zu einem
# gemeinsamen Volltext-Index kombiniert
#
# Die Angabe des Volltextindex ist besser unter "collections.X.indexes"
# vorzunehmen.
index:
- single
# Jede Datenübertragung an des Server wird validiert, d.h. es werden
# keine Datentypen angenommen, die nicht zu "type" passen.
# Darüber hinaus kann via "validator" eine zusätzliche Validierung
# vorgenommen werden.
# Dazu gibt es ein extra Kapitel.
validator:
required: true
eval: new Date($this) > new Date()
# Und natürlich gibt es auch hier ein "meta" Objekt zur Steuerung
# des tibi-admin.
meta:
# Das "label" des Feldes wird als Label vor dem Widget verwendet.
label:
de: Titel
en: title
# Abgelkeitet vom "type" gibt es Standard-Widgets. für spezielle
# Aufgaben stehen aber eine Hand voll Widgets bereit, die später
# beschrieben werden.
widget: date
# Standardwerte für neue Enträge können entweder direkt angegeben
# werden oder via Javascript client-seitig generiert werden.
# In den Kontext injizierte Variablen werden später beschrieben.
defaultValue:
# Das Ergebnis von "eval" wird hier als Standardwert verwendet.
# (hier das aktuelle Datum)
eval: new Date()
# Sollen Felder abhängig von bestimmten Bedingungen ein- oder
# ausgeblendet werden, geschieht das über Anweisungen in "dependsOn".
dependsOn:
# Das Feld wird nur eingeblendet wenn der Wert von "type"
# (auf gleicher Ebene wie das Feld "date" selbst)
# gleich "news" ist.
eval: $parent?.type == "news"

View File

@@ -1,5 +0,0 @@
name: description # Name des Eingabefelds.
type: string # Datentyp des Eingabefelds.
meta:
label: { de: "Beschreibung", en: "Description" } # Feldlabel.
widget: richtext # Verwendetes Widget.

View File

@@ -1,60 +0,0 @@
name: paymentValueObj
type: object[]
meta:
label: Zeilen
widget: grid
metaElements:
- test1
- test2
direction: vertical
pathStep: #widget spezifisch, gibt dem objekt einen namen und ein zugehöriges icon, Zeilen und spalten sind hier bereits default (Oberste Objekt zeile verschachtelte objekt spalte mit zugehörigen icons)
title: "Zeile"
icon: viewSequentialOutline
folding:
previewFolded:
eval: $this.test
previewUnfolded:
eval: $this.test
subFields:
- name: test
type: string
meta:
label: test1
- name: test2
type: string
meta:
label: test2
- name: paymentValue
type: number
meta:
label: Überweisungswert1
- name: paymentValuee
type: number
meta:
label: Überweisungswert2
- name: paymentValueObj2
type: object[]
meta:
label: Spalten
direction: horizontal
widget: grid
metaElements:
- test1
- test2
subFields:
- name: test
type: string
meta:
label: test1
- name: test2
type: string
meta:
label: test2
- name: paymentValue
type: number
meta:
label: Überweisungswert1
- name: paymentValuee
type: number
meta:
label: Überweisungswert2

View File

@@ -1,32 +0,0 @@
name: paymentValues # Name des Eingabefelds.
type: object # Datentyp des Eingabefelds, in diesem Fall ein Objekt.
meta:
label: "Überweisungswerte" # Feldlabel.
widget: tabs # Verwendetes Widget. Die tabs Widget wird zur Organisation von komplexen Eingaben in Tab-Form verwendet.
subFields: # Liste der Unterfelder für jedes Tab.
- name: paymentValueObj # Name des Eingabefelds für das erste Tab.
type: object[] # Datentyp des Eingabefelds, in diesem Fall ein Array von Objekten.
meta:
label: Überweisungswerte1 # Tab-Label.
subFields: # Liste der Unterfelder für das Tab.
- name: paymentValue # Name des ersten Eingabefelds in diesem Tab.
type: number # Datentyp des Eingabefelds.
meta:
label: Überweisungswert1 # Feldlabel.
- name: paymentValuee # Name des zweiten Eingabefelds in diesem Tab.
type: number # Datentyp des Eingabefelds.
meta:
label: Überweisungswert2 # Feldlabel.
- name: paymentValueObj2 # Name des Eingabefelds für das zweite Tab.
type: object[] # Datentyp des Eingabefelds, in diesem Fall ein Array von Objekten.
meta:
label: Überweisungswerte2 # Tab-Label.
subFields: # Liste der Unterfelder für das Tab.
- name: paymentValue # Name des ersten Eingabefelds in diesem Tab.
type: number # Datentyp des Eingabefelds.
meta:
label: Überweisungswert1 # Feldlabel.
- name: paymentValuee # Name des zweiten Eingabefelds in diesem Tab.
type: number # Datentyp des Eingabefelds.
meta:
label: Überweisungswert2 # Feldlabel.

View File

@@ -1,23 +0,0 @@
name: gender # Name des Eingabefelds.
type: string # Datentyp des Eingabefelds.
meta:
label: { de: "Geschlecht", en: "Gender" } # Feldlabel.
widget: select # Verwendetes Widget.
choices: # Auswahlmöglichkeiten.
- name: "männlich" # Anzeigename der Auswahl.
id: "male" # Wert der Auswahl.
- name: "weiblich" # Anzeigename der Auswahl.
id: "female" # Wert der Auswahl.
chipStyle:
backgroundImage: "linear-gradient(black 33.3%, red 33.3%, red 66.6%, gold 66.6%);"
color: white
textShadow: 0px 0px 4px black
#alternative:
#choices:
#DEPRECATED - FOREIGNKEY STATTDESSEN!
#endpoint: content
#params:
#sort:
#mapping:
#id: id
#name: path

View File

@@ -1,20 +0,0 @@
name: image # Name des Eingabefelds.
type: string # Datentyp des Eingabefelds.
meta:
label: { de: "Bild", en: "Image" } # Feldlabel.
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: 1 # Bestimmt, welche Navigation für die Auswahl der ausgewählten Daten angezeigt wird.
#projection: xyz
#sort: "title"
render:
#alternativ zu raw und eval kann hier auch das attribut "defaultCollectionViews" auf true gesetzt werden, dabei werden dann die ausgewählten elemente in der in collection definierten collectionview angezeigt.
raw: true
eval: |
(function() {
var out = "";
out += "<div style=\"color: #999;\">" + $foreignEntry.title + "</div>";
return out;
})()

View File

@@ -1,51 +0,0 @@
name: info
type: object
meta:
label:
de: Info
en: Info
direction: horizontal # vertical oder horizontal
metaElements: # macht bestimmte Widgets im Zahnrad verfügbar und entfernt sie aus dem drop down
# alternaitv wären auch diese Angabenformen anstatt von tablist möglich:
#- author
#- source: author
tablist: # macht im Modal eine tabliste
tabs:
- name: authorInfos
label: Autorkram
subFields:
- source: author
- name: publishingInfos
label: Veröffentlichungskram
subFields:
- source: published
subFields:
- name: author
type: string
meta:
label:
de: Autor
en: Author
- name: published
type: date
meta:
label: Veröffentlicht
- name: tags
type: object[]
meta:
label:
de: Tags
en: Tags
subFields:
- name: name
type: string
meta:
label:
de: Name
en: Name
- name: color
type: string
meta:
label:
de: Farbe
en: Color

View File

@@ -1,5 +0,0 @@
name: isEmployed # Name des Eingabefelds.
type: boolean # Datentyp des Eingabefelds.
meta:
label: { de: "Angestellt?", en: "Employed?" } # Feldlabel.
widget: checkbox # Verwendetes Widget.

View File

@@ -1,5 +0,0 @@
name: profilePic # Name des Eingabefelds.
type: file # Datentyp des Eingabefelds.
meta:
label: { de: "Profilbild", en: "Profile Picture" } # Feldlabel.
widget: file # Verwendetes Widget.

View File

@@ -1,10 +0,0 @@
name: skills # Name des Eingabefelds.
type: string[] # Datentyp des Eingabefelds.
meta:
label: { de: "Fähigkeiten", en: "Skills" } # Feldlabel.
widget: checkboxArray # Verwendetes Widget.
choices: # Auswahlmöglichkeiten.
- name: "Kochen" # Anzeigename der Auswahl.
id: "cooking" # Wert der Auswahl.
- name: "Backen" # Anzeigename der Auswahl.
id: "baking" # Wert der Auswahl.

View File

@@ -1,11 +0,0 @@
name: tags # Name des Eingabefelds.
type: string[] # Datentyp des Eingabefelds.
meta:
label: { de: "Tags", en: "Tags" } # Feldlabel.
widget: chipArray # Verwendetes Widget.
choices: # Auswahlmöglichkeiten.
- name: "Tech" # Anzeigename der Auswahl.
id: "tech" # Wert der Auswahl.
- name: "Wissenschaft" # Anzeigename der Auswahl.
id: "science" # Wert der Auswahl.
autocomplete: true # Option für Autovervollständigung.

View File

@@ -1,11 +0,0 @@
name: title
type: string
meta:
label:
de: Titel
en: Title
inputProps:
multiline: true
placeholder: Ihr Titel
openapi:
example: Demo Titel

View File

@@ -1,16 +0,0 @@
name: type
type: string
meta:
label:
de: Typ
en: Type
widget: select
choices:
- name:
de: Standardseite
en: Standard page
id: page
- name:
de: News
en: News
id: news