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

@ -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 };