WIP: CMS rebuild

This commit is contained in:
2023-05-11 06:44:30 +02:00
parent 3a96b046ba
commit 5059d1602c
16 changed files with 813 additions and 563 deletions

View File

@ -960,7 +960,7 @@ collections:
name: "previous"
widget: "object"
fields:
- {label: "Aktiviert", name: "enable", widget: "hidden", default: true}
- {label: "Aktiviert", name: "enable", widget: "boolean", default: true}
- {label: "Titel", name: "title", widget: "string", required: true}
- {label: "Link", name: "link", widget: "string", required: true}
- label: "Kacheln"

View File

@ -0,0 +1,54 @@
import { MarkdownProps } from "../props.js";
import { DraftBoolean, Title } from "./widgets.js";
const AbiturientenCollection = {
name: "abiturienten",
label: "Abiturienten",
label_singular: "Abiturjahrgang",
description: "Hier kann die Übersicht der Abiturjahrgänge bearbeitet werden. Dieser Bereich wird von der Schulchronik verwaltet.",
icon: "graduation-cap",
folder: "content/german/abiturienten",
filter: {
field: "type",
value: "abiturienten"
},
create: true,
editor: {
preview: true,
frame: true
},
summary_fields: ["title", "draft"],
sortable_fields: {
fields: ["title"],
default: {
field: "title",
direction: "Descending"
}
},
fields: [
Title(false),
DraftBoolean,
{
name: "image",
label: "Bild",
widget: "image",
default: "/media/image.webp",
required: false
},
{
name: "type",
label: "Typ",
widget: "hidden",
default: "abiturienten"
},
{
name: "body",
label: "Text",
widget: "markdown",
required: false,
...MarkdownProps
}
]
};
export default AbiturientenCollection;

View File

@ -0,0 +1,71 @@
import { MarkdownProps } from "../props.js";
import { DescriptionText, DraftBoolean, Title } from "./widgets.js";
const CantorforaCollection = {
name: "cantorfora",
label: "Cantorfora",
label_singular: "Cantorforum",
description: "Hier kann die Übersicht der Cantorfora bearbeitet werden. Dieser Bereich wird von der Schulchronik verwaltet.",
icon: "presentation",
folder: "content/german/cantorfora",
filter: {
field: "type",
value: "cantorfora"
},
create: true,
editor: {
preview: true,
frame: true
},
view_groups: [
{
label: "Entwürfe",
field: "draft"
}
],
summary_fields: ["title", "draft", "description"],
sortable_fields: {
fields: ['index', 'title'],
default: {
field: "index",
direction: "Descending"
}
},
fields: [
Title(false),
{
name: "index",
label: "Laufindex",
hint: "Nummer des Cantorforums",
widget: "number",
value_type: "int",
min: 1,
step: 1,
required: true
},
DraftBoolean,
DescriptionText,
{
name: "image",
label: "Titelbild",
widget: "image",
default: "/media/image.webp",
required: true
},
{
name: "type",
label: "Typ",
widget: "hidden",
default: "cantorfora"
},
{
name: "body",
label: "Text",
widget: "markdown",
required: true,
...MarkdownProps
}
]
};
export default CantorforaCollection;

View File

@ -0,0 +1,66 @@
import { MarkdownProps } from "../props.js";
import { DescriptionText, DraftBoolean } from "./widgets.js";
const CantorpreisCollection = {
name: "cantorpreis",
label: "Cantorpreisträger",
description: "Hier sind alle Cantorpreisträger aufgelistet. Dieser Bereich wird von der Schulchronik verwaltet.",
icon: "award",
folder: "content/german/cantorpreis",
filter: {
field: "type",
value: "cantorpreis"
},
sortable_fields: {
fields: ['title', 'name'],
default: {
field: "title",
direction: "Descending"
}
},
summary: "{{title}} - {{name}}",
create: true,
editor: {
preview: true,
frame: true
},
summary_fields: ["title", "name", "draft", "body"],
fields: [
{
name: "title",
label: "Jahr",
widget: "string",
required: true
},
{
name: "name",
label: "Name",
widget: "string",
required: true
},
DraftBoolean,
DescriptionText,
{
name: "image",
label: "Bild",
widget: "image",
default: "/media/image.webp",
required: false
},
{
name: "type",
label: "Typ",
widget: "hidden",
default: "cantorpreis"
},
{
name: "body",
label: "Text",
widget: "markdown",
required: false,
...MarkdownProps
}
]
};
export default CantorpreisCollection;

View File

@ -0,0 +1,111 @@
import { MarkdownProps } from "../props.js";
import { DraftBoolean, EnableBoolean } from "./widgets.js";
const ChronikjahreCollection = {
name: "chronikjahre",
description: "Hier können die Chronikjahre bearbeitet werden. Dieser Bereich wird von der Schulchronik verwaltet.",
icon: "schulchronik",
label: "Chronikjahre",
label_singular: "Chronikjahr",
folder: "content/german/schulchronik",
filter: {
field: "type",
value: "schulchronik"
},
create: true,
editor: {
preview: false
},
summary_fields: ["title", "draft", "cantorpreisträger", "topics"],
sortable_fields: {
fields: ['title'],
default: {
field: "title",
direction: "Descending"
}
},
fields: [
{
name: "title",
label: "Jahr",
widget: "string"
},
DraftBoolean,
{
name: "type",
label: "Typ",
widget: "hidden",
default: "schulchronik"
},
{
name: "pretext",
label: "Einleitung",
hint: "Text für die Jahreszahl",
widget: "markdown",
required: false,
...MarkdownProps
},
{
name: "topics",
label: "Kreative Haufen",
label_singular: "Haufen",
widget: "list",
required: false,
collapsed: true,
fields: [
{
name: "title",
label: "Titel",
widget: "string",
required: true,
},
{
name: "content",
label: "Inhalt",
widget: "markdown",
required: false,
...MarkdownProps
},
{
name: "superhaufen",
label: "Superhaufen",
widget: "object",
required: false,
fields: [
EnableBoolean,
{
name: "link",
label: "Superhaufen",
widget: "relation",
collection: "superhaufen",
search_fields: ["title"],
value_field: "title",
required: false,
collapsed: true
}
]
}
]
},
{
name: "cantorpreisträger",
label: "Cantorpreisträger",
widget: "relation",
collection: "cantorpreis",
search_fields: ["jahr", "name"],
value_field: "name",
required: false
},
{
name: "body",
label: "Text",
hint: "Erscheint zusätzlich zu den Kreativen Haufen",
widget: "markdown",
required: false,
...MarkdownProps
}
]
}
export default ChronikjahreCollection;

View File

@ -0,0 +1,8 @@
import SettingsCollection from "./settings-collection.js";
import ChronikjahreCollection from "./chronikjahre.js";
import SuperhaufenCollection from "./superhaufen.js";
import CantorpreisCollection from "./cantorpreis.js";
import AbiturientenCollection from "./abiturienten.js";
import CantorforaCollection from "./cantorfora.js";
export { SettingsCollection, ChronikjahreCollection, SuperhaufenCollection, CantorpreisCollection, AbiturientenCollection, CantorforaCollection };

View File

@ -0,0 +1,135 @@
import { DateFormat, MarkdownProps } from "../props.js";
import { EnableBoolean, Title } from "./widgets.js";
const SettingsCollection = {
name: "settings",
label: "Einstellungen",
icon: "settings",
description: "Hier können die Basiseinstellungen der Website geändert werden. Die meisten Bereiche müssen nur in Ausnahmefällen angepasst werden.",
editor: {
preview: false
},
files: [
{
name: "data-homepage",
label: "Startseiteneinstellungen",
file: "data/de/homepage.yml",
fields: [
{
name: "top_banner",
label: "Banner",
widget: "object",
collapsed: true,
summary: "{{fields.enable | ternary('aktiv', 'inaktiv')}}",
fields: [
EnableBoolean,
{
name: "text",
label: "Text",
widget: "markdown",
required: false,
...MarkdownProps
},
{
name: "color",
label: "Farbe",
widget: "color",
required: false
},
{
name: "font_color",
label: "Schriftfarbe",
widget: "color",
required: false
},
{
name: "icon",
label: "Symbol",
widget: "string",
required: false,
hint: "Liste unter https://assets.cantorgymnasium.de/fonts/mdi/v7/preview.html"
},
{
name: "temporarily",
label: "Zeitschaltung",
widget: "object",
fields: [
EnableBoolean,
{
name: "start_date",
label: "Startdatum",
widget: "datetime",
...DateFormat,
required: false,
},
{
name: "end_date",
label: "Enddatum",
widget: "datetime",
...DateFormat,
required: false,
}
]
}
]
},
{
name: "slider",
label: "Karusell",
widget: "object",
collapsed: true,
summary: "{{fields.enable | ternary('aktiv', 'inaktiv')}}",
fields: [
EnableBoolean,
{
name: "bg_image",
label: "Hintergrundbild",
widget: "image",
required: false,
},
Title(true),
{
name: "slider_item",
label: "Elemente",
label_singular: "Element",
widget: "list",
collapsed: true,
fields: [
{
name: "content",
label: "Text",
widget: "string",
required: false
},
{
name: "button",
label: "Button",
widget: "object",
required: false,
collapsed: true,
fields: [
EnableBoolean,
{
name: "label",
label: "Aufschrift",
widget: "string",
required: false
},
{
name: "link",
label: "Link",
widget: "string",
required: false
}
]
}
]
}
]
}
]
}
]
};
export default SettingsCollection;

View File

@ -0,0 +1,101 @@
import { MarkdownProps } from "../props.js";
import { DraftBoolean, EnableBoolean, Title } from "./widgets.js";
const SuperhaufenCollection = {
name: "superhaufen",
label: "Superhaufen",
description: "\"Superhaufen\" sind ein besonderer Bereich der Schulchronik, um besonders ausführliche Ereignisse darzustellen. Dieser Bereich wird von der Schulchronik verwaltet.",
icon: "superhaufen",
folder: "content/german/superhaufen",
filter: {
field: "type",
value: "superhaufen"
},
create: true,
editor: {
preview: true,
frame: true,
},
summary_fields: ["title", "draft", "tiles"],
fields: [
Title(false),
DraftBoolean,
{
name: "type",
label: "Typ",
widget: "hidden",
default: "superhaufen"
},
{
name: "previous",
label: "Rückverlinkung",
widget: "object",
collapsed: true,
fields: [
EnableBoolean,
Title(false),
{
name: "link",
label: "Link",
widget: "string",
required: true
}
]
},
{
name: "tiles",
label: "Kacheln",
hint: "Die Vorschau zeigt nur die generierten Symbolkarten, NICHT die Inhalte.",
widget: "list",
required: false,
collapsed: true,
fields: [
Title(false),
{
name: "bg_color",
label: "Hintergrundfarbe",
widget: "color",
required: true,
},
{
name: "icon",
label: "Symbol",
widget: "string",
required: true,
},
{
name: "font_color",
label: "Symbolfarbe",
widget: "color",
required: true,
},
{
name: "content",
label: "Inhalt",
widget: "markdown",
required: true,
...MarkdownProps
},
{
name: "unterhaufen",
label: "Unterhaufen",
widget: "list",
required: false,
collapsed: true,
fields: [
Title(false),
{
name: "content",
label: "Inhalt",
widget: "markdown",
required: true,
...MarkdownProps
}
]
}
]
}
]
}
export default SuperhaufenCollection;

View File

@ -0,0 +1,30 @@
const EnableBoolean = {
name: "enable",
label: "Aktivieren",
widget: "boolean",
required: false
};
const DraftBoolean = {
name: "draft",
label: "Entwurf",
widget: "boolean",
default: false,
required: false
}
const Title = (optional = false) => ({
name: "title",
label: "Titel",
widget: "string",
required: !optional
});
const DescriptionText = {
name: "description",
label: "Beschreibung",
widget: "text",
required: false
};
export { EnableBoolean, DraftBoolean, Title, DescriptionText };

View File

@ -0,0 +1,37 @@
import { SettingsCollection } from "./collections/index.js";
const config = {
backend: {
name: "gitea",
repo: "gcg/gcg-website",
branch: "master",
api_root: "https://git.cantorgymnasium.de/api/v1",
base_url: "https://oauth.cantorgymnasium.de",
commit_messages: {
create: "{{collection}} {{slug}} erstellt",
update: "{{collection}} {{slug}} aktualisiert",
delete: "{{collection}} {{slug}} gelöscht",
updateMedia: "{{path}} hochgeladen",
deleteMedia: "{{path}} gelöscht"
}
},
local_backend: true,
media_folder: "/static/media",
public_folder: "/media",
media_library: {
max_file_size: 10240000,
folder_support: true
},
site_url: "https://cantorgymnasium.de",
locale: "de",
slug: {
encoding: "ascii",
clean_accents: true,
sanitize_replacement: "-"
},
collections: [
SettingsCollection
]
};
export default config;

View File

@ -0,0 +1,56 @@
const MarkdownProps = {
toolbar_buttons: {
main: [
'bold',
'italic',
'strikethrough',
'code',
'font',
'unordered-list',
'ordered-list',
'decrease-indent',
'increase-indent',
'insert-table',
'blockquote',
'file-link',
'code-block',
'shortcode',
],
empty: [],
selection: ['bold', 'italic', 'strikethrough', 'code', 'font', 'file-link', 'blockquote'],
table_empty: [
'bold',
'italic',
'strikethrough',
'code',
'insert-row',
'delete-row',
'insert-column',
'delete-column',
'delete-table',
'file-link',
'shortcode',
],
table_selection: [
'bold',
'italic',
'strikethrough',
'code',
'insert-row',
'delete-row',
'insert-column',
'delete-column',
'delete-table',
'file-link',
'shortcode',
]
}
};
const DateFormat = {
date_format: "dd.MM.yyyy",
time_format: false,
format: "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"
};
export { MarkdownProps, DateFormat };

View File

@ -0,0 +1,42 @@
import { AbiturientenCollection, CantorforaCollection, CantorpreisCollection, ChronikjahreCollection, SuperhaufenCollection } from "./collections/index.js";
const config = {
backend: {
name: "gitea",
repo: "gcg/gcg-website",
branch: "master",
api_root: "https://git.cantorgymnasium.de/api/v1",
base_url: "https://oauth.cantorgymnasium.de",
commit_messages: {
create: "{{collection}} {{slug}} erstellt",
update: "{{collection}} {{slug}} aktualisiert",
delete: "{{collection}} {{slug}} gelöscht",
updateMedia: "{{path}} hochgeladen",
deleteMedia: "{{path}} gelöscht"
}
},
local_backend: true,
media_folder: "/static/media",
public_folder: "/media",
media_library: {
max_file_size: 10240000,
folder_support: true
},
site_url: "https://cantorgymnasium.de/schulchronik/",
locale: "de",
slug: {
encoding: "ascii",
clean_accents: true,
sanitize_replacement: "-"
},
collections: [
ChronikjahreCollection,
SuperhaufenCollection,
CantorpreisCollection,
AbiturientenCollection,
CantorforaCollection
]
};
export default config;

View File

@ -9,7 +9,7 @@ const IconNames = {
group: "mdi mdi-crowd",
trophy: "mdi mdi-trophy-outline",
pi: "mdi mdi-pi-box",
pillar: "mdi mdi-pillar",
schulchronik: "mdi mdi-pillar",
"graduation-cap": "mdi mdi-school-outline",
help: "mdi mdi-lifebuoy",
dash: "mdi mdi-monitor-dashboard",

View File

@ -10,6 +10,7 @@
<body>
<script src="https://cdn.jsdelivr.net/npm/@staticcms/app@^2.0.0/dist/static-cms-app.js"></script>
<script type="module">
import config from "./config/index.js";
// imports
import {
AboutPreview,
@ -61,7 +62,7 @@
CMS.registerPreviewTemplate("contact-index", KontaktPreview);
CMS.registerPreviewTemplate("event-index", EventPreview);
CMS.registerPreviewTemplate("anmeldung-index", AnmeldungPreview);
CMS.registerPreviewTemplate("schulchronik", ChronikPreview);
CMS.registerPreviewTemplate("chronikjahre", ChronikPreview);
CMS.registerPreviewTemplate("anmeldeformular", AnmeldeformularPreview);
CMS.registerPreviewTemplate("schulchronik-index", ChronikIndexPreview);
CMS.registerPreviewTemplate("author", AuthorPreview);
@ -119,7 +120,7 @@
CMS.registerFieldPreview("author", "active", BooleanPreview);
CMS.registerFieldPreview("author", "simplified", BooleanPreview);
CMS.registerFieldPreview("blog", "date", DatePreview);
CMS.registerFieldPreview("schulchronik", "topics", CountPreview);
CMS.registerFieldPreview("chronikjahre", "topics", CountPreview);
["projektwoche", "superhaufen"].forEach((collection) =>
CMS.registerFieldPreview(collection, "tiles", CountPreview)
);
@ -132,7 +133,7 @@
"wettbewerbe",
"begabte",
"projektwoche",
"schulchronik",
"chronikjahre",
"abiturienten",
"superhaufen",
"cantorfora",