Add simple date, tags to posts.

This commit is contained in:
Sergio Martínez Portela 2022-07-25 17:58:58 +02:00
parent feefd1f4d5
commit 189a94c930
3 changed files with 64 additions and 7 deletions

View File

@ -21,6 +21,7 @@ import shutil
import traceback import traceback
import time import time
import re import re
from typing import List
import jinja2 import jinja2
import inotify.adapters import inotify.adapters
@ -79,6 +80,13 @@ def parse_nikola_date(match):
def parse_complete_date(match): def parse_complete_date(match):
return datetime.datetime.strptime(match.group(0), '%Y-%m-%d %H:%M:%S %Z%z') return datetime.datetime.strptime(match.group(0), '%Y-%m-%d %H:%M:%S %Z%z')
def split_tags(tags: str) -> List[str]:
if isinstance(tags, str):
return [tag.strip() for tag in tags.split(',')]
elif isinstance(tags, list):
return tags
else:
raise NotImplementedError("Unknown tag type: {}".format(type(tags)))
def slugify(title): def slugify(title):
""" """
@ -163,7 +171,12 @@ def load_doc(filepath):
def render_article(doc, front_matter, f): def render_article(doc, front_matter, f):
result = ARTICLE_TEMPLATE.render(content=doc, title=front_matter['title']) result = ARTICLE_TEMPLATE.render(
content=doc,
title=front_matter['title'],
post_publication_date=front_matter['date'],
post_tags=split_tags(front_matter['tags']),
)
f.write(result) f.write(result)
def regen_all(source_top, dest_top, docs=None): def regen_all(source_top, dest_top, docs=None):
@ -174,7 +187,13 @@ def regen_all(source_top, dest_top, docs=None):
os.makedirs(os.path.dirname(doc_full_path), exist_ok=True) os.makedirs(os.path.dirname(doc_full_path), exist_ok=True)
# print("==", doc_full_path) # print("==", doc_full_path)
with open(doc_full_path + '.html', 'wt') as f: with open(doc_full_path + '.html', 'wt') as f:
render_article(doc, front_matter, f) try:
render_article(doc, front_matter, f)
except:
logging.error(traceback.format_exc())
logging.error("Rendering failed 😿")
continue
for static in STATIC_RESOURCES: for static in STATIC_RESOURCES:
src_path = static[0] src_path = static[0]
@ -212,7 +231,13 @@ def main(source_top, dest_top):
filepath = os.path.join(directory, file) filepath = os.path.join(directory, file)
if filepath.startswith(STATIC_PATH): if filepath.startswith(STATIC_PATH):
t0 = time.time() t0 = time.time()
update_statics() try:
update_statics()
except:
logging.error(traceback.format_exc())
logging.error("Loading new templates failed 😿")
continue
is_static_resource = False is_static_resource = False
for static in STATIC_RESOURCES: for static in STATIC_RESOURCES:
src_path = static[0] src_path = static[0]
@ -252,7 +277,13 @@ def main(source_top, dest_top):
os.makedirs(os.path.dirname(doc_full_path), exist_ok=True) os.makedirs(os.path.dirname(doc_full_path), exist_ok=True)
# print("==", doc_full_path) # print("==", doc_full_path)
with open(doc_full_path + '.html', 'wt') as f: with open(doc_full_path + '.html', 'wt') as f:
render_article(doc, front_matter, f) try:
render_article(doc, front_matter, f)
except:
logging.error(traceback.format_exc())
logging.error("Rendering failed 😿")
continue
logging.info("Updated all in {:.2f}s".format(time.time() - t0)) logging.info("Updated all in {:.2f}s".format(time.time() - t0))

View File

@ -29,7 +29,19 @@
<div class="content"> <div class="content">
<article class="post"> <article class="post">
<h2 class="post-title">{{ title }}</h2> <h2 class="post-title">{{ title }}</h2>
{{ content | safe }} <div class="post-metadata">
<time datetime="{{ post_publication_date }}">
{{ post_publication_date }}
</time>
<ul class="post-tags">
{% for post_tag in post_tags %}
<li class="post-tag">{{ post_tag }}</li>
{% endfor %}
</ul>
</div>
<div class="post-content">
{{ content | safe }}
</div>
</article> </article>
</div> </div>
</body> </body>

View File

@ -110,6 +110,8 @@ article.post {
.site-header h1 { .site-header h1 {
margin-top: 0; margin-top: 0;
font-size: 200%; font-size: 200%;
font-family: monospace, sans;
color: #000;
} }
.site-header .site-links .fancy-link { .site-header .site-links .fancy-link {
border-right: 1px solid #000; border-right: 1px solid #000;
@ -119,6 +121,20 @@ article.post {
border: none; border: none;
} }
/* Post header */
.post-metadata ul.post-tags {
list-style: none;
display: inline;
padding: 0;
}
.post-metadata ul.post-tags li.post-tag::before {
content: '#';
}
.post-metadata ul.post-tags li {
display: inline;
}
/* Dark mode. */ /* Dark mode. */
@media (prefers-color-scheme: dark) { @media (prefers-color-scheme: dark) {
@ -133,7 +149,6 @@ article.post {
color: #94dcff; color: #94dcff;
} }
h1,h2,h3,h4,h5,h6 { h1,h2,h3,h4,h5,h6 {
margin-top: 0;
color: #f7da4a; color: #f7da4a;
} }
/* Header */ /* Header */
@ -166,6 +181,5 @@ article.post {
background: #262826; background: #262826;
color: #FFF; color: #FFF;
font-family: Menlo, Monaco, "Courier New", monospace; font-family: Menlo, Monaco, "Courier New", monospace;
font-size: 85%;
} }
} }