gcg-website/static/schulchronik/admin/index.html
Denys Konovalov d26df642e2 - Umstellung auf VenoBox v2 (tlw. #222)
- Entfernung PhotoSwipe
- Gallery-Shortcode nun einzeilig
- Einführung Image-Shortcode
2023-04-04 13:22:45 +02:00

575 lines
24 KiB
HTML

<!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">
<title>Chronikverwaltung</title>
</head>
<body>
<style>
body {
font-family: sans-serif;
}
.icon-md {
font-size: 25px;
}
</style>
<script src="https://cdn.jsdelivr.net/npm/@staticcms/app@^1.2.7/dist/static-cms-app.js"></script>
<!--script src="https://cantorgymnasium.de/plugins/wordcloud/wordcloud2.min.js"></script-->
<script id="cms-init">
CMS.init();
</script>
<script id="icons">
var icons = [['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'], ['superhaufen', 'mdi mdi-view-dashboard'], ['stats', 'mdi mdi-chart-bar']];
icons.forEach(icon => {
CMS.registerIcon(icon[0], ({}) => { return(h('i', {className: icon[1] + " icon-md"})); });
});
</script>
<script id="links">
CMS.registerAdditionalLink({
id: 'wiki',
title: 'GCG.Wiki',
data: 'https://wiki.cantorgymnasium.de',
options: {
icon: 'help',
},
});
</script>
<script>
CMS.registerShortcode('gallery', {
label: 'Bildergallerie',
openTag: '{{< ',
closeTag: ' >}}',
separator: ' ',
toProps: args => {
if (args.length > 0) {
var dir = args.find(arg => arg.startsWith('dir='))?.split('=')[1].replaceAll("\"","") ?? '';
return { dir: dir };
}
return { dir: '' };
},
toArgs: ({ dir }) => {
return [`dir=\"${dir}\"`];
},
control: ({ dir, onChange }) => {
return h('div', {className: "row", style: { border: "1px solid #868686", borderRadius: "8px", padding: "10px" }},
h('b', {style: {width: "30%", fontFamily: "sans-serif", margin: "10px"}}, "Gallerie-Ordner: "),
h('input', {
key: 'control-input',
value: dir,
style: {
border: "1px solid #ced4da", borderRadius: "8px", padding: "10px", width: "80%"
},
onChange: event => {
onChange({ dir: event.target.value });
},
}));
},
preview: ({ dir }) => {
return h('div', {className: "row", style: { border: "1px solid #868686", borderRadius: "8px", padding: "10px", marginBottom: "5px" }},
h('b', {style: { marginRight: "5px" }}, "Gallerie-Ordner:"),
h('code', {}, dir));
},
});
CMS.registerShortcode('figure', {
label: 'Bild',
openTag: '{{< ',
closeTag: ' >}}',
separator: ' ',
toProps: args => {
if (args.length > 0) {
var src = args.find(arg => arg.startsWith('src='))?.split('=')[1].replaceAll("\"","") ?? '';
return { src };
}
return { dir: '' };
},
toArgs: ({ src }) => {
return [`src=\"${src}\"`];
},
control: ({ src, onChange }) => {
return h('div', {className: "row", style: { border: "1px solid #868686", borderRadius: "16px", padding: "10px" }},
h('b', {style: {width: "30%", fontFamily: "sans-serif", margin: "10px"}}, "Bild-Pfad:"),
h('input', {
key: 'control-input',
value: src,
style: {
border: "1px solid #ced4da", borderRadius: "8px", padding: "10px", width: "80%"
},
onChange: event => {
onChange({ src: event.target.value });
},
}));
},
preview: ({ src }) => {
return h('div', {className: "row", style: { border: "1px solid #ccc", borderRadius: "16px", padding: "10px" }},
h('b', {style: { marginRight: "5px" }}, "Gallerie-Ordner:"),
h('code', {}, src));
},
});
CMS.registerShortcode('download', {
label: 'Download-Karte',
openTag: '{{< ',
closeTag: ' >}}',
separator: ' ',
toProps: args => {
if (args.length > 0) {
var title = "";
var link = "";
var linkIndex = args.findIndex(arg => arg.startsWith('link="'));
var titleIndex = args.findIndex(arg => arg.startsWith('title="'));
if (titleIndex + 1 < linkIndex) {
title += args.find(arg => arg.startsWith('title='))?.split('=')[1].replaceAll("\"","") ?? '';
for (let i = titleIndex + 1; i < linkIndex; i++) {
title += " " + args[i].replaceAll("\"","") ;
}
} else {
title = args.find(arg => arg.startsWith('title='))?.split('=')[1].replaceAll("\"","") ?? ''
}
if (linkIndex + 1 < args.length) {
link += args.find(arg => arg.startsWith('link='))?.split('=')[1].replaceAll("\"","") ?? '';
for (let i = linkIndex + 1; i < args.length; i++) {
link += " " + args[i].replaceAll("\"","");
}
} else {
link = args.find(arg => arg.startsWith('link='))?.split('=')[1].replaceAll("\"","") ?? ''
}
title.trim();
link.trim();
return { title: title, link: link };
}
return { title: '', link: '' };
},
toArgs: ({ title, link }) => {
return [`title=\"${title}\"`, `link=\"${link}\"`];
},
control: ({ title, link, onChange }) => {
return h('div', {className: "row", style: { border: "1px solid #868686", borderRadius: "8px", padding: "10px" }},
h('b', {style: {width: "30%", fontFamily: "sans-serif", margin: "10px"}}, "Download-Karte:"),
h('input', {
key: 'control-input',
value: title,
style: {
border: "1px solid #ced4da", borderRadius: "8px", padding: "10px", width: "35%", marginLeft: "5px", marginRight: "5px"
},
onChange: event => {
onChange({ title: event.target.value, link: link });
},
}),
h('input', {
key: 'control-input',
value: link,
style: {
border: "1px solid #ced4da", borderRadius: "8px", padding: "10px", width: "35%", marginLeft: "5px", marginRight: "5px"
},
onChange: event => {
onChange({ title: 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}, "Download")
)))},
});
CMS.registerShortcode('card', {
label: 'Link-Karte',
openTag: '{{< ',
closeTag: ' >}}',
separator: ' ',
toProps: args => {
if (args.length > 0) {
var title = "";
var link = "";
var linkIndex = args.findIndex(arg => arg.startsWith('link="'));
var titleIndex = args.findIndex(arg => arg.startsWith('title="'));
if (titleIndex + 1 < linkIndex) {
title += args.find(arg => arg.startsWith('title='))?.split('=')[1].replaceAll("\"","") ?? '';
for (let i = titleIndex + 1; i < linkIndex; i++) {
title += " " + args[i].replaceAll("\"","") ;
}
} else {
title = args.find(arg => arg.startsWith('title='))?.split('=')[1].replaceAll("\"","") ?? ''
}
if (linkIndex + 1 < args.length) {
link += args.find(arg => arg.startsWith('link='))?.split('=')[1].replaceAll("\"","") ?? '';
for (let i = linkIndex + 1; i < args.length; i++) {
link += " " + args[i].replaceAll("\"","");
}
} else {
link = args.find(arg => arg.startsWith('link='))?.split('=')[1].replaceAll("\"","") ?? ''
}
title.trim();
link.trim();
return { title: title, link: link };
}
return { title: '', link: '' };
},
toArgs: ({ title, link }) => {
return [`title=\"${title}\"`, `link=\"${link}\"`];
},
control: ({ title, link, onChange }) => {
return h('div', {className: "row", style: { border: "1px solid #868686", borderRadius: "8px", padding: "10px" }},
h('b', {style: {width: "30%", fontFamily: "sans-serif", margin: "10px"}}, "Link-Karte:"),
h('input', {
key: 'control-input',
value: title,
style: {
border: "1px solid #ced4da", borderRadius: "8px", padding: "10px", width: "40%", marginLeft: "5px", marginRight: "5px"
},
onChange: event => {
onChange({ title: event.target.value, link: link });
},
}),
h('input', {
key: 'control-input',
value: link,
style: {
border: "1px solid #ced4da", borderRadius: "8px", padding: "10px", width: "40%", marginLeft: "5px", marginRight: "5px"
},
onChange: event => {
onChange({ title: 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")
)))},
});
CMS.registerShortcode('youtube', {
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 h('div', {className: "row", style: { border: "1px solid #868686", borderRadius: "8px", padding: "10px" }},
h('b', {style: {fontFamily: "sans-serif", margin: "10px"}}, "YoutTube-Video:"),
h('input', {
key: 'control-input',
value: src,
style: {
border: "1px solid #ced4da", borderRadius: "8px", padding: "10px", width: "80%"
},
onChange: event => {
onChange({ src: event.target.value });
},
}),
h('div', {className: "row", style: {"marginTop": "10px"}},
h(
'iframe',
{
key: 'control-preview',
width: '100%',
height: '360',
src: `https://piped.kavin.rocks/embed/${src}`,
style: { borderRadius: "8px" }
},
'',
)
));
},
preview: ({ src }) => {
return h(
'span',
{},
h(
'iframe',
{
width: '420',
height: '315',
src: `https://piped.kavin.rocks/embed/${src}`,
},
'',
),
);
},
});
</script>
<script id="preview-styles">
CMS.registerPreviewStyle("https://assets.cantorgymnasium.de/bootstrap/v4/bootstrap.min.css");
CMS.registerPreviewStyle("https://assets.cantorgymnasium.de/fonts/fira/fira.css");
CMS.registerPreviewStyle("https://assets.cantorgymnasium.de/fonts/mdi/v7/css/materialdesignicons.min.css");
CMS.registerPreviewStyle("https://cantorgymnasium.de/scss/style.css");
</script>
<!--script>
var ChronikPreview = ({widgetFor, widgetsFor, entry, document, window }) => {
const divStyle = {
backgroundImage: 'url("/media/backgrounds/page-title.webp"),url("/media/backgrounds/page-title.webp")',
};
return h('div', {"id": "sc-root"},
h('section', {className: "page-title-section overlay", style: divStyle},
h('div', {className: "container"},
h('div', {className: "col-md-8"},
h('ul', {className: "list-inline"},
h('li', {className: "list-inline-item h2"},
h('a', {className: "text-primary font-secondary", href: ""}, "Schulchronik")),
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('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')
)
)
)
)
);
};
CMS.registerPreviewTemplate("schulchronik", ChronikPreview);
</script-->
<script>
var PostPreviewContent = ({widgetFor, entry}) => {
const divStyle = {
backgroundImage: 'url("/media/backgrounds/page-title.webp"),url("/media/backgrounds/page-title.webp")',
};
return h('div', {},
h('section', {className: "page-title-section overlay", style: divStyle},
h('div', {className: "container"},
h('div', {className: "col-md-8"},
h('ul', {className: "list-inline"},
h('li', {className: "list-inline-item h2"},
h('a', {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)))),
h('section', {className: "section-sm"},
h('div', {className: "container"},
h('div', {className: "row"},
h('div', {className: "col-12 mb-4"},
h('div', {className: "content"}, widgetFor('body')))))));
};
["abiturienten", "cantorfora", "chronikseiten"].forEach(page => {
CMS.registerPreviewTemplate(page, PostPreviewContent);
});
</script>
<script>
var PagePreview = ({widgetFor, entry}) => {
const divStyle = {
backgroundImage: 'url("/media/backgrounds/page-title.webp"),url("/media/backgrounds/page-title.webp")',
};
return h('div', {},
h('section', {className: "page-title-section overlay", style: divStyle},
h('div', {className: "row"},
h('div', {className: "container"},
h('div', {className: "col-md-8"},
h('ul', {className: "list-inline"},
h('li', {className: "list-inline-item h2"},
h('a', {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))))));
};
["cantorpreis-index"].forEach(page => {
CMS.registerPreviewTemplate(page, PagePreview);
});
</script>
<script>
const NoDateCard = ({ entry, widgetFor, viewStyle }) => {
return h(
'div',
{ style: { width: '100%', height: '100%' } },
viewStyle === 'grid' ? widgetFor('image') : null,
h(
'div',
{ style: { padding: '16px', width: '100%' } },
h(
'div',
{
style: {
display: 'flex',
width: '100%',
justifyContent: 'space-between',
alignItems: 'start',
},
},
h(
'div',
{
style: {
display: 'flex',
flexDirection: viewStyle === 'grid' ? 'column' : 'row',
alignItems: 'baseline',
gap: '8px',
},
},
h('strong', { style: { fontSize: '20px' } }, entry.data.title),
),
h(
'div',
{
style: {
backgroundColor: entry.data.draft === true ? 'RoyalBlue' : 'green',
color: 'white',
border: 'none',
padding: '4px 8px',
textAlign: 'center',
textDecoration: 'none',
display: 'inline-block',
cursor: 'pointer',
borderRadius: '4px',
},
},
entry.data.draft === true ? 'Entwurf' : 'Öffentlich',
),
),
),
);
};
const SmallCard = ({ entry, widgetFor, viewStyle }) => {
return h(
'div',
{ style: { width: '100%', height: '100%' } },
h(
'div',
{ style: { padding: '16px', width: '100%' } },
h(
'div',
{
style: {
display: 'flex',
width: '100%',
justifyContent: 'space-between',
alignItems: 'start',
},
},
h(
'div',
{
style: {
display: 'flex',
flexDirection: viewStyle === 'grid' ? 'column' : 'row',
alignItems: 'baseline',
gap: '8px',
},
},
h('strong', { style: { fontSize: '20px' } }, entry.data.title),
),
h(
'div',
{
style: {
backgroundColor: entry.data.draft === true ? 'RoyalBlue' : 'green',
color: 'white',
border: 'none',
padding: '4px 8px',
textAlign: 'center',
textDecoration: 'none',
display: 'inline-block',
cursor: 'pointer',
borderRadius: '4px',
},
},
entry.data.draft === true ? 'Entwurf' : 'Öffentlich',
),
),
),
);
};
['schulchronik', 'chronikseiten', 'cantorpreis-index'].forEach(page => {
CMS.registerPreviewCard(page, SmallCard);
});
CMS.registerPreviewCard('abiturienten', NoDateCard);
CMS.registerPreviewCard('cantorfora', NoDateCard);
</script>
</body>
</html>