Add scribbles
All checks were successful
Deploy / deploy (push) Successful in 3s

This commit is contained in:
Marcel Kapfer 2025-01-31 22:04:40 +01:00
parent b36abcd3bf
commit 0d40b85f76
Signed by: mmk2410
GPG key ID: CADE6F0C09F21B09
13 changed files with 232 additions and 58 deletions

File diff suppressed because one or more lines are too long

View file

@ -414,6 +414,45 @@ main {
line-height: 35px;
}
}
.scribble {
&::after {
border-bottom: 1px solid var(--c-primary);
content: "";
display: block;
margin: 40px auto 0;
width: 80%;
@media (prefers-color-scheme: dark) {
border-bottom-color: var(--c-primary-inv);
}
}
&:last-of-type::after {
display: none;
}
&:last-child {
margin-bottom: 0;
}
h1, h2 {
font-size: 0.86rem;
font-weight: 300;
font-style: italic;
text-decoration: none;
a {
text-decoration: none;
}
}
@media screen and (max-width: 1100px) {
h1 {
padding-top: 20px;
}
}
}
}
footer {

View file

@ -0,0 +1,28 @@
title: Scribble
num: '{{ page.date.toDate("YmdHis") }}'
create:
title: "{{ page.date.toDate('Y-m-d H:i') }}"
slug: "{{ page.date.toDate('Ymd-Hi') }}"
fields:
- date
sections:
meta:
type: fields
fields:
date:
type: date
label: Date
required: true
time:
step: 1
default: now
text:
type: textarea
label: Scribble
font: monospace
size: small
files:
type: files

View file

@ -0,0 +1,24 @@
title: Scribbles Page
sections:
fields:
type: fields
fields:
text:
type: textarea
font: monospace
size: small
drafts:
extends: sections/scribbles
label: Drafts
status: draft
unlisted:
extends: sections/scribbles
label: Unlisted
status: unlisted
listed:
extends: sections/scribbles
label: Published
status: listed
seo:
extends: sections/seo

View file

@ -0,0 +1,11 @@
type: pages
search: true
image: false
template: scribble
sortBy: date desc
empty: No scribbles yet
layout: table
columns:
date:
label: Published on
width: 1/4

View file

@ -9,6 +9,10 @@ return [
'pattern' => 'feed',
'action' => fn () => go('/blog.rss')
],
[
'pattern' => 'feed/scribbles',
'action' => fn () => go('/scribbles.rss')
],
[
'pattern' => 'index.xml',
'action' => fn () => go('/blog.rss')
@ -32,6 +36,15 @@ return [
'action' => function($tag) {
return page('blog')->render(['tag' => $tag]);
}
]
],
[
'pattern' => 'scribbles/(:num)/(:num)/(:num)-(:num)',
'action' => function ($year, $month, $day, $time) {
$path = $year . $month . $day . '-' . $time;
$page = page('scribbles/' . $path);
if (!$page) return site()->errorPage();
return site()->visit($page);
}
],
]
];

View file

@ -0,0 +1,11 @@
<?php
use Kirby\Cms\Page;
return function (Page $page): array {
$scribbles = $page->children()->listed();
return [
'scribbles' => $scribbles->flip()->paginate(20)
];
};

19
site/models/scribble.php Normal file
View file

@ -0,0 +1,19 @@
<?php
use Kirby\Cms\Page;
/**
* @method object date()
* @method object text()
*/
class ScribblePage extends Page
{
/**
* @param array|string|null $options
*/
public function url($options = null): string
{
$date = $this->date()->toDate('Y/m/d-Hi');
return '/scribbles/' . $date;
}
}

View file

@ -0,0 +1,21 @@
<?php
/**
* @var ScribblePage $scribble
* @var bool $singlePage
*/
$headlineLevel = $singlePage ? 1 : 2;
$title = $scribble->date()->toDate('j. F Y @ h:i');
?>
<article class="scribble">
<h<?= $headlineLevel ?>>
<?php if (!$singlePage): ?>
<a href="<?= $scribble->url() ?>"><?= $title ?></a>
<?php else: ?>
<?= $title ?>
<?php endif ?>
</h<?= $headlineLevel ?>>
<?= $scribble->text()->kirbytext() ?>
</article>

View file

@ -14,59 +14,4 @@ $articles = $page
->sortBy('date', 'desc')
->limit(10);
$writer = new XMLWriter();
$writer->openMemory();
$writer->setIndent(true);
$writer->setIndentString(' ');
$writer->startDocument('1.0', 'UTF-8', 'yes');
$writer->startElement('rss');
$writer->writeAttribute('version', '2.0');
$writer->writeAttributeNs('xmlns', 'atom', null, 'http://www.w3.org/2005/Atom');
$writer->startElement('channel');
$writer->writeElement('title', $site->title()->toString());
$writer->writeElement('link', url());
$writer->writeElement('description', $site->description()->toString());
$writer->writeElement('language', 'en-GB');
$writer->writeElement(
'lastBuildDate',
$articles->first()->date()->toDate(DATE_RSS)
);
$writer->writeElement('generator', 'Kirby CMS');
$writer->writeElement('docs', 'https://www.rssboard.org/rss-specification');
$writer->startElementNs('atom', 'link', null);
$writer->writeAttribute('href', url('/feed'));
$writer->writeAttribute('rel', 'self');
$writer->writeAttribute('type', 'application/rss+xml');
$writer->endElement(); // atom:link
$writer->startElement('image');
$writer->writeElement('url', url('/assets/img/favicon/favicon.png'));
$writer->writeElement('title', $site->title()->toString());
$writer->writeElement('link', url());
$writer->endElement(); // image
foreach ($articles as $article) {
/** @var Kirby\Cms\Page $article */
$writer->startElement('item');
$writer->writeElement('title', $article->title()->toString());
$writer->writeElement('link', url($article->url()));
$writer->writeElement('guid', url($article->url()));
$writer->writeElement('pubDate', $article->date()->toDate(DATE_RSS));
$writer->startElement('description');
$writer->writeCdata($article->text()->kirbytext()->toString());
$writer->endElement(); // description
$writer->endElement(); // item
}
$writer->endElement(); // channel
$writer->endElement(); // rss
$writer->endDocument();
echo $writer->outputMemory();
echo (new Mmk2410\KirbyHelpers\RssFeed($site, $articles, '/feed'))->generate();

View file

@ -0,0 +1,12 @@
<?php
/**
* @var ScribblePage $page
*/
?>
<?php snippet('layout', slots: true) ?>
<?php slot() ?>
<?php snippet('scribble', ['scribble' => $page, 'singlePage' => true]) ?>
<a href="<?= page('scribbles')->url() ?>">More mindless drivel</a>
<?php endslot() ?>

View file

@ -0,0 +1,34 @@
<?php
/**
* @var Kirby\Cms\Page $page
* @var Kirby\Cms\Pages $scribbles
*/
?>
<?php snippet('layout', slots: true) ?>
<?php slot() ?>
<h1><?= $page->title() ?></h1>
<?= $page->text()->kirbytext() ?>
<?php foreach($scribbles as $scribble): ?>
<?php snippet('scribble', ['scribble' => $scribble, 'singlePage' => false]) ?>
<?php endforeach ?>
<?php if ($scribbles->pagination()->hasPages()): ?>
<nav class="pagination">
<?php if ($scribbles->pagination()->hasNextPage()): ?>
<a class="page-item next" href="<?= $scribbles->pagination()->nextPageURL() ?>">
older scribbles
</a>
<?php endif ?>
<?php if ($scribbles->pagination()->hasPrevPage()): ?>
<a class="page-item prev" href="<?= $scribbles->pagination()->prevPageURL() ?>">
newer scribbles
</a>
<?php endif ?>
</nav>
<?php endif ?>
<?php endslot() ?>

View file

@ -0,0 +1,17 @@
<?php
/**
* @var Kirby\Cms\Kirby $kirby
* @var Kirby\Cms\Site $site
* @var Kirby\Cms\Page $page
*/
$kirby->response()->type('application/rss+xml');
$scribbles = $page
->children()
->template('scribble')
->listed()
->sortBy('date', 'desc')
->limit(25);
echo (new Mmk2410\KirbyHelpers\RssFeed($site, $scribbles, '/feed/scribbles'))->generate();