Static CMS v2.0 (#226)
- [x] Update auf Static CMS v2.0 - [x] aktualisierte Shortcodes (schließt #225) - [x] aktualisierte Previews (schließt #181) - Ordnerunterstützung - [x] vervollständigte Seiten - [x] Aufräumarbeiten Reviewed-on: https://git.cantorgymnasium.de/gcg/gcg-website/pulls/226
This commit is contained in:
@ -19,13 +19,15 @@ site_url: https://cantorgymnasium.de
|
||||
display_url: https://cantorgymnasium.de
|
||||
locale: "de"
|
||||
|
||||
media_library:
|
||||
max_file_size: 2048000
|
||||
folder_support: true
|
||||
|
||||
slug:
|
||||
encoding: "ascii"
|
||||
clean_accents: true
|
||||
sanitize_replacement: "-"
|
||||
|
||||
show_preview_links: false
|
||||
|
||||
collections:
|
||||
- name: "config"
|
||||
icon: "settings"
|
||||
@ -33,15 +35,10 @@ collections:
|
||||
description: "Hier können die Basiseinstellungen der Website geändert werden."
|
||||
editor:
|
||||
preview: false
|
||||
media_folder: "/static/media"
|
||||
public_folder: "/media"
|
||||
files:
|
||||
- name: "homepage-config"
|
||||
label: "Startseitenkonfiguration"
|
||||
file: "data/de/homepage.yml"
|
||||
media_folder: "/static/media/home"
|
||||
public_folder: "/media/home"
|
||||
format: yml
|
||||
fields:
|
||||
- label: "Banner"
|
||||
name: "top_banner"
|
||||
@ -66,7 +63,7 @@ collections:
|
||||
collapsed: true
|
||||
fields:
|
||||
- {label: "Aktivieren", name: "enable", widget: "boolean", required: false}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "image", required: false, media_library: { config: { max_file_size: 2048000 } } }
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "image", required: false }
|
||||
- {label: "Titel", name: "title", widget: "string", required: false}
|
||||
- label: "Elemente"
|
||||
label_singular: "Element"
|
||||
@ -95,7 +92,7 @@ collections:
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string", required: false}
|
||||
- {label: "Link", name: "link", widget: "string", required: false}
|
||||
- {label: "Grafik", name: "image", widget: "image", required: true, media_folder: "/static/media/logos", public_folder: "/media/logos"}
|
||||
- {label: "Grafik", name: "image", widget: "image", required: true}
|
||||
- label: "\"Über\"-Seite"
|
||||
name: "about"
|
||||
widget: "object"
|
||||
@ -124,14 +121,14 @@ collections:
|
||||
collapsed: true
|
||||
fields:
|
||||
- {label: "Aktivieren", name: "enable", widget: "boolean", required: false}
|
||||
- {label: "Bild", name: "image", widget: "image", required: false, media_library: { config: { max_file_size: 2048000 } } }
|
||||
- {label: "Bild", name: "image", widget: "image", required: false }
|
||||
- label: "Elemente"
|
||||
name: "feature_item"
|
||||
widget: "list"
|
||||
fields:
|
||||
- {label: "Bezeichnung", name: "name", widget: "string", required: false}
|
||||
- {label: "Symbol", name: "icon", widget: "string", required: false, hint: "Liste unter https://pictogrammers.com/library/mdi/"}
|
||||
- {label: "Bild", name: "image", widget: "image", required: false, media_library: { config: { max_file_size: 2048000 } } }
|
||||
- {label: "Bild", name: "image", widget: "image", required: false }
|
||||
- {label: "Inhalt", name: "content", widget: "markdown", required: false}
|
||||
- label: "Ganztagsangebote"
|
||||
name: "ganztagsangebote"
|
||||
@ -161,7 +158,7 @@ collections:
|
||||
collapsed: true
|
||||
fields:
|
||||
- {label: "Aktivieren", name: "enable", widget: "boolean", required: false}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "image", required: false, media_library: { config: { max_file_size: 2048000 } } }
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "image", required: false }
|
||||
- {label: "Titel", name: "title", widget: "string", required: false}
|
||||
- {label: "Inhalt", name: "content", widget: "text", required: false}
|
||||
- {label: "Video-Link", name: "video_link", widget: "string", required: false}
|
||||
@ -179,7 +176,7 @@ collections:
|
||||
fields:
|
||||
- {label: "Aktivieren", name: "enable", widget: "boolean", required: false}
|
||||
- {label: "Titel", name: "title", widget: "string", required: false}
|
||||
- {label: "Bild", name: "image", widget: "image", required: false, media_library: { config: { max_file_size: 2048000 } } }
|
||||
- {label: "Bild", name: "image", widget: "image", required: false }
|
||||
- {label: "Inhalt", name: "content", widget: "markdown", required: false}
|
||||
- label: "Partnerlogos (unten)"
|
||||
name: "footer_logos"
|
||||
@ -194,7 +191,7 @@ collections:
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string", required: false}
|
||||
- {label: "Link", name: "link", widget: "string", required: false}
|
||||
- {label: "Grafik", name: "image", widget: "image", required: true, media_folder: "/static/media/logos", public_folder: "/media/logos"}
|
||||
- {label: "Grafik", name: "image", widget: "image", required: true}
|
||||
- name: "hugo-config"
|
||||
label: "Website-Konfiguration"
|
||||
file: "config.yml"
|
||||
@ -242,7 +239,7 @@ collections:
|
||||
widget: "list"
|
||||
fields:
|
||||
- {label: "Link", name: "link", widget: "string"}
|
||||
- {label: "Logo", name: "logo", widget: "image", media_library: { config: { max_file_size: 2048000 } } }
|
||||
- {label: "Logo", name: "logo", widget: "image" }
|
||||
- {label: "Autor", name: "author", widget: "string"}
|
||||
- {label: "Adresse", name: "address", widget: "string"}
|
||||
- {label: "Route (Link)", name: "route_link", widget: "string"}
|
||||
@ -265,8 +262,8 @@ collections:
|
||||
widget: "object"
|
||||
fields:
|
||||
- {label: "Aktivieren", name: "enable", widget: "boolean", required: false}
|
||||
- {label: "Logo", name: "preloader", widget: "image", media_library: { config: { max_file_size: 2048000 } } }
|
||||
- {label: "Ladeanimation", name: "loader", widget: "image", media_library: { config: { max_file_size: 2048000 } } }
|
||||
- {label: "Logo", name: "preloader", widget: "image" }
|
||||
- {label: "Ladeanimation", name: "loader", widget: "image" }
|
||||
- label: "Soz. Netzwerke"
|
||||
name: "social"
|
||||
widget: "list"
|
||||
@ -349,13 +346,13 @@ collections:
|
||||
- name: "categories-config"
|
||||
label: "Kategorien"
|
||||
file: "data/de/categories.yml"
|
||||
format: yml
|
||||
fields:
|
||||
- label: "Aktuelles"
|
||||
label_singular: "Kategorie"
|
||||
name: "blog"
|
||||
widget: "list"
|
||||
required: true
|
||||
collapsed: true
|
||||
fields:
|
||||
- {label: "Kategorie", name: "category", widget: "string", required: true}
|
||||
- label: "Ganztagsbereich"
|
||||
@ -363,6 +360,7 @@ collections:
|
||||
name: "ganztag"
|
||||
widget: "list"
|
||||
required: true
|
||||
collapsed: true
|
||||
fields:
|
||||
- {label: "Kategorie", name: "category", widget: "string", required: true}
|
||||
- label: "Wettbewerbe"
|
||||
@ -370,6 +368,7 @@ collections:
|
||||
name: "contests"
|
||||
widget: "list"
|
||||
required: true
|
||||
collapsed: true
|
||||
fields:
|
||||
- {label: "Kategorie", name: "category", widget: "string", required: true}
|
||||
- label: "Begabtenförderung"
|
||||
@ -377,12 +376,12 @@ collections:
|
||||
name: "begabte"
|
||||
widget: "list"
|
||||
required: true
|
||||
collapsed: true
|
||||
fields:
|
||||
- {label: "Kategorie", name: "category", widget: "string", required: true}
|
||||
- name: "ausblick-config"
|
||||
label: "Ausblick auf die Woche"
|
||||
file: "data/de/ausblick.yml"
|
||||
format: yml
|
||||
fields:
|
||||
- {label: "Aktivieren", name: "enable", widget: "boolean", required: false}
|
||||
- {label: "Titel", name: "title", widget: "string", required: false}
|
||||
@ -393,30 +392,30 @@ collections:
|
||||
search_fields: ["title"]
|
||||
value_field: "title"
|
||||
required: false
|
||||
- {label: "Titelbild", name: "image", widget: "image", required: false, media_library: { config: { max_file_size: 2048000 } } }
|
||||
- {label: "Titelbild", name: "image", widget: "image", required: false }
|
||||
- {label: "Inhalt", name: "content", widget: "markdown", required: false}
|
||||
- name: "index-pages"
|
||||
icon: "page"
|
||||
label: "Hauptseiten"
|
||||
label_singular: "Hauptseite"
|
||||
description: Hauptseiten können nur manuell durch den Administrator angelegt und in die Website eingebunden werden. Über diesen Bereich ist die Änderung der Inhalte möglich.
|
||||
editor:
|
||||
preview: true
|
||||
frame: true
|
||||
summary_fields: ["title", "description"]
|
||||
files:
|
||||
- name: "blog-index"
|
||||
label: "Aktuelles"
|
||||
file: "content/german/blog/_index.md"
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "hidden", default: "/media/backgrounds/page-title.webp"}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", required: false}
|
||||
- name: "about-index"
|
||||
label: "Über die Schule"
|
||||
file: "content/german/about/_index.md"
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "hidden", default: "/media/backgrounds/page-title.webp"}
|
||||
- {label: "Bild", name: "image", widget: "image", default: "/media/image.webp", required: false, media_library: { config: { max_file_size: 2048000 } } }
|
||||
- {label: "Bild", name: "image", widget: "image", default: "/media/image.webp", required: false }
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", required: false}
|
||||
- label: "Statistik"
|
||||
name: "stats"
|
||||
@ -432,12 +431,10 @@ collections:
|
||||
- {label: "Zahl", name: "count", widget: "number", required: false}
|
||||
- {label: "Text", name: "body", widget: "markdown"}
|
||||
- name: "anmeldung-index"
|
||||
label: "Anmeldung"
|
||||
label: "Aufnahmeverfahren"
|
||||
file: "content/german/anmeldung/_index.md"
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string", required: true}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "hidden", default: "/media/backgrounds/page-title.webp"}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", required: false}
|
||||
- label: "Elemente"
|
||||
label_singular: "Element"
|
||||
@ -448,36 +445,51 @@ collections:
|
||||
- {label: "Text", name: "content", widget: "markdown", required: true}
|
||||
required: false
|
||||
- {label: "Text", name: "body", widget: "markdown", required: false}
|
||||
- name: "author-index"
|
||||
label: "Autoren"
|
||||
file: "content/german/author/_index.md"
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string", required: true}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", required: false}
|
||||
- name: "anmeldeformular"
|
||||
label: "Anmeldeformular"
|
||||
file: "content/german/anmeldeformular/_index.md"
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string", required: true}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", required: false}
|
||||
- {label: "Text", name: "body", widget: "markdown", required: false}
|
||||
- name: "cantorpreis-index"
|
||||
label: "Cantor-Preis"
|
||||
label: "Cantorpreis"
|
||||
file: "content/german/cantorpreis/_index.md"
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "hidden", default: "/media/backgrounds/page-title.webp"}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", required: false}
|
||||
- name: "contact-index"
|
||||
label: "Kontakt"
|
||||
file: "content/german/kontakt/_index.md"
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "hidden", default: "/media/backgrounds/page-title.webp"}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", required: false}
|
||||
- {label: "Text", name: "body", widget: "markdown"}
|
||||
- label: "Kontaktdaten"
|
||||
name: "kontaktdaten"
|
||||
widget: "list"
|
||||
required: true
|
||||
collapsed: true
|
||||
fields:
|
||||
- {label: "Name", name: "name", widget: "string", required: true}
|
||||
- {label: "Berufsbezeichnung", name: "position", widget: "string", required: true}
|
||||
- {label: "E-Mail-Adresse", name: "email", widget: "string", required: true, pattern: ["^\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$", "name@domain.tld"]}
|
||||
- name: "event-index"
|
||||
label: "Termine"
|
||||
file: "content/german/termine/_index.md"
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "hidden", default: "/media/backgrounds/page-title.webp"}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", required: false}
|
||||
- label: Termine
|
||||
label_singular: "Termin"
|
||||
name: "events"
|
||||
widget: "list"
|
||||
collapsed: false
|
||||
collapsed: true
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string", required: true}
|
||||
- {label: "Datum/Startdatum", name: "date", widget: "datetime", required: true, date_format: "dd.MM.yyyy", time_format: false, format: "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"}
|
||||
@ -489,69 +501,88 @@ collections:
|
||||
file: "content/german/forms/_index.md"
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "hidden", default: "/media/backgrounds/page-title.webp"}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", required: false}
|
||||
- name: "ganztagsangebote-index"
|
||||
label: "Ganztagsangebote"
|
||||
label: "Unser Ganztagsbereich"
|
||||
file: "content/german/ganztagsangebote/_index.md"
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "hidden", default: "/media/backgrounds/page-title.webp"}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", required: false}
|
||||
- name: "projektwoche-index"
|
||||
label: "Projektwoche"
|
||||
file: "content/german/projektwoche/_index.md"
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", required: false}
|
||||
- name: "wettbewerbe-index"
|
||||
label: "Wettbewerbe"
|
||||
file: "content/german/wettbewerbe/_index.md"
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "hidden", default: "/media/backgrounds/page-title.webp"}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", required: false}
|
||||
- name: "begabte-index"
|
||||
label: "Begabtenförderung"
|
||||
file: "content/german/begabte/_index.md"
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "hidden", default: "/media/backgrounds/page-title.webp"}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", required: false}
|
||||
- name: "abiturienten"
|
||||
- name: "abiturienten-index"
|
||||
label: "Abiturienten"
|
||||
file: "content/german/abiturienten/_index.md"
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "hidden", default: "/media/backgrounds/page-title.webp"}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", required: false}
|
||||
- name: "cantorfora"
|
||||
- name: "cantorfora-index"
|
||||
label: "Cantorfora"
|
||||
file: "content/german/cantorfora/_index.md"
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "hidden", default: "/media/backgrounds/page-title.webp"}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", required: false}
|
||||
|
||||
- {label: "Text", name: "body", widget: "markdown", required: false}
|
||||
- name: "schulchronik-index"
|
||||
label: "Schulchronik"
|
||||
file: "content/german/schulchronik/_index.md"
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", required: false}
|
||||
- {label: "Text", name: "body", widget: "markdown", required: false}
|
||||
- label: "Karte"
|
||||
name: "infocard"
|
||||
widget: "object"
|
||||
required: false
|
||||
fields:
|
||||
- {label: "Aktiviert", name: "enable", widget: "boolean", required: false}
|
||||
- {label: "Bild", name: "image", widget: "image", required: false}
|
||||
- {label: "Zitat", name: "quote", widget: "string", required: false}
|
||||
- {label: "Autor", name: "author", widget: "string", required: false}
|
||||
- label: "Informationsseiten"
|
||||
name: "links"
|
||||
widget: "list"
|
||||
required: false
|
||||
collapsed: true
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string", required: true}
|
||||
- {label: "Link", name: "link", widget: "string", required: true}
|
||||
- name: "pages"
|
||||
icon: "page-add"
|
||||
label: "Zusatzseiten"
|
||||
label_singular: "Zusatzseite"
|
||||
description: "Zusatzseiten können direkt aus der grafischen Oberfläche heraus erstellt werden und sind unter https://cantorgymnasium.de/pages/[SEITENTITEL] einsehbar. Sie bestehen immer aus einem Titel, einer Metabeschreibung (kurzer Einstiegstext) und dem eigentlichen Inhalt. Einer Zusatzseite kann auch ein Alias, also eine alternative URL zugewiesen werden."
|
||||
folder: "content/german/pages"
|
||||
create: true
|
||||
editor:
|
||||
preview: true
|
||||
frame: true
|
||||
slug: "{{slug}}"
|
||||
filter:
|
||||
field: type
|
||||
value: pages
|
||||
summary_fields: ["title", "draft","aliases", "description"]
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "hidden", default: "/media/backgrounds/page-title.webp"}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", required: false}
|
||||
- {label: "Type", name: "type", widget: "hidden", default: "pages"}
|
||||
- {label: "Layout", name: "layout", widget: "hidden", default: "single.html"}
|
||||
|
||||
- label: "Aliase"
|
||||
name: "aliases"
|
||||
widget: "list"
|
||||
@ -563,49 +594,47 @@ collections:
|
||||
- name: "author"
|
||||
icon: "user"
|
||||
label: "Autoren"
|
||||
label_singular: "Autoren"
|
||||
label_singular: "Autor"
|
||||
description: Autoren können einem Blogartikel zugewiesen werden. Wir unterscheiden in aktive und inaktive sowie vereinfachte Autoren, welche nur mit dem Namen angezeigt werden, und erweiterte Autoren, für die eine Übersichtsseite angelegt wird.
|
||||
folder: "content/german/author"
|
||||
filter: {field: type, value: author}
|
||||
create: true
|
||||
slug: "{{slug}}"
|
||||
editor:
|
||||
preview: false
|
||||
media_folder: '/static/media/people'
|
||||
public_folder: '/media/people'
|
||||
preview: true
|
||||
frame: true
|
||||
view_filters:
|
||||
- label: "aktiv"
|
||||
field: active
|
||||
pattern: true
|
||||
- label: "inaktiv"
|
||||
field: active
|
||||
pattern: false
|
||||
- label: "einfach"
|
||||
field: simplified
|
||||
pattern: true
|
||||
- label: "erweitert"
|
||||
field: simplified
|
||||
pattern: false
|
||||
view_groups:
|
||||
- label: "vereinfacht"
|
||||
field: simplified
|
||||
- label: "aktiv"
|
||||
field: active
|
||||
summary_fields: ["title", "active", "simplified", "body"]
|
||||
fields:
|
||||
- {label: "Name", name: "title", widget: "string"}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "hidden", default: "/media/backgrounds/page-title.webp"}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", default: "", required: false}
|
||||
- {label: "Gravatar-E-Mail", name: "email", widget: "string", required: false}
|
||||
- {label: "Foto", name: "image", widget: "image", required: false, media_library: { config: { max_file_size: 2048000 } } }
|
||||
- label: "Kontaktdaten"
|
||||
label_singular: " "
|
||||
name: "social"
|
||||
widget: "list"
|
||||
required: false
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string", required: false}
|
||||
- label: "Symbol"
|
||||
name: "icon"
|
||||
widget: "select"
|
||||
options:
|
||||
- { label: "YouTube", value: "mdi mdi-youtube" }
|
||||
- { label: "Twitter", value: "mdi mdi-twitter" }
|
||||
- { label: "Pinterest", value: "mdi mdi-pinterest" }
|
||||
- { label: "GitHub", value: "mdi mdi-github" }
|
||||
- { label: "Git", value: "mdi mdi-git" }
|
||||
- { label: "Vimeo", value: "mdi mdi-vimeo" }
|
||||
- { label: "Instagram", value: "mdi mdi-instagram" }
|
||||
- { label: "Facebook", value: "mdi mdi-facebook" }
|
||||
- { label: "Linkedin", value: "mid mdi-linkedin" }
|
||||
- { label: "E-Mail", value: "mdi mdi-at" }
|
||||
- { label: "Sonstige", value: "mdi mdi-share-variant-outline" }
|
||||
- {label: "Link", name: "link", widget: "string"}
|
||||
- {label: "E-Mail-Adresse", name: "email", widget: "string", required: false}
|
||||
- {label: "Foto", name: "image", widget: "image", required: false, default: "/media/authors/gcg.webp" }
|
||||
- {label: "vereinfacht", name: "simplified", widget: "boolean", default: false, required: false}
|
||||
- {label: "aktiv", name: "active", widget: "boolean", default: true, required: false}
|
||||
- {label: "Beschreibung", name: "body", widget: "markdown"}
|
||||
- name: "blog"
|
||||
icon: "news"
|
||||
label: "Aktuelles"
|
||||
description: Diese Artikel werden im Bereich "Aktuelles" auf der Schulhomepage angezeigt.
|
||||
label_singular: "Blogbeitrag"
|
||||
description: Diese Artikel werden im Bereich "Aktuelles" auf der Schulhomepage angezeigt. Sie können sowohl direkt veröffentlicht, als auch als Entwurf gespeichert werden.
|
||||
label_singular: "Artikel"
|
||||
folder: "content/german/blog"
|
||||
filter: {field: "type", value: "post"}
|
||||
create: true
|
||||
@ -613,8 +642,6 @@ collections:
|
||||
editor:
|
||||
preview: true
|
||||
frame: true
|
||||
media_folder: '/static/media/blog'
|
||||
public_folder: '/media/blog'
|
||||
view_groups:
|
||||
- label: Entwurf
|
||||
field: draft
|
||||
@ -625,13 +652,13 @@ collections:
|
||||
default:
|
||||
field: date
|
||||
direction: Descending
|
||||
summary_fields: ["date", "title", "draft", "author", "body"]
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Datum", name: "date", widget: "datetime", date_format: "dd/MM/yyyy", time_format: false, format: "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "hidden", default: "/media/backgrounds/page-title.webp"}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", default: "", required: false}
|
||||
- {label: "Beitragsbild", name: "image", widget: "image", default: "/media/blog/image.webp", media_library: { config: { max_file_size: 2048000 } } }
|
||||
- {label: "Beitragsbild", name: "image", widget: "image", default: "/media/blog/image.webp" }
|
||||
- label: "Beitragsautor"
|
||||
name: "author"
|
||||
widget: "relation"
|
||||
@ -649,6 +676,17 @@ collections:
|
||||
display_fields: ["blog.*"]
|
||||
multiple: true
|
||||
options_length: 50
|
||||
- label: "Fächer"
|
||||
name: "subjects"
|
||||
widget: "relation"
|
||||
required: false
|
||||
collection: "config"
|
||||
file: "categories-config"
|
||||
value_field: "subjects.*"
|
||||
search_fields: ["subjects.*"]
|
||||
display_fields: ["subjects.*"]
|
||||
multiple: true
|
||||
options_length: 50
|
||||
- label: "Tags"
|
||||
name: "tags"
|
||||
widget: "list"
|
||||
@ -658,7 +696,6 @@ collections:
|
||||
name: "tag"
|
||||
widget: "string"
|
||||
- {label: "Type", name: "type", widget: "hidden", default: "post"}
|
||||
|
||||
- {label: "Text", name: "body", widget: "markdown"}
|
||||
- name: "forms"
|
||||
icon: "document"
|
||||
@ -670,13 +707,12 @@ collections:
|
||||
create: true
|
||||
slug: "{{slug}}"
|
||||
editor:
|
||||
preview: false
|
||||
media_folder: '/static/media/forms'
|
||||
public_folder: '/media/forms'
|
||||
preview: true
|
||||
frame: true
|
||||
summary_fields: ["title", "draft"]
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "hidden", default: "/media/backgrounds/page-title.webp"}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", required: false}
|
||||
- label: "Dateien"
|
||||
name: "files"
|
||||
@ -686,7 +722,6 @@ collections:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Datei", name: "link", widget: "file"}
|
||||
- {label: "Type", name: "type", widget: "hidden", default: "forms"}
|
||||
|
||||
- {label: "Text", name: "body", widget: "markdown"}
|
||||
- name: "cantorpreis"
|
||||
icon: "award"
|
||||
@ -702,40 +737,16 @@ collections:
|
||||
summary: "{{title}} - {{name}}"
|
||||
create: true
|
||||
editor:
|
||||
preview: false
|
||||
media_folder: '/static/media/cantorpreis'
|
||||
public_folder: '/media/cantorpreis'
|
||||
preview: true
|
||||
frame: true
|
||||
summary_fields: ["title", "name", "draft", "body"]
|
||||
fields:
|
||||
- {label: "Jahr", name: "title", widget: "string"}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "hidden", default: "/media/backgrounds/page-title.webp"}
|
||||
- {label: "Beschreibung", name: "description", widget: "text", required: false}
|
||||
- {label: "Bild", name: "image", widget: "image", default: "/media/cantorpreis/image.webp", required: false, media_library: { config: { max_file_size: 2048000 } } }
|
||||
- {label: "Name", name: "name", widget: "string"}
|
||||
- label: "Kontaktdaten/Soz. Netzwerke"
|
||||
name: "contact"
|
||||
widget: "list"
|
||||
required: false
|
||||
fields:
|
||||
- {label: "Bezeichnung", name: "name", widget: "string"}
|
||||
- label: "Symbol"
|
||||
name: "icon"
|
||||
widget: "select"
|
||||
options:
|
||||
- { label: "YouTube", value: "mdi mdi-youtube" }
|
||||
- { label: "Twitter", value: "mdi mdi-twitter" }
|
||||
- { label: "Pinterest", value: "mdi mdi-pinterest" }
|
||||
- { label: "GitHub", value: "mdi mdi-github" }
|
||||
- { label: "Git", value: "mdi mdi-git" }
|
||||
- { label: "Vimeo", value: "mdi mdi-vimeo" }
|
||||
- { label: "Instagram", value: "mdi mdi-instagram" }
|
||||
- { label: "Facebook", value: "mdi mdi-facebook" }
|
||||
- { label: "Linkedin", value: "mid mdi-linkedin" }
|
||||
- { label: "E-Mail", value: "mdi mdi-at" }
|
||||
- { label: "Sonstige", value: "mdi mdi-share-variant-outline" }
|
||||
- {label: "Link", name: "link", widget: "string"}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Beschreibung", name: "description", widget: "text", required: false}
|
||||
- {label: "Bild", name: "image", widget: "image", default: "/media/cantorpreis/image.webp", required: false }
|
||||
- {label: "Type", name: "type", widget: "hidden", default: "cantorpreis"}
|
||||
|
||||
- {label: "Text", name: "body", widget: "markdown", required: false}
|
||||
- name: "ganztagsangebote"
|
||||
icon: "group"
|
||||
@ -747,14 +758,12 @@ collections:
|
||||
editor:
|
||||
preview: true
|
||||
frame: true
|
||||
media_folder: '/static/media/ganztagsangebote'
|
||||
public_folder: '/media/ganztagsangebote'
|
||||
summary_fields: ["title", "draft", "category", "schedule", "room"]
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "hidden", default: "/media/backgrounds/page-title.webp"}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", required: false}
|
||||
- {label: "Bild", name: "image", widget: "image", default: "/media/ganztagsangebote/image.webp", required: false, media_library: { config: { max_file_size: 2048000 } } }
|
||||
- {label: "Bild", name: "image", widget: "image", default: "/media/ganztagsangebote/image.webp", required: false }
|
||||
- label: "Themenbereich"
|
||||
name: "category"
|
||||
widget: "relation"
|
||||
@ -771,7 +780,6 @@ collections:
|
||||
- {label: "Raum", name: "room", widget: "string"}
|
||||
- {label: "Anmeldelink", name: "apply_url", widget: "hidden", default: "https://moodle.bildung-lsa.de/gcg/mod/choice/view.php?id=828"}
|
||||
- {label: "Type", name: "type", widget: "hidden", default: "ganztagsangebote"}
|
||||
|
||||
- {label: "Text", name: "body", widget: "markdown"}
|
||||
- name: "wettbewerbe"
|
||||
icon: "trophy"
|
||||
@ -783,14 +791,12 @@ collections:
|
||||
editor:
|
||||
preview: true
|
||||
frame: true
|
||||
media_folder: '/static/media/contests'
|
||||
public_folder: '/media/contests'
|
||||
summary_fields: ["title", "draft", "category"]
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "hidden", default: "/media/backgrounds/page-title.webp"}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", required: false}
|
||||
- {label: "Bild", name: "image", widget: "image", default: "/media/contests/image.webp", required: false, media_library: { config: { max_file_size: 2048000 } } }
|
||||
- {label: "Bild", name: "image", widget: "image", default: "/media/contests/image.webp", required: false }
|
||||
- label: "Fach"
|
||||
name: "category"
|
||||
widget: "relation"
|
||||
@ -804,7 +810,6 @@ collections:
|
||||
- {label: "Klassenstufen", name: "class", widget: "string"}
|
||||
- {label: "Website", name: "web_url", widget: "string", required: false}
|
||||
- {label: "Type", name: "type", widget: "hidden", default: "wettbewerbe"}
|
||||
|
||||
- {label: "Text", name: "body", widget: "markdown"}
|
||||
- name: "begabte"
|
||||
icon: "pi"
|
||||
@ -814,29 +819,17 @@ collections:
|
||||
filter: {field: "type", value: "begabte"}
|
||||
create: true
|
||||
editor:
|
||||
preview: false
|
||||
media_folder: '/static/media/begabte'
|
||||
public_folder: '/media/begabte'
|
||||
preview: true
|
||||
frame: true
|
||||
summary_fields: ["title", "draft", "body"]
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "hidden", default: "/media/backgrounds/page-title.webp"}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", required: false}
|
||||
- {label: "Bild", name: "image", widget: "image", default: "/media/begabte/image.webp", required: false, media_library: { config: { max_file_size: 2048000 } } }
|
||||
- label: "Fach"
|
||||
name: "category"
|
||||
widget: "relation"
|
||||
required: true
|
||||
collection: "config"
|
||||
file: "categories-config"
|
||||
value_field: "begabte.*"
|
||||
search_fields: ["begabte.*"]
|
||||
display_fields: ["begabte.*"]
|
||||
options_length: 50
|
||||
- {label: "Bild", name: "image", widget: "image", default: "/media/begabte/image.webp", required: false }
|
||||
- {label: "Klassenstufen", name: "class", widget: "string"}
|
||||
- {label: "Website", name: "web_url", widget: "string", required: false}
|
||||
- {label: "Type", name: "type", widget: "hidden", default: "begabte"}
|
||||
|
||||
- {label: "Text", name: "body", widget: "markdown"}
|
||||
- name: "projektwoche"
|
||||
icon: "projektwoche"
|
||||
@ -846,27 +839,27 @@ collections:
|
||||
filter: {field: "type", value: "projektwoche"}
|
||||
create: true
|
||||
editor:
|
||||
preview: false
|
||||
media_folder: '/static/media/projektwoche'
|
||||
public_folder: '/media/projektwoche'
|
||||
preview: true
|
||||
frame: true
|
||||
summary_fields: ["title", "draft", "tiles", "description"]
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", required: false}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "hidden", default: "/media/backgrounds/page-title.webp"}
|
||||
- {label: "Type", name: "type", widget: "hidden", default: "projektwoche"}
|
||||
|
||||
- {label: "Text", name: "body", widget: "markdown", required: false, default: ""}
|
||||
- label: "Kacheln"
|
||||
name: "tiles"
|
||||
widget: "list"
|
||||
required: false
|
||||
collapsed: true
|
||||
hint: "Die Vorschau zeigt nur die generierten Symbolkarten, NICHT die Inhalte."
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string", required: true}
|
||||
- {label: "Hintergrundfarbe", name: "bg_color", widget: "color", required: true}
|
||||
- {label: "Symbol", name: "icon", widget: "string", required: true}
|
||||
- {label: "Symbolfarbe", name: "font_color", widget: "color", required: true}
|
||||
- {label: "Inhalt", name: "content", widget: "markdown", required: true}
|
||||
- {label: "Text", name: "body", widget: "markdown", required: false, default: ""}
|
||||
- name: "schulchronik"
|
||||
icon: "pillar"
|
||||
label: "Schulchronik"
|
||||
@ -876,23 +869,88 @@ collections:
|
||||
create: true
|
||||
editor:
|
||||
preview: false
|
||||
media_folder: '/static/media/schulchronik'
|
||||
public_folder: '/media/schulchronik'
|
||||
summary_fields: ["title", "draft", "cantorpreisträger", "topics"]
|
||||
sortable_fields:
|
||||
fields: ['title']
|
||||
default:
|
||||
field: title
|
||||
direction: Descending
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "hidden", default: "/media/backgrounds/page-title.webp"}
|
||||
- {label: "Type", name: "type", widget: "hidden", default: "schulchronik"}
|
||||
- {label: "Einleitung", name: "pretext", hint: "Jahreszahltext", widget: "markdown", required: false}
|
||||
- label: "Kreative Haufen"
|
||||
name: "topics"
|
||||
widget: "list"
|
||||
required: false
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string", required: true}
|
||||
- {label: "Inhalt", name: "content", widget: "markdown", required: true}
|
||||
- label: "Superhaufen"
|
||||
name: "superhaufen"
|
||||
widget: "object"
|
||||
required: false
|
||||
fields:
|
||||
- {label: "Aktiviert", name: "enable", widget: "boolean", required: false}
|
||||
- label: "Superhaufen"
|
||||
name: "link"
|
||||
widget: "relation"
|
||||
collection: "superhaufen"
|
||||
search_fields: ["title"]
|
||||
value_field: "title"
|
||||
required: false
|
||||
collapsed: true
|
||||
- label: "Cantorpreisträger"
|
||||
name: "cantorpreisträger"
|
||||
widget: "relation"
|
||||
collection: "cantorpreis"
|
||||
search_fields: ["jahr", "name"]
|
||||
value_field: "name"
|
||||
required: false
|
||||
|
||||
- {label: "Text", name: "body", widget: "markdown", required: false, default: ""}
|
||||
- name: "superhaufen"
|
||||
icon: "superhaufen"
|
||||
label: "Superhaufen"
|
||||
label_singular: "Superhaufen"
|
||||
folder: "content/german/superhaufen"
|
||||
filter: {field: "type", value: "superhaufen"}
|
||||
create: true
|
||||
editor:
|
||||
preview: true
|
||||
frame: true
|
||||
summary_fields: ["title", "draft", "tiles"]
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Type", name: "type", widget: "hidden", default: "superhaufen"}
|
||||
- label: "Rückverlinkung"
|
||||
name: "previous"
|
||||
widget: "object"
|
||||
fields:
|
||||
- {label: "Aktiviert", name: "enable", widget: "hidden", default: true}
|
||||
- {label: "Titel", name: "title", widget: "string", required: true}
|
||||
- {label: "Link", name: "link", widget: "string", required: true}
|
||||
- label: "Kacheln"
|
||||
name: "tiles"
|
||||
widget: "list"
|
||||
required: false
|
||||
collapsed: true
|
||||
hint: "Die Vorschau zeigt nur die generierten Symbolkarten, NICHT die Inhalte."
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string", required: true}
|
||||
- {label: "Hintergrundfarbe", name: "bg_color", widget: "color", required: true}
|
||||
- {label: "Symbol", name: "icon", widget: "string", required: true}
|
||||
- {label: "Symbolfarbe", name: "font_color", widget: "color", required: true}
|
||||
- {label: "Inhalt", name: "content", widget: "markdown", required: true}
|
||||
- label: "Unter-Unterhaufen"
|
||||
name: "unterhaufen"
|
||||
widget: "list"
|
||||
required: false
|
||||
collapsed: true
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string", required: false}
|
||||
- {label: "Inhalt", name: "content", widget: "markdown", required: true}
|
||||
- name: "abiturienten"
|
||||
icon: "graduation-cap"
|
||||
label: "Abiturienten"
|
||||
@ -901,17 +959,19 @@ collections:
|
||||
filter: {field: "type", value: "abiturienten"}
|
||||
create: true
|
||||
editor:
|
||||
preview: false
|
||||
media_folder: '/static/media/abiturienten'
|
||||
public_folder: '/media/abiturienten'
|
||||
preview: true
|
||||
frame: true
|
||||
summary_fields: ["title", "draft"]
|
||||
sortable_fields:
|
||||
fields: ["title"]
|
||||
default:
|
||||
field: title
|
||||
direction: Descending
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "hidden", default: "/media/backgrounds/page-title.webp"}
|
||||
- {label: "Bild", name: "image", widget: "image", default: "/media/abiturienten/image.webp", required: false, media_library: { config: { max_file_size: 2048000 } } }
|
||||
- {label: "Mehrere Bilder", name: "multiple", widget: "boolean", default: false, required: false}
|
||||
- {label: "Bild", name: "image", widget: "image", default: "/media/abiturienten/image.webp", required: false }
|
||||
- {label: "Type", name: "type", widget: "hidden", default: "abiturienten"}
|
||||
|
||||
- {label: "Text", name: "body", widget: "markdown"}
|
||||
- name: "cantorfora"
|
||||
icon: "presentation"
|
||||
@ -924,23 +984,77 @@ collections:
|
||||
editor:
|
||||
preview: true
|
||||
frame: true
|
||||
media_folder: '/static/media/cantorfora'
|
||||
public_folder: '/media/cantorfora'
|
||||
view_groups:
|
||||
- label: Drafts
|
||||
field: draft
|
||||
summary_fields: ["title", "draft", "description"]
|
||||
sortable_fields:
|
||||
fields: ['index', 'title']
|
||||
default:
|
||||
field: index
|
||||
direction: Ascending
|
||||
direction: Descending
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Laufindex", name: "index", widget: "number", value_type: 'int', min: 1, step: 1, required: true, hint: "Nummer des Cantorforums"}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Hintergrundbild", name: "bg_image", widget: "hidden", default: "/media/backgrounds/page-title.webp"}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", default: "", required: false}
|
||||
- {label: "Beitragsbild", name: "image", widget: "image", default: "/media/image.webp", media_library: { config: { max_file_size: 2048000 } } }
|
||||
- {label: "Beitragsbild", name: "image", widget: "image", default: "/media/image.webp" }
|
||||
- {label: "Type", name: "type", widget: "hidden", default: "cantorfora"}
|
||||
|
||||
- {label: "Text", name: "body", widget: "markdown"}
|
||||
- name: "chronikseiten"
|
||||
icon: "page-add"
|
||||
label: "Chronikseiten"
|
||||
label_singular: "Seite"
|
||||
folder: "content/german/chronikseiten"
|
||||
create: true
|
||||
editor:
|
||||
preview: true
|
||||
frame: true
|
||||
slug: "{{slug}}"
|
||||
filter: {field: "type", value: "pages"}
|
||||
summary_fields: ["title", "draft", "aliases", "body"]
|
||||
fields:
|
||||
- {label: "Titel", name: "title", widget: "string"}
|
||||
- {label: "Entwurf", name: "draft", widget: "boolean", default: false, required: false}
|
||||
- {label: "Metabeschreibung", name: "description", widget: "text", required: false}
|
||||
- {label: "Type", name: "type", widget: "hidden", default: "pages"}
|
||||
- label: "Aliase"
|
||||
name: "aliases"
|
||||
widget: "list"
|
||||
required: false
|
||||
fields:
|
||||
- label: "Alias"
|
||||
name: "alias"
|
||||
widget: "string"
|
||||
- {label: "Text", name: "body", widget: "markdown", required: false}
|
||||
- name: "statistik"
|
||||
icon: "stats"
|
||||
label: "Statistik"
|
||||
editor:
|
||||
preview: false
|
||||
files:
|
||||
- name: "abiturdurchschnitte"
|
||||
label: "Abiturdurchschnitte"
|
||||
file: "static/data/abiturdurchschnitte.json"
|
||||
fields:
|
||||
- label: "Abiturdurchschnitte"
|
||||
label_singular: "Abiturdurchschnitt"
|
||||
name: "abiturdurchschnitte"
|
||||
widget: "list"
|
||||
required: false
|
||||
fields:
|
||||
- {label: "Jahr", name: "jahr", widget: "number", required: true}
|
||||
- {label: "Schnitt", name: "schnitt", widget: "number", value_type: "float", step: 0.01, required: true}
|
||||
- name: "schuelerzahlen"
|
||||
label: "Schülerzahlen"
|
||||
file: "static/data/schuelerzahlen.json"
|
||||
fields:
|
||||
- label: "Schülerzahlen"
|
||||
label_singular: "Schülerzahlen"
|
||||
name: "schuelerzahlen"
|
||||
widget: "list"
|
||||
required: false
|
||||
fields:
|
||||
- {label: "Jahr", name: "year", widget: "number", required: true}
|
||||
- {label: "Gesamt", name: "all", widget: "number", required: true}
|
||||
- {label: "davon Mädchen", name: "girls", widget: "number", required: true}
|
||||
|
37
static/admin/icons.js
Normal file
37
static/admin/icons.js
Normal file
@ -0,0 +1,37 @@
|
||||
const IconNames = {
|
||||
settings: "mdi mdi-cog-outline",
|
||||
user: "mdi mdi-fountain-pen-tip",
|
||||
page: "mdi mdi-file-document-outline",
|
||||
"page-add": "mdi mdi-file-document-plus-outline",
|
||||
document: "mdi mdi-file-document-multiple-outline",
|
||||
news: "mdi mdi-newspaper",
|
||||
award: "mdi mdi-seal-variant",
|
||||
group: "mdi mdi-crowd",
|
||||
trophy: "mdi mdi-trophy-outline",
|
||||
pi: "mdi mdi-pi-box",
|
||||
pillar: "mdi mdi-pillar",
|
||||
"graduation-cap": "mdi mdi-school-outline",
|
||||
help: "mdi mdi-lifebuoy",
|
||||
dash: "mdi mdi-monitor-dashboard",
|
||||
presentation: "mdi mdi-presentation",
|
||||
projektwoche: "mdi mdi-calendar-range-outline",
|
||||
superhaufen: "mdi mdi-view-dashboard",
|
||||
stats: "mdi mdi-chart-bar",
|
||||
};
|
||||
|
||||
let Icons = [];
|
||||
|
||||
for (let [name, icon] of Object.entries(IconNames)) {
|
||||
Icons.push({
|
||||
name,
|
||||
icon: () =>
|
||||
h(
|
||||
"div",
|
||||
{ className: "flex items-center" },
|
||||
h("i", { className: icon, style: { fontSize: "1.5rem" } })
|
||||
),
|
||||
});
|
||||
}
|
||||
|
||||
export default Icons;
|
||||
|
File diff suppressed because it is too large
Load Diff
5
static/admin/links/index.js
Normal file
5
static/admin/links/index.js
Normal file
@ -0,0 +1,5 @@
|
||||
import StatusPage from "./status.js";
|
||||
|
||||
import WikiLink from "./wiki.js";
|
||||
|
||||
export { StatusPage, WikiLink };
|
17
static/admin/links/status.js
Normal file
17
static/admin/links/status.js
Normal file
@ -0,0 +1,17 @@
|
||||
const StatusPage = {
|
||||
id: "status",
|
||||
title: "Status",
|
||||
data: () =>
|
||||
h("iframe", {
|
||||
src: "https://grafana.cantorgymnasium.de/d/ni-7T-J4z/status?orgId=2&refresh=5s&kiosk",
|
||||
style: {
|
||||
width: "100%",
|
||||
height: "90vh",
|
||||
},
|
||||
}),
|
||||
options: {
|
||||
icon: "dash",
|
||||
},
|
||||
};
|
||||
|
||||
export default StatusPage;
|
10
static/admin/links/wiki.js
Normal file
10
static/admin/links/wiki.js
Normal file
@ -0,0 +1,10 @@
|
||||
const WikiLink = {
|
||||
id: "wiki",
|
||||
title: "GCG.Wiki",
|
||||
data: "https://wiki.cantorgymnasium.de",
|
||||
options: {
|
||||
icon: "help",
|
||||
},
|
||||
};
|
||||
|
||||
export default WikiLink;
|
5
static/admin/previews/field-previews/body-preview.js
Normal file
5
static/admin/previews/field-previews/body-preview.js
Normal file
@ -0,0 +1,5 @@
|
||||
import { truncate } from "./components/index.js";
|
||||
|
||||
const BodyPreview = ({ value }) => h("p", {}, truncate(value ?? "", 50));
|
||||
|
||||
export default BodyPreview;
|
6
static/admin/previews/field-previews/boolean-preview.js
Normal file
6
static/admin/previews/field-previews/boolean-preview.js
Normal file
@ -0,0 +1,6 @@
|
||||
const BooleanPreview = ({ value }) =>
|
||||
h("i", {
|
||||
className: value ? "mdi mdi-check" : "mdi mdi-close",
|
||||
});
|
||||
|
||||
export default BooleanPreview;
|
3
static/admin/previews/field-previews/components/index.js
Normal file
3
static/admin/previews/field-previews/components/index.js
Normal file
@ -0,0 +1,3 @@
|
||||
import truncate from "./truncate.js";
|
||||
|
||||
export { truncate };
|
@ -0,0 +1,9 @@
|
||||
function truncate(str, num) {
|
||||
if (str.length > num) {
|
||||
return str.slice(0, num) + "...";
|
||||
} else {
|
||||
return str;
|
||||
}
|
||||
}
|
||||
|
||||
export default truncate;
|
3
static/admin/previews/field-previews/count-preview.js
Normal file
3
static/admin/previews/field-previews/count-preview.js
Normal file
@ -0,0 +1,3 @@
|
||||
const CountPreview = ({ value }) => (value ? value.length : 0);
|
||||
|
||||
export default CountPreview;
|
11
static/admin/previews/field-previews/date-preview.js
Normal file
11
static/admin/previews/field-previews/date-preview.js
Normal file
@ -0,0 +1,11 @@
|
||||
const DatePreview = ({ value }) =>
|
||||
h(
|
||||
"p",
|
||||
{},
|
||||
new Intl.DateTimeFormat("de-DE", {
|
||||
year: "numeric",
|
||||
month: "2-digit",
|
||||
day: "2-digit",
|
||||
hour12: false,
|
||||
}).format(new Date(value))
|
||||
);
|
21
static/admin/previews/field-previews/draft-preview.js
Normal file
21
static/admin/previews/field-previews/draft-preview.js
Normal file
@ -0,0 +1,21 @@
|
||||
const DraftPreview = ({ value }) =>
|
||||
h(
|
||||
"div",
|
||||
{
|
||||
style: {
|
||||
backgroundColor: value === true ? "rgb(37 99 235)" : "rgb(22 163 74)",
|
||||
color: "white",
|
||||
border: "none",
|
||||
padding: "2px 6px",
|
||||
textAlign: "center",
|
||||
textDecoration: "none",
|
||||
display: "inline-block",
|
||||
cursor: "pointer",
|
||||
borderRadius: "4px",
|
||||
fontSize: "14px",
|
||||
},
|
||||
},
|
||||
value ? "Entwurf" : "Veröffentlicht"
|
||||
);
|
||||
|
||||
export default DraftPreview;
|
13
static/admin/previews/field-previews/index.js
Normal file
13
static/admin/previews/field-previews/index.js
Normal file
@ -0,0 +1,13 @@
|
||||
import BooleanPreview from "./boolean-preview.js";
|
||||
import DraftPreview from "./draft-preview.js";
|
||||
import CountPreview from "./count-preview.js";
|
||||
import BodyPreview from "./body-preview.js";
|
||||
import DraftPreview from "./draft-preview.js";
|
||||
|
||||
export {
|
||||
BooleanPreview,
|
||||
DraftPreview,
|
||||
CountPreview,
|
||||
BodyPreview,
|
||||
DraftPreview,
|
||||
};
|
32
static/admin/previews/page-previews/abiturienten-preview.js
Normal file
32
static/admin/previews/page-previews/abiturienten-preview.js
Normal file
@ -0,0 +1,32 @@
|
||||
import { Container, PageHeader, Section, Row } from "./components/index.js";
|
||||
|
||||
const AbiturientenPreview = ({ widgetFor, entry, collection, fields }) => {
|
||||
const imageField = useMemo(
|
||||
() => fields.find((field) => field.name === "image"),
|
||||
[fields]
|
||||
);
|
||||
|
||||
const imageUrl = useMediaAsset(
|
||||
entry.data.image,
|
||||
collection,
|
||||
imageField,
|
||||
entry
|
||||
);
|
||||
return [
|
||||
PageHeader(entry),
|
||||
Section(
|
||||
Container(
|
||||
Row([
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-12 mb-4" },
|
||||
h("img", { className: "img-fluid w-100", src: imageUrl })
|
||||
),
|
||||
h("div", { className: "col-12 content" }, widgetFor("body")),
|
||||
])
|
||||
)
|
||||
),
|
||||
];
|
||||
};
|
||||
|
||||
export default AbiturientenPreview;
|
64
static/admin/previews/page-previews/about-preview.js
Normal file
64
static/admin/previews/page-previews/about-preview.js
Normal file
@ -0,0 +1,64 @@
|
||||
import { PageHeader } from "./components/index.js";
|
||||
|
||||
const AboutPreview = ({ widgetFor, widgetsFor, entry, fields, collection }) => {
|
||||
const imageField = useMemo(
|
||||
() => fields.find((field) => field.name === "image"),
|
||||
[fields]
|
||||
);
|
||||
|
||||
const imageUrl = useMediaAsset(
|
||||
entry.data.image,
|
||||
collection,
|
||||
imageField,
|
||||
entry
|
||||
);
|
||||
return [
|
||||
PageHeader(entry),
|
||||
h(
|
||||
"section",
|
||||
{ className: "section-sm" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "container" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "row" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-12" },
|
||||
h("img", { className: "img-fluid w-100 mb-4", src: imageUrl }),
|
||||
widgetFor("body")
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
entry.data.stats.enable
|
||||
? h(
|
||||
"section",
|
||||
{ className: "section-sm bg-primary" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "container" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "row" },
|
||||
widgetsFor("stats").data.zahlen.map((element) => {
|
||||
return h(
|
||||
"div",
|
||||
{ className: "col-md-4 col-sm-6 mb-4 mb-md-0" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "text-center" },
|
||||
h("h2", { className: "count text-white" }, element.count),
|
||||
h("h5", { className: "text-white" }, element.name)
|
||||
)
|
||||
);
|
||||
})
|
||||
)
|
||||
)
|
||||
)
|
||||
: null,
|
||||
];
|
||||
};
|
||||
|
||||
export default AboutPreview;
|
159
static/admin/previews/page-previews/anmeldeformular-preview.js
Normal file
159
static/admin/previews/page-previews/anmeldeformular-preview.js
Normal file
@ -0,0 +1,159 @@
|
||||
import { PageHeader } from "./components/index.js";
|
||||
|
||||
const AnmeldeformularPreview = ({ widgetFor, entry }) => {
|
||||
return [
|
||||
PageHeader(entry),
|
||||
h(
|
||||
"section",
|
||||
{ className: "section-sm bg-gray" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "container" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "row" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-lg-8 mb-4 mb-lg-0" },
|
||||
h(
|
||||
"form",
|
||||
{},
|
||||
h(
|
||||
"div",
|
||||
{ className: "input-group" },
|
||||
h("input", {
|
||||
className: "form-control mb-3",
|
||||
type: "text",
|
||||
placeholder: "Name (Schüler/in)",
|
||||
}),
|
||||
h("input", {
|
||||
className: "form-control mb-3",
|
||||
type: "text",
|
||||
placeholder: "Vorname",
|
||||
})
|
||||
),
|
||||
h(
|
||||
"div",
|
||||
{ className: "input-group mb-3" },
|
||||
h("span", { className: "input-group-text" }, "Geburtsdatum"),
|
||||
h("input", { className: "form-control", type: "date" })
|
||||
),
|
||||
h("input", {
|
||||
className: "form-control mb-3",
|
||||
type: "text",
|
||||
placeholder: "Straße",
|
||||
}),
|
||||
h(
|
||||
"div",
|
||||
{ className: "input-group" },
|
||||
h("input", {
|
||||
className: "form-control mb-3",
|
||||
type: "text",
|
||||
placeholder: "Hausnummer",
|
||||
}),
|
||||
h("input", {
|
||||
className: "form-control mb-3",
|
||||
type: "text",
|
||||
placeholder: "Adresszusatz",
|
||||
})
|
||||
),
|
||||
h(
|
||||
"div",
|
||||
{ className: "input-group" },
|
||||
h("input", {
|
||||
className: "form-control mb-3",
|
||||
type: "text",
|
||||
placeholder: "PLZ",
|
||||
}),
|
||||
h("input", {
|
||||
className: "form-control mb-3",
|
||||
type: "text",
|
||||
placeholder: "Stadt",
|
||||
})
|
||||
),
|
||||
h("input", {
|
||||
className: "form-control mb-3",
|
||||
type: "text",
|
||||
placeholder: "Landkreis",
|
||||
}),
|
||||
h(
|
||||
"div",
|
||||
{ className: "input-group" },
|
||||
h("input", {
|
||||
className: "form-control mb-3",
|
||||
type: "text",
|
||||
placeholder: "Telefon privat",
|
||||
}),
|
||||
h("input", {
|
||||
className: "form-control mb-3",
|
||||
type: "text",
|
||||
placeholder: "Telefon dienstl.",
|
||||
})
|
||||
),
|
||||
h("input", {
|
||||
className: "form-control mb-3",
|
||||
type: "text",
|
||||
placeholder: "Abweichender Elternname",
|
||||
}),
|
||||
h("input", {
|
||||
className: "form-control mb-3",
|
||||
type: "text",
|
||||
placeholder: "Grundschule",
|
||||
}),
|
||||
h("input", {
|
||||
className: "form-control mb-3",
|
||||
type: "text",
|
||||
placeholder: "Ihre E-Mail-Adresse",
|
||||
}),
|
||||
h("textarea", {
|
||||
className: "form-control mb-3",
|
||||
placeholder: "Bemerkungen",
|
||||
}),
|
||||
h(
|
||||
"div",
|
||||
{ className: "input-group mb-3" },
|
||||
h("input", { className: "form-control", type: "file" }),
|
||||
h(
|
||||
"span",
|
||||
{ className: "input-group-text" },
|
||||
"Zeugnis (Vorderseite)"
|
||||
)
|
||||
),
|
||||
h(
|
||||
"div",
|
||||
{ className: "input-group mb-3" },
|
||||
h("input", { className: "form-control", type: "file" }),
|
||||
h(
|
||||
"span",
|
||||
{ className: "input-group-text" },
|
||||
"Zeugnis (Rückseite)"
|
||||
)
|
||||
),
|
||||
h(
|
||||
"div",
|
||||
{ className: "input-group mb-3" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "input-group-text" },
|
||||
h("input", {
|
||||
className: "form-check-input",
|
||||
type: "checkbox",
|
||||
})
|
||||
),
|
||||
h(
|
||||
"p",
|
||||
{ className: "form-control mb-0" },
|
||||
"Hiermit melden wir unser Kind verbindlich zur Aufnahmeprüfung an."
|
||||
)
|
||||
),
|
||||
h("button", { className: "btn btn-primary" }, "Senden")
|
||||
)
|
||||
),
|
||||
h("div", { className: "col-lg-4" }, widgetFor("body"))
|
||||
)
|
||||
)
|
||||
),
|
||||
];
|
||||
};
|
||||
|
||||
export default AnmeldeformularPreview;
|
44
static/admin/previews/page-previews/anmeldung-preview.js
Normal file
44
static/admin/previews/page-previews/anmeldung-preview.js
Normal file
@ -0,0 +1,44 @@
|
||||
import { PageHeader } from "./components/index.js";
|
||||
|
||||
const AnmeldungPreview = ({ widgetsFor, widgetFor, entry }) => {
|
||||
return [
|
||||
PageHeader(entry),
|
||||
h(
|
||||
"section",
|
||||
{ className: "section-sm" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "container" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "row mb-4" },
|
||||
h("div", { className: "col-md-6 content" }, widgetFor("body"))
|
||||
),
|
||||
h(
|
||||
"div",
|
||||
{ className: "row" },
|
||||
widgetsFor("elements").map(function (element, index) {
|
||||
return h(
|
||||
"div",
|
||||
{
|
||||
className: "col-lg-6 col-sm-6 mb-4 d-flex align-items-stretch",
|
||||
},
|
||||
h(
|
||||
"div",
|
||||
{ className: "card rounded-0 hover-shadow border-primary" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "card-body" },
|
||||
h("h4", { className: "card-title mb-3" }, element.data.title),
|
||||
h("div", { className: "content" }, element.widgets.content)
|
||||
)
|
||||
)
|
||||
);
|
||||
})
|
||||
)
|
||||
)
|
||||
),
|
||||
];
|
||||
};
|
||||
|
||||
export default AnmeldungPreview;
|
72
static/admin/previews/page-previews/author-preview.js
Normal file
72
static/admin/previews/page-previews/author-preview.js
Normal file
@ -0,0 +1,72 @@
|
||||
import { PageHeader, md5 } from "./components/index.js";
|
||||
|
||||
const AuthorPreview = ({ widgetFor, entry, fields, collection }) => {
|
||||
const imageField = useMemo(
|
||||
() => fields.find((field) => field.name === "image"),
|
||||
[fields]
|
||||
);
|
||||
|
||||
const imageUrl = entry.data.image
|
||||
? useMediaAsset(entry.data.image, collection, imageField, entry)
|
||||
: entry.data.email
|
||||
? undefined
|
||||
: useMediaAsset("/media/people/gcg.webp", collection, imageField, entry);
|
||||
|
||||
return [
|
||||
PageHeader(entry),
|
||||
h(
|
||||
"section",
|
||||
{ className: "section-sm bg-light" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "container" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "row" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-lg-10 mx-auto" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "text-center" },
|
||||
h(
|
||||
"figure",
|
||||
{},
|
||||
h("img", {
|
||||
className: "rounded-circle img-fluid mb-4",
|
||||
src:
|
||||
imageUrl ??
|
||||
"https://www.gravatar.com/avatar/" +
|
||||
md5(entry.data.email) +
|
||||
"?s=128&pg&d=identicon",
|
||||
width: "128px",
|
||||
}),
|
||||
h(
|
||||
"figcaption",
|
||||
{},
|
||||
h("h4", { className: "fw-bold" }, entry.data.title)
|
||||
)
|
||||
),
|
||||
h("hr"),
|
||||
widgetFor("body"),
|
||||
h("hr"),
|
||||
h(
|
||||
"ul",
|
||||
{ className: "list-inline" },
|
||||
entry.data.email
|
||||
? h(
|
||||
"li",
|
||||
{ className: "list-inline-item" },
|
||||
h("i", { className: "mdi mdi-at" })
|
||||
)
|
||||
: null
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
];
|
||||
};
|
||||
|
||||
export default AuthorPreview;
|
89
static/admin/previews/page-previews/blog-preview.js
Normal file
89
static/admin/previews/page-previews/blog-preview.js
Normal file
@ -0,0 +1,89 @@
|
||||
import {
|
||||
DateFormat,
|
||||
PageHeader,
|
||||
Section,
|
||||
Container,
|
||||
Col12,
|
||||
Row,
|
||||
} from "./components/index.js";
|
||||
|
||||
const BlogPreview = ({ widgetFor, entry, fields, collection }) => {
|
||||
const imageField = useMemo(() => {
|
||||
return fields.find((field) => field.name === "image");
|
||||
}, [fields]);
|
||||
|
||||
const imageUrl = useMediaAsset(
|
||||
entry.data.image,
|
||||
collection,
|
||||
imageField,
|
||||
entry
|
||||
);
|
||||
return [
|
||||
PageHeader(entry),
|
||||
Section(
|
||||
Container(
|
||||
Row([
|
||||
h(
|
||||
"div",
|
||||
{ key: "cover-image", className: "col-12 mb-4" },
|
||||
h("img", { className: "img-fluid w-100", src: imageUrl })
|
||||
),
|
||||
Col12(
|
||||
h(
|
||||
"div",
|
||||
{ className: "row mb-3" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-6 mb-md-0 text-light" },
|
||||
h("span", { className: "fw-bold me-1" }, "Geschrieben von:"),
|
||||
entry.data.author
|
||||
),
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-6 mb-3 mb-md-0 text-light" },
|
||||
h("span", { className: "fw-bold me-1" }, "Datum:"),
|
||||
entry.data.date
|
||||
? DateFormat({
|
||||
date: entry.data.date,
|
||||
format: {
|
||||
day: "numeric",
|
||||
month: "short",
|
||||
year: "numeric",
|
||||
},
|
||||
})
|
||||
: ""
|
||||
)
|
||||
)
|
||||
),
|
||||
Row(
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-12 mb-md-0 text-light" },
|
||||
h("span", { className: "fw-bold me-1" }, "Kategorie:"),
|
||||
entry.data.categories
|
||||
? entry.data.categories.map(
|
||||
(category, index) => (index != 0 ? ", " : "") + category
|
||||
)
|
||||
: ""
|
||||
)
|
||||
),
|
||||
h(
|
||||
"div",
|
||||
{ key: "border-bottom", className: "col-12 my-4" },
|
||||
h("div", { className: "border-bottom" })
|
||||
),
|
||||
h(
|
||||
"div",
|
||||
{
|
||||
key: "body-content",
|
||||
className: "col-12 mb-5 content content-justify",
|
||||
},
|
||||
widgetFor("body")
|
||||
),
|
||||
])
|
||||
)
|
||||
),
|
||||
];
|
||||
};
|
||||
|
||||
export default BlogPreview;
|
49
static/admin/previews/page-previews/cantorpreis-preview.js
Normal file
49
static/admin/previews/page-previews/cantorpreis-preview.js
Normal file
@ -0,0 +1,49 @@
|
||||
import {
|
||||
PageHeader,
|
||||
Section,
|
||||
Container,
|
||||
Row,
|
||||
Content,
|
||||
} from "./components/index.js";
|
||||
|
||||
const CantorpreisPreview = ({ widgetFor, entry, fields, collection }) => {
|
||||
const imageField = useMemo(
|
||||
() => fields.find((field) => field.name === "image"),
|
||||
[fields]
|
||||
);
|
||||
|
||||
const imageUrl = useMediaAsset(
|
||||
entry.data.image,
|
||||
collection,
|
||||
imageField,
|
||||
entry
|
||||
);
|
||||
|
||||
return [
|
||||
PageHeader(entry),
|
||||
Section(
|
||||
Container(
|
||||
Row([
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-md-5 mb-5" },
|
||||
h("img", {
|
||||
className: "img-fluid w-75",
|
||||
src: imageUrl,
|
||||
alt: entry.data.name,
|
||||
})
|
||||
),
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-md-7 mb-5" },
|
||||
h("h3", {}, entry.data.name),
|
||||
h("h6", { className: "text-color" }, entry.data.title),
|
||||
Content(widgetFor("body"))
|
||||
),
|
||||
])
|
||||
)
|
||||
),
|
||||
];
|
||||
};
|
||||
|
||||
export default CantorpreisPreview;
|
113
static/admin/previews/page-previews/chronik-index-preview.js
Normal file
113
static/admin/previews/page-previews/chronik-index-preview.js
Normal file
@ -0,0 +1,113 @@
|
||||
import { PageHeader } from "./components/index.js";
|
||||
|
||||
const ChronikIndexPreview = ({
|
||||
widgetFor,
|
||||
widgetsFor,
|
||||
entry,
|
||||
fields,
|
||||
collection,
|
||||
}) => {
|
||||
const imageField = useMemo(
|
||||
() => fields.find((field) => field.name === "image"),
|
||||
[fields]
|
||||
);
|
||||
|
||||
const imageUrl = useMediaAsset(
|
||||
widgetsFor("infocard").data.image,
|
||||
collection,
|
||||
imageField,
|
||||
entry
|
||||
);
|
||||
return [
|
||||
PageHeader(entry),
|
||||
h(
|
||||
"section",
|
||||
{ className: "section-sm" },
|
||||
h("div", { className: "container" }, widgetFor("body")),
|
||||
widgetsFor("infocard").data.enable
|
||||
? h(
|
||||
"div",
|
||||
{ className: "container" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "card mb-3" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "row g-0" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-md-3" },
|
||||
h("img", {
|
||||
className: "img-fluid rounded w-100",
|
||||
src: imageUrl,
|
||||
})
|
||||
),
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-md-9 d-flex align-items-center" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "card-body" },
|
||||
h(
|
||||
"p",
|
||||
{ className: "h2 card-title" },
|
||||
widgetsFor("infocard").data.quote
|
||||
),
|
||||
h(
|
||||
"p",
|
||||
{ className: "card-text" },
|
||||
h(
|
||||
"small",
|
||||
{ className: "text-muted" },
|
||||
widgetsFor("infocard").data.author
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
: null,
|
||||
h(
|
||||
"div",
|
||||
{ className: "container" },
|
||||
h("h2", { className: "section-title" }, "Informationsseiten"),
|
||||
h(
|
||||
"div",
|
||||
{ className: "row" },
|
||||
widgetsFor("links").map((element) =>
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-lg-4 col-sm-6" },
|
||||
h(
|
||||
"div",
|
||||
{
|
||||
className: "card border-primary rounded-0 hover-shadow mb-4",
|
||||
},
|
||||
h(
|
||||
"div",
|
||||
{ className: "card-body" },
|
||||
h(
|
||||
"h4",
|
||||
{ className: "card-title text-truncate" },
|
||||
h("a", { href: element.data.link }, element.data.title)
|
||||
),
|
||||
h(
|
||||
"a",
|
||||
{
|
||||
className: "btn btn-primary btn-sm",
|
||||
href: element.data.link,
|
||||
},
|
||||
"Mehr anzeigen"
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
];
|
||||
};
|
||||
|
||||
export default ChronikIndexPreview;
|
78
static/admin/previews/page-previews/chronik-preview.js
Normal file
78
static/admin/previews/page-previews/chronik-preview.js
Normal file
@ -0,0 +1,78 @@
|
||||
import { PageHeader } from "./components/index.js";
|
||||
|
||||
const ChronikPreview = ({ widgetFor, widgetsFor, entry, document, window }) => {
|
||||
/*return [PageHeader,
|
||||
h('section', {className: "section-sm"},
|
||||
h('div', {className: "container"},
|
||||
h('div', {className: "row"},
|
||||
h('div', {className: "col-12 mb-4 content"},
|
||||
widgetsFor('topics').map(function(i, index) {
|
||||
return h('div', {"id": i.data.id, className: "modal"},
|
||||
h('div', {className: "modal-dialog modal-lg", "role": "document"},
|
||||
h('div', {className: "modal-content"},
|
||||
h('div', {className: "modal-header"},
|
||||
h('h5', {className: "modal-title"}, i.data.title),
|
||||
h('button', {className: "close", type: "button", "dataDismiss": "modal", "ariaLabel": "Close"},
|
||||
h('span', {"ariaHidden": "true"}, '\u{00d7}')
|
||||
)
|
||||
),
|
||||
h('div', {className: "modal-body"},
|
||||
h('div', {className: "content"}, i.content)
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
}),
|
||||
entry.data.pretext != "" && entry.data.pretext != null ? h('div', {"id": "pretext", className: "modal"},
|
||||
h('div', {className: "modal-dialog modal-lg", "role": "document"},
|
||||
h('div', {className: "modal-content"},
|
||||
h('div', {className: "modal-header"},
|
||||
h('h5', {className: "modal-title"}, entry.data.title),
|
||||
h('button', {className: "close", type: "button", "dataDismiss": "modal", "ariaLabel": "Close"},
|
||||
h('span', {"ariaHidden": "true"}, '\u{00d7}')
|
||||
)
|
||||
),
|
||||
h('div', {className: "modal-body"},
|
||||
h('div', {className: "content"}, widgetFor('pretext'))
|
||||
)
|
||||
)
|
||||
)
|
||||
) : null,
|
||||
h('div', {"id": "wc-canvas"}),
|
||||
() => {
|
||||
var topics = [[entry.data.title, 100, "pretext"]];
|
||||
widgetsFor('topics').map(function(i, index) {
|
||||
topics.push([i.data.title, 40, i.data.id]);
|
||||
});
|
||||
var script = document.createElement('script');
|
||||
var div = document.getElementById('sc-root');
|
||||
div.appendChild(script);
|
||||
WordCloud(
|
||||
document.getElementById('wc-canvas'),
|
||||
{
|
||||
click: function (item) {
|
||||
if (item[1] != 100 || (item[1] == 100 && item[2] == "pretext")) {
|
||||
$('#' + item[2]).modal('show');
|
||||
}
|
||||
},
|
||||
color: function (word, weight) {
|
||||
return (weight === 100) ? '#ffbc3b' : '#1a1a37';
|
||||
},
|
||||
fontFamily: 'Fira Sans, serif',
|
||||
fontWeight: 800,
|
||||
list: topics,
|
||||
shrinkToFit: true,
|
||||
gridSize: 25,
|
||||
rotateRatio: 0,
|
||||
}
|
||||
);
|
||||
},
|
||||
widgetFor('body')
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
];*/
|
||||
};
|
||||
|
||||
export default ChronikPreview;
|
8
static/admin/previews/page-previews/components/base.js
Normal file
8
static/admin/previews/page-previews/components/base.js
Normal file
@ -0,0 +1,8 @@
|
||||
const Section = (children) =>
|
||||
h("section", { className: "section-sm" }, children);
|
||||
const Container = (children) => h("div", { className: "container" }, children);
|
||||
const Row = (children) => h("div", { className: "row" }, children);
|
||||
const Content = (children) => h("div", { className: "content" }, children);
|
||||
const Col12 = (children) => h("div", { className: "col-12" }, children);
|
||||
|
||||
export { Section, Container, Row, Content, Col12 };
|
@ -0,0 +1,5 @@
|
||||
const DateFormat = ({ date, format }) => {
|
||||
return new Intl.DateTimeFormat("de-DE", format).format(new Date(date));
|
||||
};
|
||||
|
||||
export default DateFormat;
|
6
static/admin/previews/page-previews/components/index.js
Normal file
6
static/admin/previews/page-previews/components/index.js
Normal file
@ -0,0 +1,6 @@
|
||||
import PageHeader from "./page-header.js";
|
||||
import DateFormat from "./date-format.js";
|
||||
import md5 from "./md5.js";
|
||||
import { Section, Container, Row, Content, Col12 } from "./base.js";
|
||||
|
||||
export { PageHeader, DateFormat, md5, Section, Container, Row, Content, Col12 };
|
5
static/admin/previews/page-previews/components/md5.js
Normal file
5
static/admin/previews/page-previews/components/md5.js
Normal file
@ -0,0 +1,5 @@
|
||||
function md5gen(d){return rstr2hex(binl2rstr(binl_md5(rstr2binl(d),8*d.length)))}function rstr2hex(d){for(var _,m="0123456789ABCDEF",f="",r=0;r<d.length;r++)_=d.charCodeAt(r),f+=m.charAt(_>>>4&15)+m.charAt(15&_);return f}function rstr2binl(d){for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0;for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<<m%32;return _}function binl2rstr(d){for(var _="",m=0;m<32*d.length;m+=8)_+=String.fromCharCode(d[m>>5]>>>m%32&255);return _}function binl_md5(d,_){d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_;for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n<d.length;n+=16){var h=m,t=f,g=r,e=i;f=md5_ii(f=md5_ii(f=md5_ii(f=md5_ii(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_ff(f=md5_ff(f=md5_ff(f=md5_ff(f,r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+0],7,-680876936),f,r,d[n+1],12,-389564586),m,f,d[n+2],17,606105819),i,m,d[n+3],22,-1044525330),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+4],7,-176418897),f,r,d[n+5],12,1200080426),m,f,d[n+6],17,-1473231341),i,m,d[n+7],22,-45705983),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+8],7,1770035416),f,r,d[n+9],12,-1958414417),m,f,d[n+10],17,-42063),i,m,d[n+11],22,-1990404162),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+12],7,1804603682),f,r,d[n+13],12,-40341101),m,f,d[n+14],17,-1502002290),i,m,d[n+15],22,1236535329),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+1],5,-165796510),f,r,d[n+6],9,-1069501632),m,f,d[n+11],14,643717713),i,m,d[n+0],20,-373897302),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+5],5,-701558691),f,r,d[n+10],9,38016083),m,f,d[n+15],14,-660478335),i,m,d[n+4],20,-405537848),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+9],5,568446438),f,r,d[n+14],9,-1019803690),m,f,d[n+3],14,-187363961),i,m,d[n+8],20,1163531501),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+13],5,-1444681467),f,r,d[n+2],9,-51403784),m,f,d[n+7],14,1735328473),i,m,d[n+12],20,-1926607734),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+5],4,-378558),f,r,d[n+8],11,-2022574463),m,f,d[n+11],16,1839030562),i,m,d[n+14],23,-35309556),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+1],4,-1530992060),f,r,d[n+4],11,1272893353),m,f,d[n+7],16,-155497632),i,m,d[n+10],23,-1094730640),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+13],4,681279174),f,r,d[n+0],11,-358537222),m,f,d[n+3],16,-722521979),i,m,d[n+6],23,76029189),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+9],4,-640364487),f,r,d[n+12],11,-421815835),m,f,d[n+15],16,530742520),i,m,d[n+2],23,-995338651),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+0],6,-198630844),f,r,d[n+7],10,1126891415),m,f,d[n+14],15,-1416354905),i,m,d[n+5],21,-57434055),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+12],6,1700485571),f,r,d[n+3],10,-1894986606),m,f,d[n+10],15,-1051523),i,m,d[n+1],21,-2054922799),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+8],6,1873313359),f,r,d[n+15],10,-30611744),m,f,d[n+6],15,-1560198380),i,m,d[n+13],21,1309151649),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+4],6,-145523070),f,r,d[n+11],10,-1120210379),m,f,d[n+2],15,718787259),i,m,d[n+9],21,-343485551),m=safe_add(m,h),f=safe_add(f,t),r=safe_add(r,g),i=safe_add(i,e)}return Array(m,f,r,i)}function md5_cmn(d,_,m,f,r,i){return safe_add(bit_rol(safe_add(safe_add(_,d),safe_add(f,i)),r),m)}function md5_ff(d,_,m,f,r,i,n){return md5_cmn(_&m|~_&f,d,_,r,i,n)}function md5_gg(d,_,m,f,r,i,n){return md5_cmn(_&f|m&~f,d,_,r,i,n)}function md5_hh(d,_,m,f,r,i,n){return md5_cmn(_^m^f,d,_,r,i,n)}function md5_ii(d,_,m,f,r,i,n){return md5_cmn(m^(_|~f),d,_,r,i,n)}function safe_add(d,_){var m=(65535&d)+(65535&_);return(d>>16)+(_>>16)+(m>>16)<<16|65535&m}function bit_rol(d,_){return d<<_|d>>>32-_}
|
||||
|
||||
const md5 = (string) => md5gen(unescape(encodeURIComponent(string))).toLowerCase();
|
||||
|
||||
export default md5;
|
@ -0,0 +1,51 @@
|
||||
const PageHeader = (entry) => {
|
||||
return h(
|
||||
"section",
|
||||
{
|
||||
key: "page-header",
|
||||
className: "page-title-section overlay",
|
||||
style: {
|
||||
backgroundImage:
|
||||
'url("/media/backgrounds/page-title.webp"),url("/media/backgrounds/page-title.webp")',
|
||||
},
|
||||
},
|
||||
h(
|
||||
"div",
|
||||
{ className: "container" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "row" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-md-8 position-relative" },
|
||||
h(
|
||||
"ul",
|
||||
{ className: "list-inline" },
|
||||
h(
|
||||
"li",
|
||||
{ className: "list-inline-item h2" },
|
||||
h(
|
||||
"font",
|
||||
{ className: "text-primary font-secondary", href: "" },
|
||||
"Startseite"
|
||||
)
|
||||
),
|
||||
h(
|
||||
"li",
|
||||
{ className: "list-inline-item h2" },
|
||||
h("i", { className: "mdi mdi-chevron-double-right text-white" })
|
||||
),
|
||||
h(
|
||||
"li",
|
||||
{ className: "list-inline-item text-white h2 font-secondary" },
|
||||
entry.data.title
|
||||
)
|
||||
),
|
||||
h("p", { className: "text-lighten" }, entry.data.description)
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
export default PageHeader;
|
67
static/admin/previews/page-previews/contest-preview.js
Normal file
67
static/admin/previews/page-previews/contest-preview.js
Normal file
@ -0,0 +1,67 @@
|
||||
import { Container, PageHeader, Row, Section } from "./components/index.js";
|
||||
|
||||
const ContestPreview = ({ widgetFor, entry, fields, collection }) => {
|
||||
const imageField = useMemo(() => {
|
||||
return fields.find((field) => field.name === "image");
|
||||
}, [fields]);
|
||||
|
||||
const imageUrl = useMediaAsset(
|
||||
entry.data.image,
|
||||
collection,
|
||||
imageField,
|
||||
entry
|
||||
);
|
||||
return [
|
||||
PageHeader(entry),
|
||||
Section(
|
||||
Container([
|
||||
entry.data.image &&
|
||||
!["/media/contests/image.webp", "/media/begabte/image.webp"].includes(
|
||||
entry.data.image
|
||||
)
|
||||
? Row(
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-12 mb-4" },
|
||||
h("img", { className: "img-fluid w-100", src: imageUrl })
|
||||
)
|
||||
)
|
||||
: null,
|
||||
h(
|
||||
"div",
|
||||
{ className: "row mb-4" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-7" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "d-flex align-items-center" },
|
||||
h("i", { className: "mdi mdi-crowd text-primary icon-md me-2" }),
|
||||
h(
|
||||
"div",
|
||||
{ className: "text-start" },
|
||||
h("h6", { className: "mb-0" }, "KLASSE(N)"),
|
||||
h("p", { className: "mb-0" }, entry.data.class)
|
||||
)
|
||||
)
|
||||
),
|
||||
entry.data.web_url
|
||||
? h(
|
||||
"div",
|
||||
{ className: "col-5 text-end mb-4 mb-xl-0" },
|
||||
h("a", { className: "btn btn-primary" }, "Website")
|
||||
)
|
||||
: null,
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-12 mt-4" },
|
||||
h("div", { className: "border-bottom border-primary" })
|
||||
)
|
||||
),
|
||||
Row(h("div", { className: "col-12 content" }, widgetFor("body"))),
|
||||
])
|
||||
),
|
||||
];
|
||||
};
|
||||
|
||||
export default ContestPreview;
|
147
static/admin/previews/page-previews/event-preview.js
Normal file
147
static/admin/previews/page-previews/event-preview.js
Normal file
@ -0,0 +1,147 @@
|
||||
import { PageHeader, DateFormat } from "./components/index.js";
|
||||
|
||||
function isFuture(date, enddate) {
|
||||
let date1 = new Date(date ? date : 0);
|
||||
let date2 = new Date(enddate ? enddate : 0);
|
||||
let present = new Date();
|
||||
if (date1 >= present || date2 >= present) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
const EventPreview = ({ widgetsFor, entry }) => {
|
||||
return [
|
||||
PageHeader(entry),
|
||||
h(
|
||||
"section",
|
||||
{ className: "section-sm" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "container" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "row" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-12" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "row" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-12" },
|
||||
h(
|
||||
"ul",
|
||||
{ className: "list-inline text-center filter-controls mb-5" },
|
||||
h(
|
||||
"li",
|
||||
{ className: "list-inline-item m-3 text-uppercase active" },
|
||||
"Alle"
|
||||
),
|
||||
h(
|
||||
"li",
|
||||
{ className: "list-inline-item m-3 text-uppercase" },
|
||||
"Anstehend"
|
||||
),
|
||||
h(
|
||||
"li",
|
||||
{ className: "list-inline-item m-3 text-uppercase" },
|
||||
"Vergangen"
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
h(
|
||||
"div",
|
||||
{ className: "filtr-container" },
|
||||
widgetsFor("events").map((event) =>
|
||||
h(
|
||||
"div",
|
||||
{ className: "mb-2 mt-2 col-12 filtr-item" },
|
||||
h(
|
||||
"div",
|
||||
{
|
||||
className:
|
||||
"card d-md-table w-100 hover-shadow border-primary ps-0 pe-0 mb-4",
|
||||
},
|
||||
h(
|
||||
"div",
|
||||
{
|
||||
className:
|
||||
"d-md-table-cell text-center p-4 bg-primary text-white mb-4 mb-md-0 termin-tc rounded",
|
||||
},
|
||||
h(
|
||||
"span",
|
||||
{ className: "h2 d-block" },
|
||||
event.data.date != null && event.data.date != ""
|
||||
? DateFormat({
|
||||
date: event.data.date,
|
||||
format: { day: "numeric" },
|
||||
})
|
||||
: null
|
||||
),
|
||||
h(
|
||||
"span",
|
||||
{ className: "d-block" },
|
||||
event.data.date != null && event.data.date != ""
|
||||
? DateFormat({
|
||||
date: event.data.date,
|
||||
format: { month: "short", year: "numeric" },
|
||||
})
|
||||
: null
|
||||
),
|
||||
event.data.enddate != null && event.data.enddate != ""
|
||||
? [
|
||||
h("br"),
|
||||
"bis " +
|
||||
DateFormat({
|
||||
date: event.data.enddate,
|
||||
format: {
|
||||
day: "numeric",
|
||||
month: "short",
|
||||
year: "numeric",
|
||||
},
|
||||
}),
|
||||
]
|
||||
: null
|
||||
),
|
||||
h(
|
||||
"div",
|
||||
{
|
||||
className:
|
||||
"d-md-table-cell px-4 vertical-align-middle mb-4 mb-md-0 p-2",
|
||||
},
|
||||
h("p", { className: "h4 mb-0 d-block" }, event.data.title)
|
||||
),
|
||||
event.data.location
|
||||
? h(
|
||||
"div",
|
||||
{
|
||||
className:
|
||||
"d-md-table-cell text-end pe-md-4 p-2 vertical-align-middle",
|
||||
},
|
||||
h(
|
||||
"p",
|
||||
{},
|
||||
h("i", {
|
||||
className:
|
||||
"mdi mdi-map-marker-radius-outline icon-s text-primary me-2",
|
||||
}),
|
||||
event.data.location
|
||||
)
|
||||
)
|
||||
: null
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
];
|
||||
};
|
||||
|
||||
export default EventPreview;
|
64
static/admin/previews/page-previews/forms-preview.js
Normal file
64
static/admin/previews/page-previews/forms-preview.js
Normal file
@ -0,0 +1,64 @@
|
||||
import { PageHeader } from "./components/index.js";
|
||||
|
||||
const FormsPreview = ({ widgetsFor, widgetFor, entry }) => {
|
||||
return [
|
||||
PageHeader(entry),
|
||||
h(
|
||||
"section",
|
||||
{ className: "section-sm" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "container" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "row" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-12" },
|
||||
h("h2", { className: "section-title" }, entry.data.title)
|
||||
)
|
||||
),
|
||||
h(
|
||||
"div",
|
||||
{ className: "row" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-12 content" },
|
||||
widgetsFor("files").map((file) =>
|
||||
h(
|
||||
"div",
|
||||
{ className: "container mb-0" },
|
||||
h(
|
||||
"div",
|
||||
{
|
||||
className:
|
||||
"card border-primary rounded-0 hover-shadow mb-5",
|
||||
},
|
||||
h(
|
||||
"div",
|
||||
{ className: "card-body mb-0" },
|
||||
h("h4", { className: "card-title" }, file.data.title),
|
||||
h(
|
||||
"a",
|
||||
{
|
||||
className:
|
||||
"text-decoration-none btn btn-primary btn-sm mb-0",
|
||||
},
|
||||
h("i", {
|
||||
className: "mdi mdi-tray-arrow-down mb-0 me-2",
|
||||
}),
|
||||
"Download"
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
widgetFor("body")
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
];
|
||||
};
|
||||
|
||||
export default FormsPreview;
|
127
static/admin/previews/page-previews/ganztag-preview.js
Normal file
127
static/admin/previews/page-previews/ganztag-preview.js
Normal file
@ -0,0 +1,127 @@
|
||||
import {
|
||||
Col12,
|
||||
Container,
|
||||
PageHeader,
|
||||
Row,
|
||||
Section,
|
||||
} from "./components/index.js";
|
||||
|
||||
const GanztagPreview = ({
|
||||
widgetFor,
|
||||
widgetsFor,
|
||||
entry,
|
||||
fields,
|
||||
collection,
|
||||
}) => {
|
||||
const imageField = useMemo(() => {
|
||||
return fields.find((field) => field.name === "image");
|
||||
}, [fields]);
|
||||
|
||||
const imageUrl = useMediaAsset(
|
||||
entry.data.image,
|
||||
collection,
|
||||
imageField,
|
||||
entry
|
||||
);
|
||||
return [
|
||||
PageHeader(entry),
|
||||
Section(
|
||||
Container([
|
||||
Row(
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-12 mb-4" },
|
||||
h("img", { className: "img-fluid w-100", src: imageUrl })
|
||||
)
|
||||
),
|
||||
h("h2", {}, entry.data.title),
|
||||
h(
|
||||
"div",
|
||||
{ className: "row align-items-center mb-4" },
|
||||
Col12(
|
||||
Row([
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-lg-3 col-sm-6 mb-3 mb-sm-0" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "d-flex align-items-center" },
|
||||
h("i", {
|
||||
className:
|
||||
"mdi mdi-calendar-today-outline text-primary icon-md me-2",
|
||||
}),
|
||||
h(
|
||||
"div",
|
||||
{ className: "text-start" },
|
||||
h("h6", { className: "mb-0" }, "ZEIT"),
|
||||
h("p", { className: "mb-0" }, entry.data.schedule)
|
||||
)
|
||||
)
|
||||
),
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-lg-3 col-sm-6 mb-3 mb-sm-0" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "d-flex align-items-center" },
|
||||
h("i", {
|
||||
className: "mdi mdi-timer-sand text-primary icon-md me-2",
|
||||
}),
|
||||
h(
|
||||
"div",
|
||||
{ className: "text-start" },
|
||||
h("h6", { className: "mb-0" }, "DAUER"),
|
||||
h("p", { className: "mb-0" }, entry.data.duration)
|
||||
)
|
||||
)
|
||||
),
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-lg-3 col-sm-6 mb-3 mb-sm-0" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "d-flex align-items-center" },
|
||||
h("i", {
|
||||
className: "mdi mdi-crowd text-primary icon-md me-2",
|
||||
}),
|
||||
h(
|
||||
"div",
|
||||
{ className: "text-start" },
|
||||
h("h6", { className: "mb-0" }, "KLASSE(N)"),
|
||||
h("p", { className: "mb-0" }, entry.data.class)
|
||||
)
|
||||
)
|
||||
),
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-lg-3 col-sm-6 mb-3 mb-sm-0" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "d-flex align-items-center" },
|
||||
h("i", {
|
||||
className:
|
||||
"mdi mdi-map-marker-radius-outline text-primary icon-md me-2",
|
||||
}),
|
||||
h(
|
||||
"div",
|
||||
{ className: "text-start" },
|
||||
h("h6", { className: "mb-0" }, "RAUM"),
|
||||
h("p", { className: "mb-0" }, entry.data.room)
|
||||
)
|
||||
)
|
||||
),
|
||||
])
|
||||
),
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-12 mt-4" },
|
||||
h("div", { className: "border-bottom border-primary" })
|
||||
)
|
||||
),
|
||||
Row(h("div", { className: "col-12 content" }, widgetFor("body"))),
|
||||
])
|
||||
),
|
||||
];
|
||||
};
|
||||
|
||||
export default GanztagPreview;
|
5
static/admin/previews/page-previews/header-preview.js
Normal file
5
static/admin/previews/page-previews/header-preview.js
Normal file
@ -0,0 +1,5 @@
|
||||
import { PageHeader } from "./components/index.js";
|
||||
|
||||
const HeaderPreview = ({ entry }) => PageHeader(entry);
|
||||
|
||||
export default HeaderPreview;
|
40
static/admin/previews/page-previews/index.js
Normal file
40
static/admin/previews/page-previews/index.js
Normal file
@ -0,0 +1,40 @@
|
||||
import AboutPreview from "./about-preview.js";
|
||||
import BlogPreview from "./blog-preview.js";
|
||||
import ContestPreview from "./contest-preview.js";
|
||||
import GanztagPreview from "./ganztag-preview.js";
|
||||
import PagePreview from "./page-preview.js";
|
||||
import EventPreview from "./event-preview.js";
|
||||
import AnmeldungPreview from "./anmeldung-preview.js";
|
||||
import HeaderPreview from "./header-preview.js";
|
||||
import ChronikPreview from "./chronik-preview.js";
|
||||
import KontaktPreview from "./kontakt-preview.js";
|
||||
import AnmeldeformularPreview from "./anmeldeformular-preview.js";
|
||||
import ChronikIndexPreview from "./chronik-index-preview.js";
|
||||
import AuthorPreview from "./author-preview.js";
|
||||
import FormsPreview from "./forms-preview.js";
|
||||
import CantorpreisPreview from "./cantorpreis-preview.js";
|
||||
import ProjektwochePreview from "./projektwoche-preview.js";
|
||||
import AbiturientenPreview from "./abiturienten-preview.js";
|
||||
|
||||
import PreviewStyles from "./styles.js";
|
||||
|
||||
export {
|
||||
AboutPreview,
|
||||
BlogPreview,
|
||||
ContestPreview,
|
||||
GanztagPreview,
|
||||
PagePreview,
|
||||
EventPreview,
|
||||
AnmeldungPreview,
|
||||
HeaderPreview,
|
||||
ChronikPreview,
|
||||
KontaktPreview,
|
||||
AnmeldeformularPreview,
|
||||
ChronikIndexPreview,
|
||||
AuthorPreview,
|
||||
FormsPreview,
|
||||
CantorpreisPreview,
|
||||
ProjektwochePreview,
|
||||
AbiturientenPreview,
|
||||
PreviewStyles,
|
||||
};
|
98
static/admin/previews/page-previews/kontakt-preview.js
Normal file
98
static/admin/previews/page-previews/kontakt-preview.js
Normal file
@ -0,0 +1,98 @@
|
||||
import { PageHeader } from "./components/index.js";
|
||||
|
||||
const KontaktPreview = ({ widgetsFor, entry }) => {
|
||||
return [
|
||||
PageHeader(entry),
|
||||
h(
|
||||
"section",
|
||||
{ className: "section-sm bg-gray" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "container" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "row" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-lg-6 mb-4 mb-lg-0" },
|
||||
h(
|
||||
"form",
|
||||
{},
|
||||
h("input", {
|
||||
className: "form-control form-control-lg mb-3",
|
||||
type: "text",
|
||||
placeholder: "Ihr Name",
|
||||
}),
|
||||
h("input", {
|
||||
className: "form-control form-control-lg mb-3",
|
||||
type: "text",
|
||||
placeholder: "Ihre E-Mail Adresse",
|
||||
}),
|
||||
h("input", {
|
||||
className: "form-control form-control-lg mb-3",
|
||||
type: "text",
|
||||
placeholder: "Betreff",
|
||||
}),
|
||||
h("textarea", {
|
||||
className: "form-control form-control-lg mb-3",
|
||||
placeholder: "Nachricht",
|
||||
}),
|
||||
h("button", { className: "btn btn-primary" }, "Senden")
|
||||
)
|
||||
),
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-lg-6" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "card" },
|
||||
h("div", { className: "card-header fw-bold" }, "Kontaktdaten"),
|
||||
h(
|
||||
"ul",
|
||||
{ className: "list-group list-group-flush" },
|
||||
widgetsFor("kontaktdaten").map((person) =>
|
||||
h(
|
||||
"li",
|
||||
{ className: "list-group-item" },
|
||||
h("p", { className: "card-title mb-0" }, person.data.name),
|
||||
h(
|
||||
"p",
|
||||
{ className: "text-muted mb-0" },
|
||||
person.data.position
|
||||
),
|
||||
h(
|
||||
"p",
|
||||
{ className: "card-text" },
|
||||
h("i", {
|
||||
className: "mdi mdi-email-multiple-outline me-2",
|
||||
}),
|
||||
person.data.email.replace("@", "(at)")
|
||||
)
|
||||
)
|
||||
),
|
||||
h(
|
||||
"li",
|
||||
{ className: "list-group-item" },
|
||||
h(
|
||||
"p",
|
||||
{ className: "card-text" },
|
||||
h("i", { className: "mdi mdi-phone-outline me-2" }),
|
||||
"Telefon: +49-0345/6903156"
|
||||
),
|
||||
h(
|
||||
"p",
|
||||
{ className: "card-text" },
|
||||
h("i", { className: "mdi mdi-fax me-2" }),
|
||||
"Fax: +49-0345/6903157"
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
];
|
||||
};
|
||||
|
||||
export default KontaktPreview;
|
26
static/admin/previews/page-previews/page-preview.js
Normal file
26
static/admin/previews/page-previews/page-preview.js
Normal file
@ -0,0 +1,26 @@
|
||||
import { PageHeader } from "./components/index.js";
|
||||
|
||||
const PagePreview = ({ widgetFor, entry }) => {
|
||||
return [
|
||||
PageHeader(entry),
|
||||
h(
|
||||
"section",
|
||||
{ className: "section-sm" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "container" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "row" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-12" },
|
||||
h("div", { className: "content" }, widgetFor("body"))
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
];
|
||||
};
|
||||
|
||||
export default PagePreview;
|
55
static/admin/previews/page-previews/projektwoche-preview.js
Normal file
55
static/admin/previews/page-previews/projektwoche-preview.js
Normal file
@ -0,0 +1,55 @@
|
||||
import { Container, PageHeader, Row, Section } from "./components/index.js";
|
||||
|
||||
const ProjektwochePreview = ({ widgetsFor, widgetFor, entry }) => {
|
||||
return [
|
||||
PageHeader(entry),
|
||||
Section([
|
||||
Container(
|
||||
Row(h("div", { className: "col-12 mb-4 content" }, widgetFor("body")))
|
||||
),
|
||||
Container(
|
||||
Row([
|
||||
widgetsFor("tiles").map((tile) =>
|
||||
h(
|
||||
"div",
|
||||
{ className: "col-lg-4 col-sm-6" },
|
||||
h(
|
||||
"div",
|
||||
{
|
||||
className: "card border-primary rounded-0 hover-shadow mb-4",
|
||||
},
|
||||
h(
|
||||
"div",
|
||||
{
|
||||
className: "container fb-tile-color",
|
||||
style: { backgroundColor: tile.data.bg_color },
|
||||
},
|
||||
h("i", {
|
||||
className: (tile.data.icon ?? "") + " fb-tile-icon",
|
||||
style: { color: tile.data.font_color },
|
||||
})
|
||||
),
|
||||
h(
|
||||
"div",
|
||||
{ className: "card-body" },
|
||||
h(
|
||||
"h4",
|
||||
{ className: "card-title text-truncate" },
|
||||
tile.data.title
|
||||
),
|
||||
h(
|
||||
"button",
|
||||
{ type: "button", className: "btn btn-primary btn-sm" },
|
||||
"Mehr anzeigen"
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
])
|
||||
),
|
||||
]),
|
||||
];
|
||||
};
|
||||
|
||||
export default ProjektwochePreview;
|
8
static/admin/previews/page-previews/styles.js
Normal file
8
static/admin/previews/page-previews/styles.js
Normal file
@ -0,0 +1,8 @@
|
||||
const PreviewStyles = [
|
||||
"https://assets.cantorgymnasium.de/bootstrap/v5/css/bootstrap.min.css",
|
||||
"https://assets.cantorgymnasium.de/fonts/fira/fira.css",
|
||||
"https://assets.cantorgymnasium.de/fonts/mdi/v7/css/materialdesignicons.min.css",
|
||||
"https://cantorgymnasium.de/scss/style.css",
|
||||
];
|
||||
|
||||
export default PreviewStyles;
|
67
static/admin/shortcodes/audio.js
Normal file
67
static/admin/shortcodes/audio.js
Normal file
@ -0,0 +1,67 @@
|
||||
import { Card, TextField } from "./components/index.js";
|
||||
|
||||
const AudioShortcode = {
|
||||
label: "Audiodatei",
|
||||
openTag: "{{< ",
|
||||
closeTag: " >}}",
|
||||
separator: " ",
|
||||
toProps: (args) => {
|
||||
if (args.length > 0) {
|
||||
const src =
|
||||
args
|
||||
.find((arg) => arg.startsWith("src="))
|
||||
?.split("=")[1]
|
||||
.replaceAll('"', "") ?? "";
|
||||
return { src: src };
|
||||
}
|
||||
return { src: "" };
|
||||
},
|
||||
toArgs: ({ src }) => {
|
||||
return [`src=\"${src}\"`];
|
||||
},
|
||||
control: ({ src, onChange, controlProps }) => {
|
||||
const { collection, field } = controlProps;
|
||||
|
||||
const handleChange = ({ path }) => {
|
||||
onChange({ src: path });
|
||||
};
|
||||
|
||||
const handleOpenMediaLibrary = useMediaInsert(
|
||||
src,
|
||||
{ collection, field },
|
||||
handleChange
|
||||
);
|
||||
|
||||
return Card([
|
||||
TextField({
|
||||
label: "Audiodatei",
|
||||
value: src,
|
||||
onChange: (event) => {
|
||||
onChange({ src: event.target.value });
|
||||
},
|
||||
}),
|
||||
h(
|
||||
"span",
|
||||
{ key: "audio-button", className: "flex gap-2 pt-2 px-2" },
|
||||
h(
|
||||
"button",
|
||||
{
|
||||
type: "button",
|
||||
onClick: handleOpenMediaLibrary,
|
||||
className: "btn btn-contained-primary",
|
||||
},
|
||||
"wählen"
|
||||
)
|
||||
),
|
||||
]);
|
||||
},
|
||||
preview: ({ src }) => {
|
||||
return h(
|
||||
"div",
|
||||
{ className: "card" },
|
||||
h("audio", { src: src, controls: true })
|
||||
);
|
||||
},
|
||||
};
|
||||
|
||||
export default AudioShortcode;
|
75
static/admin/shortcodes/card.js
Normal file
75
static/admin/shortcodes/card.js
Normal file
@ -0,0 +1,75 @@
|
||||
import { Card, TextField } from "./components/index.js";
|
||||
|
||||
const CardShortcode = {
|
||||
label: "Link-Karte",
|
||||
openTag: "{{< ",
|
||||
closeTag: " >}}",
|
||||
separator: " ",
|
||||
toProps: (args) => {
|
||||
if (args.length > 0) {
|
||||
var title = "";
|
||||
var link = "";
|
||||
const linkIndex = args.findIndex((arg) => arg.startsWith('link="'));
|
||||
const titleIndex = args.findIndex((arg) => arg.startsWith('title="'));
|
||||
for (let arg of args.slice(titleIndex, linkIndex)) {
|
||||
title += " " + arg.replaceAll("title=", "").replaceAll('"', "");
|
||||
}
|
||||
for (let arg of args.slice(linkIndex)) {
|
||||
link += " " + arg.replaceAll("link=", "").replaceAll('"', "");
|
||||
}
|
||||
return { title: title.trim(), link: link.trim() };
|
||||
}
|
||||
|
||||
return { title: "", link: "" };
|
||||
},
|
||||
toArgs: ({ title, link }) => {
|
||||
return [`title=\"${title}\"`, `link=\"${link}\"`];
|
||||
},
|
||||
control: ({ title, link, onChange }) => {
|
||||
return Card([
|
||||
TextField({
|
||||
label: "Titel",
|
||||
value: title,
|
||||
onChange: (event) => {
|
||||
onChange({ title: event.target.value, link });
|
||||
},
|
||||
}),
|
||||
TextField({
|
||||
label: "Link",
|
||||
value: link,
|
||||
onChange: (event) => {
|
||||
onChange({ title, link: event.target.value });
|
||||
},
|
||||
}),
|
||||
]);
|
||||
},
|
||||
preview: ({ title, link }) => {
|
||||
return h(
|
||||
"div",
|
||||
{ className: "container mb-0" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "card border-primary rounded-0 hover-shadow mb-5" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "card-body mb-0" },
|
||||
h(
|
||||
"h4",
|
||||
{ className: "card-title" },
|
||||
h("a", { className: "text-decoration-none", href: link }, title)
|
||||
),
|
||||
h(
|
||||
"a",
|
||||
{
|
||||
className: "mb-0 btn btn-primary btn-sm text-decoration-none",
|
||||
href: link,
|
||||
},
|
||||
"Mehr anzeigen"
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
},
|
||||
};
|
||||
|
||||
export default CardShortcode;
|
12
static/admin/shortcodes/components/card.js
Normal file
12
static/admin/shortcodes/components/card.js
Normal file
@ -0,0 +1,12 @@
|
||||
const Card = (child, opts = { vertical: false }) =>
|
||||
h(
|
||||
"span",
|
||||
{
|
||||
className:
|
||||
"relative flex border border-slate-400 focus-within:border-blue-800 dark:focus-within:border-blue-100 focus-within:bg-slate-100 dark:focus-within:bg-slate-800 hover:bg-slate-100 dark:hover:bg-slate-800 pb-3 cursor-text group/active" +
|
||||
(opts.vertical ? " flex-col" : ""),
|
||||
},
|
||||
child
|
||||
);
|
||||
|
||||
export default Card;
|
41
static/admin/shortcodes/components/image.js
Normal file
41
static/admin/shortcodes/components/image.js
Normal file
@ -0,0 +1,41 @@
|
||||
const Image = ({ label, assetSource, handleOpenMediaLibrary }) =>
|
||||
h(
|
||||
"span",
|
||||
{ className: "flex flex-col w-full" },
|
||||
h(
|
||||
"label",
|
||||
{
|
||||
className:
|
||||
"w-full flex text-xs font-bold dark:font-semibold group-focus-within/active:text-blue-500 group-hover/active:text-blue-500 cursor-text text-slate-500 dark:text-slate-400 px-3 pt-3",
|
||||
},
|
||||
label
|
||||
),
|
||||
h(
|
||||
"span",
|
||||
{ className: "flex flex-col gap-2 px-3 pt-2" },
|
||||
h(
|
||||
"span",
|
||||
{},
|
||||
h("img", {
|
||||
role: "presentation",
|
||||
src: assetSource,
|
||||
className: "object-cover max-w-full overflow-hidden",
|
||||
})
|
||||
),
|
||||
h(
|
||||
"span",
|
||||
{ className: "flex gap-2" },
|
||||
h(
|
||||
"button",
|
||||
{
|
||||
type: "button",
|
||||
onClick: handleOpenMediaLibrary,
|
||||
className: "btn btn-contained-primary",
|
||||
},
|
||||
"Bild auswählen"
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
export default Image;
|
5
static/admin/shortcodes/components/index.js
Normal file
5
static/admin/shortcodes/components/index.js
Normal file
@ -0,0 +1,5 @@
|
||||
import Card from "./card.js";
|
||||
import TextField from "./text-field.js";
|
||||
import Image from "./image.js";
|
||||
|
||||
export { Card, TextField, Image };
|
21
static/admin/shortcodes/components/text-field.js
Normal file
21
static/admin/shortcodes/components/text-field.js
Normal file
@ -0,0 +1,21 @@
|
||||
const TextField = ({ label, value, onChange }) =>
|
||||
h(
|
||||
"span",
|
||||
{ key: "text-" + label, className: "flex flex-col w-full" },
|
||||
h(
|
||||
"label",
|
||||
{
|
||||
className:
|
||||
"w-full flex text-xs font-bold dark:font-semibold group-focus-within/active:text-blue-500 group-hover/active:text-blue-500 cursor-text text-slate-500 dark:text-slate-400 px-3 pt-3",
|
||||
},
|
||||
label
|
||||
),
|
||||
h("input", {
|
||||
className:
|
||||
"MuiInout-Input w-full h-6 px-3 bg-transparent outline-none text-sm font-medium text-gray-900 dark:text-gray-100 cursor-default",
|
||||
value,
|
||||
onChange,
|
||||
})
|
||||
);
|
||||
|
||||
export default TextField;
|
76
static/admin/shortcodes/download.js
Normal file
76
static/admin/shortcodes/download.js
Normal file
@ -0,0 +1,76 @@
|
||||
import { Card, TextField } from "./components/index.js";
|
||||
|
||||
const DownloadShortcode = {
|
||||
label: "Download-Karte",
|
||||
openTag: "{{< ",
|
||||
closeTag: " >}}",
|
||||
separator: " ",
|
||||
toProps: (args) => {
|
||||
if (args.length > 0) {
|
||||
var title = "";
|
||||
var link = "";
|
||||
const linkIndex = args.findIndex((arg) => arg.startsWith('link="'));
|
||||
const titleIndex = args.findIndex((arg) => arg.startsWith('title="'));
|
||||
for (let arg of args.slice(titleIndex, linkIndex)) {
|
||||
title += " " + arg.replaceAll("title=", "").replaceAll('"', "");
|
||||
}
|
||||
for (let arg of args.slice(linkIndex)) {
|
||||
link += " " + arg.replaceAll("link=", "").replaceAll('"', "");
|
||||
}
|
||||
return { title: title.trim(), link: link.trim() };
|
||||
}
|
||||
|
||||
return { title: "", link: "" };
|
||||
},
|
||||
toArgs: ({ title, link }) => {
|
||||
return [`title=\"${title}\"`, `link=\"${link}\"`];
|
||||
},
|
||||
control: ({ title, link, onChange }) => {
|
||||
return Card([
|
||||
TextField({
|
||||
label: "Titel",
|
||||
value: title,
|
||||
onChange: (event) => {
|
||||
onChange({ title: event.target.value, link });
|
||||
},
|
||||
}),
|
||||
TextField({
|
||||
label: "Download-Link",
|
||||
value: link,
|
||||
onChange: (event) => {
|
||||
onChange({ title, link: event.target.value });
|
||||
},
|
||||
}),
|
||||
]);
|
||||
},
|
||||
preview: ({ title, link }) => {
|
||||
return h(
|
||||
"div",
|
||||
{ className: "container mb-0" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "card border-primary rounded-0 hover-shadow mb-5" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "card-body mb-0" },
|
||||
h(
|
||||
"h4",
|
||||
{ className: "card-title" },
|
||||
h("a", { className: "text-decoration-none", href: link }, title)
|
||||
),
|
||||
h(
|
||||
"a",
|
||||
{
|
||||
className: "mb-0 btn btn-primary btn-sm text-decoration-none",
|
||||
href: link,
|
||||
},
|
||||
h("i", { className: "mdi mdi-tray-arrow-down mb-0 me-2" }),
|
||||
"Download"
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
},
|
||||
};
|
||||
|
||||
export default DownloadShortcode;
|
73
static/admin/shortcodes/gallery.js
Normal file
73
static/admin/shortcodes/gallery.js
Normal file
@ -0,0 +1,73 @@
|
||||
import { Card, TextField } from "./components/index.js";
|
||||
|
||||
const GalleryShortcode = {
|
||||
label: "Bildergallerie",
|
||||
openTag: "{{< ",
|
||||
closeTag: " >}}",
|
||||
separator: " ",
|
||||
toProps: (args) => {
|
||||
if (args.length > 0) {
|
||||
return {
|
||||
dir:
|
||||
args
|
||||
.find((arg) => arg.startsWith("dir="))
|
||||
?.split("=")[1]
|
||||
.replaceAll('"', "") ?? "",
|
||||
};
|
||||
}
|
||||
return { dir: "" };
|
||||
},
|
||||
toArgs: ({ dir }) => {
|
||||
return [`dir=\"${dir}\"`];
|
||||
},
|
||||
control: ({ dir, onChange, controlProps }) => {
|
||||
const { collection, field } = controlProps;
|
||||
|
||||
const handleChange = ({ path }) => {
|
||||
onChange({ dir: path });
|
||||
};
|
||||
|
||||
const handleOpenMediaLibrary = useMediaInsert(
|
||||
dir,
|
||||
{ collection, field, forFolder: true },
|
||||
handleChange
|
||||
);
|
||||
|
||||
return Card([
|
||||
TextField({
|
||||
label: "Gallerie-Ordner",
|
||||
value: dir,
|
||||
onChange: (event) => {
|
||||
onChange({ dir: event.target.value });
|
||||
},
|
||||
}),
|
||||
h(
|
||||
"span",
|
||||
{ key: "gallery-button", className: "flex gap-2 pt-2 px-2" },
|
||||
h(
|
||||
"button",
|
||||
{
|
||||
type: "button",
|
||||
onClick: handleOpenMediaLibrary,
|
||||
className: "btn btn-contained-primary",
|
||||
},
|
||||
"wählen"
|
||||
)
|
||||
),
|
||||
]);
|
||||
},
|
||||
preview: ({ dir }) => {
|
||||
return h(
|
||||
"div",
|
||||
{ className: "card mb-4" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "card-body mb-0" },
|
||||
h("div", { className: "card-title h4" }, "Gallerie-Ordner"),
|
||||
h("div", { className: "card-text" }, dir)
|
||||
)
|
||||
);
|
||||
},
|
||||
};
|
||||
|
||||
export default GalleryShortcode;
|
64
static/admin/shortcodes/image.js
Normal file
64
static/admin/shortcodes/image.js
Normal file
@ -0,0 +1,64 @@
|
||||
import { Card, Image } from "./components/index.js";
|
||||
import { md5 } from "../previews/page-previews/components/index.js";
|
||||
|
||||
const ImageShortcode = {
|
||||
label: "Bild",
|
||||
openTag: "{{< ",
|
||||
closeTag: " >}}",
|
||||
separator: " ",
|
||||
toProps: (args) => {
|
||||
if (args.length > 0) {
|
||||
return {
|
||||
src:
|
||||
args
|
||||
.find((arg) => arg.startsWith("src="))
|
||||
?.split("=")[1]
|
||||
.replaceAll('"', "") ?? "",
|
||||
};
|
||||
}
|
||||
|
||||
return { src: "" };
|
||||
},
|
||||
toArgs: ({ src }) => {
|
||||
return [`src=\"${src}\"`];
|
||||
},
|
||||
control: ({ src, onChange, controlProps }) => {
|
||||
const { collection, field, entry } = controlProps;
|
||||
|
||||
const handleChange = ({ path }) => {
|
||||
onChange({ src: path });
|
||||
};
|
||||
|
||||
const handleOpenMediaLibrary = useMediaInsert(
|
||||
src,
|
||||
{ collection, field },
|
||||
handleChange
|
||||
);
|
||||
const assetSource = useMediaAsset(src, collection, field, entry);
|
||||
|
||||
return Card(
|
||||
Image({
|
||||
label: "Bild",
|
||||
assetSource,
|
||||
handleOpenMediaLibrary,
|
||||
})
|
||||
);
|
||||
},
|
||||
preview: ({ src }) => {
|
||||
return h(
|
||||
"div",
|
||||
{ className: "col-lg-3 col-md-4 col-sm-6" },
|
||||
h(
|
||||
"a",
|
||||
{ className: "vb-gallery", "data-gall": md5(src) },
|
||||
h("img", {
|
||||
className: "img-thumbnail w-100 h-100",
|
||||
style: { objectFit: "cover" },
|
||||
src,
|
||||
})
|
||||
)
|
||||
);
|
||||
},
|
||||
};
|
||||
|
||||
export default ImageShortcode;
|
17
static/admin/shortcodes/index.js
Normal file
17
static/admin/shortcodes/index.js
Normal file
@ -0,0 +1,17 @@
|
||||
import GalleryShortcode from "./gallery.js";
|
||||
import ImageShortcode from "./image.js";
|
||||
import DownloadShortcode from "./download.js";
|
||||
import CardShortcode from "./card.js";
|
||||
import YoutubeShortcode from "./youtube.js";
|
||||
import AudioShortcode from "./audio.js";
|
||||
import SliderShortcode from "./slider.js";
|
||||
|
||||
export {
|
||||
GalleryShortcode,
|
||||
ImageShortcode,
|
||||
DownloadShortcode,
|
||||
CardShortcode,
|
||||
YoutubeShortcode,
|
||||
AudioShortcode,
|
||||
SliderShortcode,
|
||||
};
|
73
static/admin/shortcodes/slider.js
Normal file
73
static/admin/shortcodes/slider.js
Normal file
@ -0,0 +1,73 @@
|
||||
import { Card, TextField } from "./components/index.js";
|
||||
|
||||
const SliderShortcode = {
|
||||
label: "Bilderkarussell",
|
||||
openTag: "{{< ",
|
||||
closeTag: " >}}",
|
||||
separator: " ",
|
||||
toProps: (args) => {
|
||||
if (args.length > 0) {
|
||||
return {
|
||||
dir:
|
||||
args
|
||||
.find((arg) => arg.startsWith("dir="))
|
||||
?.split("=")[1]
|
||||
.replaceAll('"', "") ?? "",
|
||||
};
|
||||
}
|
||||
return { dir: "" };
|
||||
},
|
||||
toArgs: ({ dir }) => {
|
||||
return [`dir=\"${dir}\"`];
|
||||
},
|
||||
control: ({ dir, onChange, controlProps }) => {
|
||||
const { collection, field } = controlProps;
|
||||
|
||||
const handleChange = ({ path }) => {
|
||||
onChange({ dir: path });
|
||||
};
|
||||
|
||||
const handleOpenMediaLibrary = useMediaInsert(
|
||||
dir,
|
||||
{ collection, field, forFolder: true },
|
||||
handleChange
|
||||
);
|
||||
|
||||
return Card([
|
||||
TextField({
|
||||
label: "Bilderkarussell",
|
||||
value: dir,
|
||||
onChange: (event) => {
|
||||
onChange({ dir: event.target.value });
|
||||
},
|
||||
}),
|
||||
h(
|
||||
"span",
|
||||
{ key: "slider-button", className: "flex gap-2 pt-2 px-2" },
|
||||
h(
|
||||
"button",
|
||||
{
|
||||
type: "button",
|
||||
onClick: handleOpenMediaLibrary,
|
||||
className: "btn btn-contained-primary",
|
||||
},
|
||||
"wählen"
|
||||
)
|
||||
),
|
||||
]);
|
||||
},
|
||||
preview: ({ dir }) => {
|
||||
return h(
|
||||
"div",
|
||||
{ className: "card mb-4" },
|
||||
h(
|
||||
"div",
|
||||
{ className: "card-body mb-0" },
|
||||
h("div", { className: "card-title h4" }, "Bilderkarussell"),
|
||||
h("div", { className: "card-text" }, dir)
|
||||
)
|
||||
);
|
||||
},
|
||||
};
|
||||
|
||||
export default SliderShortcode;
|
59
static/admin/shortcodes/youtube.js
Normal file
59
static/admin/shortcodes/youtube.js
Normal file
@ -0,0 +1,59 @@
|
||||
import { Card, TextField } from "./components/index.js";
|
||||
|
||||
const YoutubeShortcode = {
|
||||
label: "YouTube-Video",
|
||||
openTag: "{{< ",
|
||||
closeTag: " >}}",
|
||||
separator: " ",
|
||||
toProps: (args) => {
|
||||
if (args.length > 0) {
|
||||
return { src: args[0] };
|
||||
}
|
||||
|
||||
return { src: "" };
|
||||
},
|
||||
toArgs: ({ src }) => {
|
||||
return [src];
|
||||
},
|
||||
control: ({ src, onChange }) => {
|
||||
return Card(
|
||||
[
|
||||
TextField({
|
||||
label: "YouTube-Video-ID",
|
||||
value: src,
|
||||
onChange: (event) => {
|
||||
onChange({ src: event.target.value });
|
||||
},
|
||||
}),
|
||||
h(
|
||||
"iframe",
|
||||
{
|
||||
width: "100%",
|
||||
height: "360",
|
||||
src: `https://piped.kavin.rocks/embed/${src}`,
|
||||
className: "px-3 pt-3",
|
||||
},
|
||||
""
|
||||
),
|
||||
],
|
||||
{ vertical: true }
|
||||
);
|
||||
},
|
||||
preview: ({ src }) => {
|
||||
return h(
|
||||
"span",
|
||||
{},
|
||||
h(
|
||||
"iframe",
|
||||
{
|
||||
width: "420",
|
||||
height: "315",
|
||||
src: `https://piped.kavin.rocks/embed/${src}`,
|
||||
},
|
||||
""
|
||||
)
|
||||
);
|
||||
},
|
||||
};
|
||||
|
||||
export default YoutubeShortcode;
|
Reference in New Issue
Block a user