add CMS
All checks were successful
schuelerzeitung-main / test-build (push) Successful in 3m58s
schuelerzeitung-main / prod-build (push) Successful in 4m2s

This commit is contained in:
Denys Konovalov 2023-05-29 19:03:29 +02:00
parent 299051da24
commit ad6e7f7299
15 changed files with 488 additions and 1507 deletions

@ -17,8 +17,6 @@ jobs:
steps:
- name: clone
uses: actions/checkout@v3
with:
submodules: true
- name: build
run: npm i && hugo --minify --gc --baseURL "https://schuelerzeitung-gcg.de/"
@ -42,8 +40,6 @@ jobs:
steps:
- name: clone
uses: actions/checkout@v3
with:
submodules: true
- name: build
run: npm i && hugo --minify --gc --baseURL "https://test.schuelerzeitung-gcg.de/" --buildDrafts --buildFuture -d test

@ -1,6 +0,0 @@
---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
draft: true
---

@ -0,0 +1,3 @@
---
title: Static CMS
---

@ -1,10 +1,14 @@
---
author: ""
title: "Buchempfehlung: The inheritance Games"
draft: false
date: 2023-02-16
author: ""
description: ""
tags: ["buchempfehlung", "2023"]
thumbnail: /blog/buchempfehlung-2023-01.webp
thumbnail: /buchempfehlung-2023-01.webp
tags:
- buchempfehlung
- "2023"
type: blog
---
> - **Titel:** The inheritance Games
@ -39,4 +43,4 @@ ohne unerwartete Wendung? Der einzige Makel für uns ist nur, dass der
Anfang sich ein wenig zieht, weil es nicht direkt mit der Action losgeht.
Aber der Rest der Handlung macht die anfängliche Langeweile auf jeden Fall
weg. Deshalb empfehlen wir diese Trilogie wärmstens. Es sind sogar bereits alle drei
Bände im Handel, also keine Angst vor Cliffhangern (die es definitiv gibt).
Bände im Handel, also keine Angst vor Cliffhangern (die es definitiv gibt).

@ -1,45 +1,29 @@
---
author: ""
title: "Horoskop (2023/1)"
title: Horoskop (2023/1)
draft: false
date: 2023-02-16
description: "Wassermann, Fische"
tags: ["umweltschutz", "klima", "2023"]
thumbnail: /blog/preview.webp
author: ""
description: Wassermann, Fische
thumbnail: /preview.webp
tags:
- "2023"
- horoskop
type: blog
---
### Wassermann
Wo ein Wille ist, da ist
auch ein Weg: Ihre
selbstgesteckten Ziele
werden in den nächsten
Wochen in Reichweite
liegen, seien Sie daher
wachsam und setzen Sie sich
ruhig mit Ihrer Meinung durch.
Besonders Ihre Kreativität kann
Ihnen dabei helfen! Doch werden Sie nicht ungeduldig,
dies könnte Sie viel Kraft kosten. Auch in der Liebe sieht
es gut für Sie aus, durch Ihre Hilfsbereitschaft finden Sie
schnell neue Kontakte, besonders die Cafeteria ist ein
guter Ort dafür. Doch lassen Sie sich dies nicht zu teuer
kommen! Geben Sie Ihr Geld am besten sparsam aus, oder es
wird schneller weg seien, als es Ihnen lieb ist.
Wo ein Wille ist, da ist auch ein Weg: Ihre
selbstgesteckten Ziele werden in den nächsten Wochen in Reichweite liegen, seien Sie daher
wachsam und setzen Sie sich ruhig mit Ihrer Meinung durch. Besonders Ihre Kreativität kann
Ihnen dabei helfen! Doch werden Sie nicht ungeduldig, dies könnte Sie viel Kraft kosten. Auch in der Liebe sieht es gut für Sie aus, durch Ihre Hilfsbereitschaft finden Sie schnell neue Kontakte, besonders die Cafeteria ist ein guter Ort dafür. Doch lassen Sie sich dies nicht zu teuer kommen! Geben Sie Ihr Geld am besten sparsam aus, oder es wird schneller weg seien, als es Ihnen lieb ist.
### Fische
Der frühe Vogel
fängt den Wurm:
Sowohl Ihre
schulischen als
auch Ihre Ziele in
der Liebe werden in
weite Ferne rücken,
wenn Sie jetzt nicht
zeitig anfangen, diese
hartnäckig zu verfolgen. Besonders schwierig
wird es für Sie in den Fächern Biologie und
Geschichte werden. Doch auch Deutsch und
Mathe sind nicht ohne Schwierigkeiten, die in
den nächsten Wochen überwunden werden
müssen. Doch trotz allem sollten Sie sich
nicht zu sehr fürchten: Frau Rudolph wird Ihr
Glücksengel sein, folgen Sie ihr ruhig!
Der frühe Vogel fängt den Wurm:
Sowohl Ihre schulischen als auch Ihre Ziele in der Liebe werden in weite Ferne rücken,
wenn Sie jetzt nicht zeitig anfangen, diese hartnäckig zu verfolgen. Besonders schwierig
wird es für Sie in den Fächern Biologie und Geschichte werden. Doch auch Deutsch und
Mathe sind nicht ohne Schwierigkeiten, die in den nächsten Wochen überwunden werden
müssen. Doch trotz allem sollten Sie sich nicht zu sehr fürchten: Frau Rudolph wird Ihr
Glücksengel sein, folgen Sie ihr ruhig!

@ -1,14 +1,17 @@
---
author: ""
title: "Modulkurs Chemie 2023"
title: Modulkurs Chemie 2023
draft: false
date: 2023-02-16
author: ""
description: ""
tags: ["modulkurs", "2023"]
thumbnail: /blog/preview.webp
thumbnail: /preview.webp
tags:
- modulkurs
- "2023"
- chemie
type: blog
---
Der Chemieleistungskurs
konnte in der Schule
Der Chemieleistungskurs konnte in der Schule
einfach nicht genug von der
Chemie bekommen. Aus
diesem Grund fand in der
@ -127,4 +130,4 @@ unsere Protokolle
korrigiert und diese
Erfahrung überhaupt
erst möglich gemacht
hat.
hat.

@ -1,12 +1,17 @@
---
author: ""
title: "Umweltschutz 101 (2023/1)"
title: Umweltschutz 101 (2023/1)
draft: false
date: 2023-02-16
description: "Was? Umweltschutz? Nicht schon wieder!"
tags: ["umweltschutz", "klimanews", "klima", "2023"]
thumbnail: /blog/preview.webp
author: ""
description: Was? Umweltschutz? Nicht schon wieder!
thumbnail: /preview.webp
tags:
- umweltschutz
- klimanews
- klima
- "2023"
type: blog
---
Was? Umweltschutz? Nicht schon wieder!
Du kennst die folgenden Dinge bestimmt auch: Dein Capri-Sonne Strobhalm ist aus Pappe, auf
@ -33,4 +38,4 @@ Umweltschutz erhalten, LOS GEHT'S!!!
> ### Negative Klimanews:
> Deutschland will idealerweise bis 2030 den Kohleaustieg schaffen. Kohlekraft soll künftig mit erneuerbaren Energie, somit unter anderem Windkraft, ersetzt werden. Für dieses Vorhaben muss jedes Bundeland 2% seiner Fläche für Windkraftanlagen bereitstellen, was nicht überall auf Zustimmung trifft.
> In Bayern ist der Bau von Windkraftanlagen seit 2014 durch strenge Abstandsregelungen zu Wohnsiedlungen und Naturschutzgebieten fast zum Stillstand gekommen.
> Bundeswirtschaftsminister Robert Habeck (Grüne) hat nun ganz schön zu kämpfen, Bayern zu einem Kompromiss zu bewegen. Es ist bis jetzt keine Einigung in Aussicht.
> Bundeswirtschaftsminister Robert Habeck (Grüne) hat nun ganz schön zu kämpfen, Bayern zu einem Kompromiss zu bewegen. Es ist bis jetzt keine Einigung in Aussicht.

@ -1,10 +1,12 @@
---
author: Denys Konovalov
title: Über uns
draft: false
date: 2023-03-26
description:
keywords: ["über-uns", "team"]
type: about
author: Denys Konovalov
description: null
keywords:
- über-uns
- team
---

@ -57,6 +57,10 @@
 • {{ i18n "translationsLabel" }} {{ $linksOutput }}
{{- end }}
{{ end }}
{{ with .Params.author }}
 • 
{{ . }}
{{ end }}
</h5>
{{ end }}

161
layouts/admin/list.html Normal file

@ -0,0 +1,161 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link
rel="stylesheet"
href="https://assets.cantorgymnasium.de/fonts/mdi/v7/css/materialdesignicons.min.css"
/>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@staticcms/app@^2.4.3/dist/main.css"
/>
<title>Static CMS</title>
</head>
<body>
<script src="https://cdn.jsdelivr.net/npm/@staticcms/app@^2.4.3/dist/static-cms-app.js"></script>
<script type="module">
import Icons from "https://cantorgymnasium.de/admin/icons.js";
import config from "./config.js";
CMS.init({ config });
Icons.forEach((i) => CMS.registerIcon(i.name, i.icon));
CMS.registerFieldPreview("posts", "draft", ({ 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"
)
);
CMS.registerFieldPreview("pages", "draft", ({ 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"
)
);
CMS.registerPreviewTemplate(
"posts",
({ widgetFor, entry, fields, collection }) => {
const imageField = useMemo(() => {
return fields.find((field) => field.name === "thumbnail");
}, [fields]);
const imageUrl = useMediaAsset(
entry.data.thumbnail,
collection,
imageField,
entry
);
return h(
"div",
{},
h(
"div",
{ className: "relative max-w-5xl mx-auto px-4 pt-8" },
h("img", {
className: "rounded-lg shadow-sm w-full object-contain",
src: imageUrl,
})
),
h("article", {
className: "prose lg:prose-lg mx-auto my-8 dark:prose-dark px-4",
},
h("h1", { className: "text-2xl font-bold mb-2" }, entry.data.title),
h("h5", { className: "text-sm flex items-center flex-wrap"},
"Gepostet am " + (entry.data.date != "" ? new Intl.DateTimeFormat("de-DE", {dateStyle: "long"}).format(new Date(entry.data.date)) : ""),
" • " + entry.data.author
),
widgetFor('body')
)
);
}
);
CMS.registerPreviewTemplate(
"pages",
({ widgetFor, entry, fields, collection }) => {
const imageField = useMemo(() => {
return fields.find((field) => field.name === "thumbnail");
}, [fields]);
const imageUrl = useMediaAsset(
entry.data.thumbnail,
collection,
imageField,
entry
);
return h(
"div",
{},
h(
"div",
{ className: "relative max-w-5xl mx-auto px-4 pt-8" },
h("img", {
className: "rounded-lg shadow-sm w-full object-contain",
src: imageUrl,
})
),
h("article", {
className: "prose lg:prose-lg mx-auto my-8 dark:prose-dark px-4",
},
h("h1", { className: "text-2xl font-bold mb-2" }, entry.data.title),
h("h5", { className: "text-sm flex items-center flex-wrap"},
"Gepostet am " + (entry.data.date != "" ? new Intl.DateTimeFormat("de-DE", {dateStyle: "long"}).format(new Date(entry.data.date)) : ""),
" • " + entry.data.author
),
widgetFor('body')
)
);
}
);
</script>
{{- $styles := resources.Get "css/styles.css" | postCSS (dict "config"
"./assets/css/postcss.config.js") -}} {{- if .Site.IsServer }}
<script>
CMS.registerPreviewStyle("{{ $styles.RelPermalink }}");
</script>
{{ else }} {{- $styles := $styles| minify | fingerprint |
resources.PostProcess -}}
<script>
CMS.registerPreviewStyle("{{ $styles.Permalink }}");
</script>
{{ end -}}
</body>
</html>

1510
package-lock.json generated

File diff suppressed because it is too large Load Diff

149
static/admin/collections.js Normal file

@ -0,0 +1,149 @@
const PostCollection = {
name: "posts",
label: "Artikel",
description: "Hier könnt ihr die Artikel der Schülerzeitung bearbeiten.",
icon: "news",
folder: "content/de/blog",
create: true,
editor: {
preview: true,
frame: true,
size: "half",
},
filter: {
field: "type",
value: "blog",
// pattern: "^((?!_index.md).)*$"
},
summary_fields: ["title", "date", "draft", "author"],
fields: [
{
name: "title",
label: "Titel",
widget: "string",
required: true,
},
{
name: "draft",
label: "Entwurf",
widget: "boolean",
required: false,
},
{
name: "date",
label: "Datum",
widget: "datetime",
date_format: "dd.MM.yyyy",
time_format: false,
format: "yyyy-MM-dd",
required: true,
},
{
name: "author",
label: "Autor",
widget: "string",
required: false,
},
{
name: "description",
label: "Beschreibung",
widget: "text",
required: false,
},
{
name: "thumbnail",
label: "Titelbild",
widget: "image",
required: true,
},
{
name: "tags",
label: "Tags",
widget: "list",
delimiter: ",",
required: false,
},
{
name: "type",
widget: "hidden",
default: "blog",
},
{
name: "body",
label: "Inhalt",
widget: "markdown",
required: true,
},
],
};
const PagesCollection = {
name: "pages",
label: "Seiten",
description: "Hier könnt ihr die Zusatzseiten der Website bearbeiten.",
icon: "page",
folder: "content/de/page",
create: true,
editor: {
preview: true,
frame: true,
size: "half",
},
summary_fields: ["title", "date", "draft", "description"],
fields: [
{
name: "title",
label: "Titel",
widget: "string",
required: true,
},
{
name: "draft",
label: "Entwurf",
widget: "boolean",
required: false,
},
{
name: "date",
label: "Datum",
widget: "datetime",
date_format: "dd.MM.yyyy",
time_format: false,
format: "yyyy-MM-dd",
required: true,
},
{
name: "author",
label: "Autor",
widget: "string",
required: false,
},
{
name: "description",
label: "Beschreibung",
widget: "text",
required: false,
},
{
name: "thumbnail",
label: "Titelbild",
widget: "image",
required: false,
},
{
name: "keywords",
label: "Schlüsselwörter",
widget: "list",
delimiter: ",",
required: false,
},
{
name: "body",
label: "Inhalt",
widget: "markdown",
required: true,
},
],
};
export { PostCollection, PagesCollection };

38
static/admin/config.js Normal file

@ -0,0 +1,38 @@
import { PagesCollection, PostCollection } from "./collections.js";
const config = {
backend: {
name: "gitea",
repo: "gcg/schuelerzeitung",
branch: "main",
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",
public_folder: "/",
media_library: {
max_file_size: 10240000,
folder_support: true,
},
site_url: "https://schuelerzeitung-gcg.de",
locale: "de",
slug: {
encoding: "ascii",
clean_accents: true,
sanitize_replacement: "-",
},
collections: [
PostCollection,
PagesCollection
],
};
export default config;

Before

Width:  |  Height:  |  Size: 867 KiB

After

Width:  |  Height:  |  Size: 867 KiB

Before

Width:  |  Height:  |  Size: 107 KiB

After

Width:  |  Height:  |  Size: 107 KiB