inital setup

This commit is contained in:
2023-07-13 13:14:19 +00:00
parent 8a0467f821
commit 14b7979314
525 changed files with 1176 additions and 2041 deletions

View File

@@ -1,12 +0,0 @@
# Ordnerpfade, die über den tibi-server direkt erreichbar seien sollen,
# können über den "path" relativ zur "config.yml" definiert werden.
# Durch die "name"-Definition werden diese Pfade eindeutig unterschieden.
# Für folgende Beispielangaben bildet sich folgende URL:
#
# TIBI-SERVER-URL/api/v1/_/NAMESPACE/_/assets/_dist_/
#
# Jeder Zugriff wird intern umgeleitet auf ../frontend/_dist_/
# (relativ zur "config.yml").
# Es ist ausschließlich ein unbeschränkter Lesezugriff (GET-Methode) möglich.
name: _dist_
path: ../frontend/_dist_

View File

@@ -1,215 +0,0 @@
# Der Name der Kollektion wird in der Rest-API-URL verwendet, z.B.
# /_/demo/democol
name: democol
# Enthält die Kollektion Felder vom Typ "file", so werden die
# hochgeladenen Dateien unter dem Ordner abgelegt, der mit
# "uploadPath" bestimmt wird.
uploadPath: ../media/democol
# "fields" stellen die Eigentliche Struktur der Kollektion dar.
# "fields" ist als Array angelegt um eine Standard-Sortierung
# im tibi-admin vorzugeben.
fields:
# 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/title.yml
- !include fields/type.yml
- !include fields/date.yml
- !include fields/content.yml
- !include fields/info.yml
# Neben der Definition der Indexe innerhalbd des Feld-Objektes selbst,
# ist die Index-Definition global für die Kollektion auch hier möglich.
# Diese Definition ist z.B. für zusammengesetzte Index-Typen notwendig.
# Außerdem sind hier feinere Einstellungen für den Index möglich.
# Mehr dazu im "indexes" Kapitel
# indexes:
# - !include democol/textindex.yml
# Standardsprache für Text-Index in der Datenbank
defaultLanguage: de
# "hooks" definieren die Algorithmen, die Daten und Abläufe zu bestimmten
# HTTP-Methoden und Schritten der API manipulieren können.
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/democol/post_return.js
# Hooks für die Methode "put"
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/democol/put_return.js
# Hooks für die Methode "delete"
delete:
# Der "delete"-Hook wird vor dem eigentlichen Löschen ausgeführt
delete:
type: javascript
file: hooks/democol/delete_delete.js
# "return"-Hook kann ebenso hier die Serverantwort manipulieren
return:
type: javascript
file: hooks/democol/delete_return.js
# Projektionen der Daten werden via GET-Parameter "projection=..."
# referenziert.
# "projections" is ein Objekt, dass die Namen der Projektionen
# als Key führt.
projections:
# "list" = Name der Projektion
list:
# "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:
title: 1
date: 1
# refenziert das "subField" "author" unterhalb von "meta"
meta.author: 1
details:
# Alternativ kann "select" auch Auschlussregeln definieren.
# Eine Mischung von Inkludieren und Auschluss ist NICHT
# möglich.
select:
comment: 0
full:
# Ein leeres "select" Objekt beschränkt die Ausgabe der
# Daten nicht und ist Standard, wenn der "projection="
# Parameter nicht verwendet wurde.
select:
# 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: false
put: false
delete: false
# 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
# "imageFilter" definieren Filter, die Bilder bearbeiten, wie
# z.B. Verkleinerung.
# Mögliche Angaben werden im seperaten Kapitel behandelt.
imageFilter: !include democol/imageFilter.yml
# Wie auch in der Top-Level-Konfig "config.yml" ist auch hier ein
# "meta" Objekt möglich und nötig für die Konfiguration des
# tibi-admin.
# Mögliche Angaben werden im seperaten Kapitel behandelt.
meta: !include democol/meta.yml

View File

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

View File

@@ -1,112 +0,0 @@
# Ein Label für tibi-admin wird mehrsprachig folgendermaßen definiert
label:
de: Demo-Kolletion
en: Demo-Collection
# Jede Kolletion kann ein eigenes Icon aus mdijs bekommen.
muiIcon: web
# Die Standardsortierung bei ersten Aufruf der Kollektion.
defaultSort:
# Nach welchem Feld soll sortiert werden?
field: updatedTime
# ASC für aufsteigend oder DESC für absteigend
order: DESC
# Ist ein Javascript Message-Object-Empfänger implementiert, der empfangene
# Daten als Vorschau rendern kann, so ist dieser hier zu definieren.
# Implementierungshinweise zu einem Solchen gibt es später.
previewUrl: https://demo.testversion.online/preview
# Aus den definierten "imageFilter"-Angaben kann ein Filter für die
# Ausgabe der Thunbnails in der Admin-Ansicht ausgewählt werden.
defaultImageFilter: s
# Jede Kollektion kann über media-Querys mit mehreren Ansichten veknüpft werden.
# Mögliche Ansichten und die dazugehörigen CSS-Queries sind hier zu defineren.
views:
# Natürlich können die Angaben auch ausgelagert und mehrfach verwendet werden.
# Die möglichen Angaben werden im Kapitel "views" gezeigt.
- !include simpleList.yml
- !include table.yml
# Wird eine Kollektion als eine Gesamtliste schnell unübersichtlich, hild die
# Definition von "subNavigation".
# Die meisten Angaben sind aus obiger Beschreibung den meta-Objektes bekannt.
# Es wird hier nur auf die zusätzlichen Angaben eingegangen.
subNavigation:
- # Jede Unternavigation braucht einen eindeutigen Namen um diese später
# in z.B. Javascript-Code wieder erkennen zu können.
name: pages
# Die Angabe des "label" ist optional. Wird sie nicht angegeben, wird
# wird diese Unternavigation nicht in der Navigation angezeigt.
# Ohne "label" kann die Unternavigation aber weiterhin für die Referenzierung
# z.B. in der Mediathek-Ansicht des ContentBuilders verwendet werden.
label:
de: Seiten
en: Pages
muiIcon: page-layout-body
defaultSort:
field: titel
order: ASC
# Standardmäßig wird man beim Klick auf einen Eintrag der Kollektion
# (z.B. Zeile in der Tabelle) direkt zum Editieren des Datensatzes weitergeleitet.
# Möchte man das nicht, so kann hier ein alternatives Verhalten definiert werden.
# Mögliche Werte sind:
# - "edit" (Standard)
# - "view" (Anzeigen des Datensatzes)
# - Objekt mit "eval"-Attribut
#
# Beim Objekt mit "eval"-Attribut wird der Code mit dem Javascript-Kontext für
# Kollektionen im tibi-admin ausgeführt. Das Ergebnis kann hierbei wieder "edit"
# oder "view" sein.
# Außerdem ist es möglich, eine eigene Funktion zu definieren, die den Datensatz
# als Parameter erhält. Diese Funktion wird dann für den jweiligen Datensatz
# ausgeführt, auf den geklickt wurde. Mehr dazu unter dem Widget "ContentBuilder".
defaultCallback: view
views:
- !include simpleList.yml
- !include table.yml
# Um mehr Übersicht zu bekommen können zum Einen andere "views" und "defaultSort"
# genutzt werden. Es kann aber auch eine Einschränkung der Daten über eine
# Vorfilterung via "filter" geben. "filter" ist ein Objekt mit MongoDB-Filterangaben.
# siehe: https://www.mongodb.com/docs/compass/current/query/filter/
filter:
type: page
- name: news
label:
de: Neuigkeiten
en: News
muiIcon: newspaper
defaultSort:
field: date
order: DESC
defaultCallback: edit
views:
- !include simpleList.yml
- !include table.yml
filter:
type: news
# Standardmäßig werden im Formular zu Eingabe der Daten alle Felder von "fields"
# untereinander angeordnet.
# Um diese Anordnung in Tabs zu strukturieren, ist die Verwendung von "tablist"
# vorgesehen.
# Die Definition befindet sich in einem gesonderten Kapitel
tablist: !include tablist.yml
# OpenAPI-Spezifikation für die API-Endpunkte der Kollektion
openapi:
get:
summary:
en: list all datasets of democol
de: listet alle Datensätze der Kollektion democol auf
description:
en: list all datasets of democol with pagination and/or filtering
de: listet alle Datensätze der Kollektion democol mit Paginierung und/oder Filterung

View File

@@ -1,19 +0,0 @@
# "type" legt den Typ des Views fest.
type: simpleList
# Die Auswahl erfolgt über folgende "mediaQuery".
# (hier also bis maximal 599px Fensterbreite)
mediaQuery: "(max-width:599px)"
# 3 Blöcke können in der simpleList verwendet werden.
# Haupttext "primaryText" und optional 2 weitere Angaben über
# "secondaryText" und "tertiaryText".
# Die Angabe des jeweiligen Feldes erfolgt als String oder
# Objekt mit der "source"-Eigenschaft.
# Das Feld selbst wird in Punkt-Notation angegeben.
# Die Darstellung selbst ist abhängig von der Feld-Konfiguration
# selbst, die unter fields in der Kollektions-Konfiguration
# stattfindet.
primaryText: title
secondaryText:
source: date
tertiaryText: meta.author

View File

@@ -1,14 +0,0 @@
type: table
mediaQuery: "(min-width:600px)"
columns:
- source: updateTime
label:
de: letztes Update
en: last update
type: date
- source: title
filter: true
- source: date
filter: true
- source: type
filter: true

View File

@@ -1,31 +0,0 @@
# Hier wird der initial zu öffnende Tab festgelegt.
# Ist dieser nicht festgelegt, wird automatisch der erste Tab
# aus der "tabs" Liste gewaählt.
activeTab: general
# "tabs" ist die eigentliche Liste
tabs:
- # Jeder Tab braucht einen Namen, über den er refereziert
# werden kann.
name: general
# Die übliche Labelangabe kann auch hier mehrpsrachig erfolgen.
label:
de: Allgemein
en: General
# Welche Felder dieser Tab anzeigen soll, wird über "subFields"
# beschrieben.
subFields:
- source: type
- source: title
- source: date
- name: content
label:
de: Inhalt
en: Content
subFields:
- source: content
- name: info
label:
de: Informationen
en: Information
subFields:
- source: info

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,32 +0,0 @@
name: info
type: object
meta:
label:
de: Info
en: Info
subFields:
- name: author
type: string
meta:
label:
de: Autor
en: Author
- 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,8 +0,0 @@
name: title
type: string
meta:
label:
de: Titel
en: Title
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

View File

@@ -1,103 +0,0 @@
# Der Name der Kollektion ist beliebig, aber wird in unserem
# Beispiel vom ContentBuilder als "medialib" referenziert.
name: medialib
uploadPath: ../media/medialib
fields:
- !include fields/title.yml
# Ein Feld vom Typ "file" wird für die Mediathek natürlich
# benötigt.
- name: file
type: file
meta:
label:
de: Datei
en: File
permissions:
public:
methods:
get: true
post: false
put: false
delete: false
user:
methods:
get: true
post: true
put: true
delete: true
meta:
label:
de: Medienbibliothek
en: Media Library
muiIcon: multimedia
defaultSort:
field: title
order: ASC
# "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
# Wird unter "image-/file-/videoSelect" im ContentBuilder Feld kein
# "subNavigation" Index definiert, werden auch folgende "views"
# verwendet.
views:
- type: table
mediaQuery: "(min-width: 0px)"
columns:
- source: updateTime
label: letztes Update
type: datetime
- source: title
filter: true
- source: file
# 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: table
mediaQuery: "(min-width: 0px)"
columns:
- source: title
filter: true
- source: file
# 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
openapi:
disabled: true

View File

@@ -1,58 +1,11 @@
# Der Namespace legt die eigentliche Projektbezeichnung und den Datenbankkontext fest.
# Er sollte nach Projektinitialisierung auf dem tibi-server nicht mehr angepasst werden.
# In den Projekteinstellungen im tibi-server kann der Namespace durch einen Datenbankeintrag
# überschrieben werden.
# Über die Bezeichnung des Namespace plus einen Prefix der in der globalen Server-Konfig
# hinterlegt ist, definiert sich der Datenbank-Name innerhalb der MongoDB.
namespace: demo
namespace: fontis
# Das "meta"-Objekt ist frei definierbar, wird aber vom tibi-admin in spezieller Form erwartet.
# Mögliche Angaben, die der tibi-admin versteht, sind hier mit aufgeführt.
meta:
# OpenAPI Spezifikationen
openapi:
#info:
# title: Demo API
# version: 1.0.0
# description: Eine Demo-API für den tibi-server
servers:
- url: https://tibi-admin-server.code.testversion.online/api/v1/_/demo
description: code-server
# Pfad zu einer Bilddatei die als Projektbild im tibi-admin verwendet wird
imageUrl:
eval: "$projectBase + '_/assets/img/pic.jpg'"
collections: []
# Liste möglicher Berechtigungen, die Benutzern zugeordnet werden können
permissions:
- # Name der Berechtigung
name: news
# Label für die Anzeige im Admin
# (kann string oder object mit Sprachen als keys sein)
label:
de: Neuigkeiten
en: News
- name: pages
label:
de: Seiten
en: Pages
# "collections" ist eine Auflistung von Kollektions-Konfigurationen.
# Hier bietet sich eine Auslagerung und Einbindung via YAML-Tag "!include" an.
collections:
- !include collections/democol.yml
- !include collections/medialib.yml
# Dummy Kollektion für Hooks, die für serverseitiges Rendering benötigt werden
- !include collections/ssr.yml
# Unter "jobs" können Jobs definiert werden, die regelmäßig ausgeführt werden sollen.
jobs:
- !include jobs/demojob.yml
# Werden Dateien innerhalb vom tibi-admin benötigt, bietet es sich an diese über
# "assets"-Pfade erreichbar zu machen.
assets:
- !include assets/demoassets.yml
- name: img
path: img

View File

View File

@@ -1,14 +0,0 @@
# Jedem Job muss ein "cron" Eintrag zugeordnet werden, der die
# Ausführungszeitpunkte definiert.
# Das cron-Schema ist dem üblichen Linux cron-Schema nachempfunden.
cron: "*/10 * * * *"
# "type" des Jobs ist derzeit immer "javascript" mit der "file"-Referenz
# relativ zur "config.yml".
type: javascript
file: jobs/demojob.js
# Es können beliebige "meta"-Daten hinterlegt werden, die im Javascript
# des Jobs über "context.job.meta" abgerufen werden können.
meta:
name: Demo Job