docs in sub package

This commit is contained in:
Sebastian Frank 2023-02-21 14:59:14 +00:00
parent 010ee6baf1
commit 1841083039
58 changed files with 128 additions and 127 deletions

View File

@ -3,14 +3,6 @@ type: docker
name: default
steps:
- name: yarn install
image: node:18
pull: if-not-exists
environment:
FORCE_COLOR: "true"
commands:
- yarn install
##############################
# Build and deploy docs
##############################
@ -20,6 +12,8 @@ steps:
environment:
FORCE_COLOR: "true"
commands:
- cd docs
- yarn install
- yarn docpress:build
when:
branch: [master]
@ -48,6 +42,14 @@ steps:
##############################
# Demo project
##############################
- name: yarn install
image: node:18
pull: if-not-exists
environment:
FORCE_COLOR: "true"
commands:
- yarn install
- name: modify config
image: alpine/git
commands:

4
.gitignore vendored
View File

@ -1,11 +1,11 @@
_docpress
docs/_docpress
docs/node_modules
api/hooks/lib/app.server*
node_modules
media
tmp
_temp
frontend/dist
docs/node_modules
yarn-error.log
.yarn/*
!.yarn/cache

View File

@ -1,21 +0,0 @@
# TibiCMS Dokumentation
![TibiCMS Aufbau](./docs/tibi-aufbau.svg)
## Einleitung
*TibiCMS* ist der Sammelbegriff für die Komponenten *tibi-server* und *tibi-admin*, welche einen Rest-API Server und eine Administrationsoberfläche zur Verfügung stellen. Auf Basis dieser beiden Komponenten und der *MongoDB* als Abhängigkeit lassen sich WebCMS Anwendungen abbilden.
Das CMS ist multi-mandanten-fähig, d.h. es kann mehrer Projekte mit unterschiedlichen Zugriffsbeschränkungen verwalten.
### tibi-server
Der Server selbst kommt ohne grafische Oberfläche oder WebUI. Er ist ausschließlich nach außen über eine Rest-API erreichbar.
Als einzige Abhängigkeit ist eine *MongoDB* zu erwähnen. Da der Server in Go geschrieben ist, sind keine externen Bibliotheken notwendig. Er lässt sich daher prima via Docker-Container verteilen.
### tibi-admin
Die Administrationsoberfläche ist wie jeder andere Service, der die Rest-API des Servers nutzt, nur ein Frontend. *tibi-admin* läuft vollständig im Browser und benötigt nur einen Webserver, der statischen Content ausliefert.
Die Version des *tibi-admin* sollte synchron zur *tibi-server* Version gehalten werden, damit alle Datentypen bedient werden können.

View File

@ -10,7 +10,7 @@ services:
- ./:/data
- ./tmp:/tmp
- ./tmp/nonexistent:/nonexistent
working_dir: /data
working_dir: /data/docs
command: sh -c "yarn install && yarn docpress:serve"
expose:
- 3000

View File

@ -1,50 +1,21 @@
- [TibiCMS](../README.md)
- [Begriffe](begriffe.md)
- Servergrundlagen
- [Konfiguration](servergrundlagen/konfiguration.md)
- [Entitäten](servergrundlagen/entitaeten.md)
- RestAPI Endpunkte
- [/login](restapi/login.md)
- [/user](restapi/user.md)
- [/project](restapi/project.md)
- [/_/NS/COLLECTION](restapi/collection.md)
- [/_/NS/_/assets/ASSETSNAME](restapi/assets.md)
- Projekt Konfiguration
- [Ordnerstruktur](projektkonfig/ordnerstruktur.md)
- [config.yml](projektkonfig/config.yml.md)
- [collections](projektkonfig/collections.md)
- [fields](projektkonfig/collections/fields.md)
- [Datentypen](projektkonfig/collections/fields/datentypen.md)
- [Admin Widgets](projektkonfig/collections/fields/widgets.md)
- [· ContentBuilder](projektkonfig/collections/fields/widgets/contentbuilder.md)
- [indexes](projektkonfig/collections/indexes.md)
- [hooks](projektkonfig/collections/hooks.md)
- [imageFilter](projektkonfig/collections/imageFilter.md)
- [meta](projektkonfig/collections/meta.md)
- [jobs](projektkonfig/jobs.md)
- [assets](projektkonfig/assets.md)
- Admin Javascript Kontext
- [Allgemeines](admin-javascript-kontext/allgemeines.md)
- [collection.meta..eval](admin-javascript-kontext/collection.meta..eval.md)
- [field.meta..eval](admin-javascript-kontext/field.meta..eval.md)
- Server Javascript Kontext
- [Allgmeines](server-javascript-kontext/allgemeines.md)
- [hook](server-javascript-kontext/hook.md)
- [job](server-javascript-kontext/job.md)
- [validator](server-javascript-kontext/validator.md)
- Packages
- [user](server-javascript-kontext/packages/user.md)
- [response](server-javascript-kontext/packages/response.md)
- [cookie](server-javascript-kontext/packages/cookie.md)
- [db](server-javascript-kontext/packages/db.md)
- [http](server-javascript-kontext/packages/http.md)
- [smtp](server-javascript-kontext/packages/smtp.md)
- [fs](server-javascript-kontext/packages/fs.md)
- [tpl](server-javascript-kontext/packages/tpl.md)
- [jwt](server-javascript-kontext/packages/jwt.md)
- [image](server-javascript-kontext/packages/image.md)
- [bcrypt](server-javascript-kontext/packages/bcrypt.md)
- [xml](server-javascript-kontext/packages/xml.md)
- [charset](server-javascript-kontext/packages/charset.md)
- [pdf](server-javascript-kontext/packages/pdf.md)
- [debug](server-javascript-kontext/packages/debug.md)
# TibiCMS Dokumentation
![TibiCMS Aufbau](./md/tibi-aufbau.svg)
## Einleitung
_TibiCMS_ ist der Sammelbegriff für die Komponenten _tibi-server_ und _tibi-admin_, welche einen Rest-API Server und eine Administrationsoberfläche zur Verfügung stellen. Auf Basis dieser beiden Komponenten und der _MongoDB_ als Abhängigkeit lassen sich WebCMS Anwendungen abbilden.
Das CMS ist multi-mandanten-fähig, d.h. es kann mehrer Projekte mit unterschiedlichen Zugriffsbeschränkungen verwalten.
### tibi-server
Der Server selbst kommt ohne grafische Oberfläche oder WebUI. Er ist ausschließlich nach außen über eine Rest-API erreichbar.
Als einzige Abhängigkeit ist eine _MongoDB_ zu erwähnen. Da der Server in Go geschrieben ist, sind keine externen Bibliotheken notwendig. Er lässt sich daher prima via Docker-Container verteilen.
### tibi-admin
Die Administrationsoberfläche ist wie jeder andere Service, der die Rest-API des Servers nutzt, nur ein Frontend. _tibi-admin_ läuft vollständig im Browser und benötigt nur einen Webserver, der statischen Content ausliefert.
Die Version des _tibi-admin_ sollte synchron zur _tibi-server_ Version gehalten werden, damit alle Datentypen bedient werden können.

View File

@ -1,9 +1,9 @@
{
"docs": "./",
"docs": "md",
"markdown": {
"plugins": {
"code-include": {}
}
},
"css": ["./docpress.css", "./github-dark-dimmed.css"]
"css": ["md/docpress.css", "md/github-dark-dimmed.css"]
}

50
docs/md/README.md Normal file
View File

@ -0,0 +1,50 @@
- [TibiCMS](../README.md)
- [Begriffe](begriffe.md)
- Servergrundlagen
- [Konfiguration](servergrundlagen/konfiguration.md)
- [Entitäten](servergrundlagen/entitaeten.md)
- RestAPI Endpunkte
- [/login](restapi/login.md)
- [/user](restapi/user.md)
- [/project](restapi/project.md)
- [/_/NS/COLLECTION](restapi/collection.md)
- [/_/NS/_/assets/ASSETSNAME](restapi/assets.md)
- Projekt Konfiguration
- [Ordnerstruktur](projektkonfig/ordnerstruktur.md)
- [config.yml](projektkonfig/config.yml.md)
- [collections](projektkonfig/collections.md)
- [fields](projektkonfig/collections/fields.md)
- [Datentypen](projektkonfig/collections/fields/datentypen.md)
- [Admin Widgets](projektkonfig/collections/fields/widgets.md)
- [· ContentBuilder](projektkonfig/collections/fields/widgets/contentbuilder.md)
- [indexes](projektkonfig/collections/indexes.md)
- [hooks](projektkonfig/collections/hooks.md)
- [imageFilter](projektkonfig/collections/imageFilter.md)
- [meta](projektkonfig/collections/meta.md)
- [jobs](projektkonfig/jobs.md)
- [assets](projektkonfig/assets.md)
- Admin Javascript Kontext
- [Allgemeines](admin-javascript-kontext/allgemeines.md)
- [collection.meta..eval](admin-javascript-kontext/collection.meta..eval.md)
- [field.meta..eval](admin-javascript-kontext/field.meta..eval.md)
- Server Javascript Kontext
- [Allgmeines](server-javascript-kontext/allgemeines.md)
- [hook](server-javascript-kontext/hook.md)
- [job](server-javascript-kontext/job.md)
- [validator](server-javascript-kontext/validator.md)
- Packages
- [user](server-javascript-kontext/packages/user.md)
- [response](server-javascript-kontext/packages/response.md)
- [cookie](server-javascript-kontext/packages/cookie.md)
- [db](server-javascript-kontext/packages/db.md)
- [http](server-javascript-kontext/packages/http.md)
- [smtp](server-javascript-kontext/packages/smtp.md)
- [fs](server-javascript-kontext/packages/fs.md)
- [tpl](server-javascript-kontext/packages/tpl.md)
- [jwt](server-javascript-kontext/packages/jwt.md)
- [image](server-javascript-kontext/packages/image.md)
- [bcrypt](server-javascript-kontext/packages/bcrypt.md)
- [xml](server-javascript-kontext/packages/xml.md)
- [charset](server-javascript-kontext/packages/charset.md)
- [pdf](server-javascript-kontext/packages/pdf.md)
- [debug](server-javascript-kontext/packages/debug.md)

View File

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 47 KiB

View File

@ -3,4 +3,4 @@
Folgende Angaben sind in der `assets`-Sektion der [config.yml](./config.yml.md) geführt als Liste möglich:
!!!include(api/assets/demoassets.yml)!!!
!!!include(../api/assets/demoassets.yml)!!!

View File

@ -6,7 +6,7 @@ Die Konfiguration einer Kollektion sollte zur besseren Übersicht innerhalb eine
Eine solche Datei hat folgenden Aufbau:
!!!include(api/collections/democol.yml)!!!
!!!include(../api/collections/democol.yml)!!!
### siehe

View File

@ -1,12 +1,12 @@
# fields
Felder im *tibi-server* müssen einen bestimmten Datentyp haben. Über den *tibi-admin* können die Felder über Widgets in unterschiedlichen Ausprägungen dargestellt werden (view-Widgets), bzw. dem Benutzer eine Eingabe abverlangen (input-Widgets).
Felder im _tibi-server_ müssen einen bestimmten Datentyp haben. Über den _tibi-admin_ können die Felder über Widgets in unterschiedlichen Ausprägungen dargestellt werden (view-Widgets), bzw. dem Benutzer eine Eingabe abverlangen (input-Widgets).
Es gibt grundlegende Angaben, die jedes Feld haben muss um vom *tibi-server* akzeptiert zu werden. Darüber hinaus kann auch jedes Feld ein `meta` Objekt haben, was dem *tibi-admin* mitteilt, wie er dieses Feld für Ausgabe und Eingabe behandel soll.
Es gibt grundlegende Angaben, die jedes Feld haben muss um vom _tibi-server_ akzeptiert zu werden. Darüber hinaus kann auch jedes Feld ein `meta` Objekt haben, was dem _tibi-admin_ mitteilt, wie er dieses Feld für Ausgabe und Eingabe behandel soll.
Zunächst folgt der grundlegende Aufbau des Feld-Objektes:
!!!include(api/collections/fields/date.yml)!!!
!!!include(../api/collections/fields/date.yml)!!!
## validator Objekt
@ -16,36 +16,36 @@ Zunächst folgt der grundlegende Aufbau des Feld-Objektes:
Wie im Beispiel von **fields/date.yml** unter `validator` zu sehen ist, wird dort ein Datum nach dem aktuellen erwartet. Wie der Validator sich auf die UI auswirkt, ist im obigen Video zu sehen.
Das `validator` Objekt wird *tibi-server* seitig genutzt um die Daten zu validieren. Da das `validator` Objekt dem *tibi-admin* ebenso zur Verfügung steht, kann vorab eine client-seitige Validierung zusätzlich durchgeführt werden.
Das `validator` Objekt wird _tibi-server_ seitig genutzt um die Daten zu validieren. Da das `validator` Objekt dem _tibi-admin_ ebenso zur Verfügung steht, kann vorab eine client-seitige Validierung zusätzlich durchgeführt werden.
Attribute des Objektes:
| Attribut | Datentyp | Beschreibung |
| --- | --- | --- |
| `required` | boolean | wenn `true`, dann ist zwingend eine Eingabe zu diesem Feld nötig |
| `allowZero` | boolean | in Kombination mit `required: true`, wenn `true`, dann ist der jeweilige "Null"-Wert des Datentyps erlaubt<br><br>z.B. `type: string` erlaubt den leeren String und `type: number` erlaubt `0` |
| `eval` | string | Javascript-Code der zu true evaluieren muss um den Wert des Feldes als gültig zu definieren |
| Attribut | Datentyp | Beschreibung |
| ----------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `required` | boolean | wenn `true`, dann ist zwingend eine Eingabe zu diesem Feld nötig |
| `allowZero` | boolean | in Kombination mit `required: true`, wenn `true`, dann ist der jeweilige "Null"-Wert des Datentyps erlaubt<br><br>z.B. `type: string` erlaubt den leeren String und `type: number` erlaubt `0` |
| `eval` | string | Javascript-Code der zu true evaluieren muss um den Wert des Feldes als gültig zu definieren |
### eval-Attribut
Der Javascript-Code in diesem Attribut kann folgende Rückgabe-Werte haben:
| Wert | Bedeutung |
| --- | --- |
| `true` | Der Wert des Feldes ist gültig |
| `false` | Der Wert des Feldes ist ungültig |
| Wert | Bedeutung |
| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `true` | Der Wert des Feldes ist gültig |
| `false` | Der Wert des Feldes ist ungültig |
| `"Text"` | Wird ein String zurückgegeben ist, wird der Wert es Feldes ebenso als ungültig erachtet und der String selbst ist eine benutzerdefinierte Fehlermeldung, die in der Serverantwort gelesen werden kann. |
Da der `eval` Code serverseitig immer ausgeführt wird und ein Fehlschlag zwangsläufig zum Abbruch der Serveraktion führt, ist es wichtig, dass der [serverseitige Javascript-Kontext](./../../server-javascript-kontext/validator.md) berücksichtigt wird.
Optional kann der Code auch zusätzlich über eine Lauffähigkeit ohne Fehler (z.B. keine Verwendung nicht vorhandender Kontext-Variablen oder Verwendung von `try ... catch`) im *tibi-admin* verfügen. Das hat den Vorteil, dass eine Vorab-Validierung stattfindet, bevor der Datensatz an der Server gesendet wird.
Optional kann der Code auch zusätzlich über eine Lauffähigkeit ohne Fehler (z.B. keine Verwendung nicht vorhandender Kontext-Variablen oder Verwendung von `try ... catch`) im _tibi-admin_ verfügen. Das hat den Vorteil, dass eine Vorab-Validierung stattfindet, bevor der Datensatz an der Server gesendet wird.
Sollte der `eval` Code im *tibi-admin* nicht lauffähig sein (nicht abgefangene Exception), wird der Validator clientseitig ingoriert und nur die serverseitige Prüfung beeinflusst die Aktion.
Sollte der `eval` Code im _tibi-admin_ nicht lauffähig sein (nicht abgefangene Exception), wird der Validator clientseitig ingoriert und nur die serverseitige Prüfung beeinflusst die Aktion.
#### siehe
- [Server Javascript Kontext](./../../server-javascript-kontext/allgemeines.md)
- [Validator Javascript Kontext](./../../server-javascript-kontext/validator.md)
- [Server Javascript Kontext](./../../server-javascript-kontext/allgemeines.md)
- [Validator Javascript Kontext](./../../server-javascript-kontext/validator.md)
## dependsOn
@ -66,11 +66,11 @@ fields:
en: Type
widget: select
choices:
- name:
- name:
de: Standardseite
en: Standard page
id: page
- name:
- name:
de: News
en: News
id: news
@ -102,17 +102,16 @@ Wird der Feldname verwendet wird nur geprüft, ob das Feld belegt ist. TODO
Die `eval` Variante verwendet als Javascript-Kontext Variablen die auf folgenden Seite beschrieben werden:
- [Admin Javascript Kontext](./../../admin-javascript-kontext/allgemeines.md)
- [collection.meta..eval](./../../admin-javascript-kontext/collection.meta..eval.md)
- [field.meta..eval](./../../admin-javascript-kontext/field.meta..eval.md)
- [Admin Javascript Kontext](./../../admin-javascript-kontext/allgemeines.md)
- [collection.meta..eval](./../../admin-javascript-kontext/collection.meta..eval.md)
- [field.meta..eval](./../../admin-javascript-kontext/field.meta..eval.md)
Die Rückgabe des Javascript-Codes beeinflusst die Einblendung des betroffenen Feldes in folgender Weise:
| Rückgabe | Bedeutung |
| --- | --- |
| `true` | Das Feld wird angezeigt |
| `false` | Das Feld wird ausgeblendet |
| Rückgabe | Bedeutung |
| -------- | -------------------------- |
| `true` | Das Feld wird angezeigt |
| `false` | Das Feld wird ausgeblendet |
## defaultValue

View File

@ -6,7 +6,7 @@ Für die Gestaltung von HTML-Inhalten ist der ContentBuilder eine einfache und i
Wie der ContentBuilder an einem Feld konfiguriert wird verdeutlicht folgendes Beispiel:
!!!include(api/collections/fields/content.yml)!!!
!!!include(../api/collections/fields/content.yml)!!!
## Mediathek Kollektion
@ -18,7 +18,7 @@ Wie aus der obigen Definition unterhalb von z.B. "imageSelect" zu lesen, bedarf
> Die Bedeutung der hier nicht beschriebenen Eigenschaften ist unter [collections](./../../../collections.md) zu finden.
!!!include(api/collections/medialib.yml)!!!
!!!include(../api/collections/medialib.yml)!!!
## Module (customTags)
@ -32,4 +32,4 @@ Wie oben schon erwähnt, sind die `placeholder` frei wählbar. Eine HTML5-Schrei
In unserem Beispiel hier wurden zusättzlich zum eigentlichen Modul-Tag noch Attribute (`title` und `description`) definiert. Diese können dann im Frontend das eigentliche Modul beeinflussen.
Im Frontend könnte ein Modul dann später als "Custom Element" implementiert werden oder es wird ein HTML-Parser verwendet, der die Tags durch eigene Komponenten ersetzt, wie er im Anhang [TODO] zu finden ist.
Im Frontend könnte ein Modul dann später als "Custom Element" implementiert werden oder es wird ein HTML-Parser verwendet, der die Tags durch eigene Komponenten ersetzt, wie er im Anhang [TODO] zu finden ist.

View File

@ -7,7 +7,7 @@ Der Prozess selbst erfolgt beim ersten Abruf des Bildes und wird zwischengespeic
Eine beispielhafte Konfiguration, die die Bilder nur verkleinert sieht so aus:
!!!include(api/collections/democol/imageFilter.yml)!!!
!!!include(../api/collections/democol/imageFilter.yml)!!!
Folgende Attribute können Filter-Eintrage haben, wobei `fit` und `fill` exklusiv sind:

View File

@ -4,7 +4,7 @@ Wie bereits an anderer Stelle beschrieben, dient das `meta` Objekt zur Definitio
Folgende Angaben sind möglich:
!!!include(api/collections/democol/meta.yml)!!!
!!!include(../api/collections/democol/meta.yml)!!!
## views Liste
@ -16,14 +16,14 @@ Folgende möglche Einträge für `views` gibt es derzeit:
### simpleList
!!!include(api/collections/democol/simpleList.yml)!!!
!!!include(../api/collections/democol/simpleList.yml)!!!
### table
!!!include(api/collections/democol/table.yml)!!!
!!!include(../api/collections/democol/table.yml)!!!
## tablist
Wird die `tablist` verwendet, ist sicher zu stellen, dass alle Felder in der Definition aufgenommen werden. Werden Felder nicht in die `tablist` aufgenommen, sind diese weiterhin in einer Gesamtliste unterhalb der Tabs und bringen das Layout durcheinander.
!!!include(api/collections/democol/tablist.yml)!!!
!!!include(../api/collections/democol/tablist.yml)!!!

View File

@ -6,10 +6,10 @@ Es hat sich jedoch als günstig erwiesen bei Webprojekten die Datei und alle and
## Aufbau
!!!include(api/config.yml)!!!
!!!include(../api/config.yml)!!!
### siehe
- [collections](./collections.md)
- [jobs](./jobs.md)
- [assets](./assets.md)
- [collections](./collections.md)
- [jobs](./jobs.md)
- [assets](./assets.md)

View File

@ -6,6 +6,6 @@ Wie in allen YAML-Definitionen können auch die Jobs via `!include` ausgelagert
Der Aufbau eines Jobs ausgelagert in einer Datei sieht beispielsweise folgendermaßen aus:
!!!include(api/jobs/demojob.yml)!!!
!!!include(../api/jobs/demojob.yml)!!!
Die Möglichkeiten innerhalb der Javascript-Datei werden im Kapitel [Javascript Kontext](./../server-javascript-kontext/job.md) beschrieben.
Die Möglichkeiten innerhalb der Javascript-Datei werden im Kapitel [Javascript Kontext](./../server-javascript-kontext/job.md) beschrieben.

View File

Before

Width:  |  Height:  |  Size: 291 KiB

After

Width:  |  Height:  |  Size: 291 KiB