1
0
mirror of https://github.com/venthur/blag.git synced 2025-11-25 20:52:43 +00:00

Merge branch 'master' into better_default_theme

This commit is contained in:
Bastian Venthur
2023-06-16 09:34:08 +02:00
committed by GitHub
8 changed files with 105 additions and 7 deletions

View File

@@ -14,6 +14,17 @@
New users are not affected as `blag quickstart` will generate the needed New users are not affected as `blag quickstart` will generate the needed
templates. templates.
* Split former archive page which served as index.html into "index" and
"archive", each with their own template, respectively. Index is the landing
page and shows by default only the latest 10 articles. Archive shows the full
list of articles.
If you used custom templates,
* you should create an "index.html"-template (take blag's default one as a
starting point)
* you may want to include the new "/archive.html" link somewhere in your
navigation
### Changed ### Changed
* blag comes now with a simple yet good looking default theme that supports * blag comes now with a simple yet good looking default theme that supports

View File

@@ -257,6 +257,7 @@ def build(args: argparse.Namespace) -> None:
try: try:
page_template = env.get_template('page.html') page_template = env.get_template('page.html')
article_template = env.get_template('article.html') article_template = env.get_template('article.html')
index_template = env.get_template('index.html')
archive_template = env.get_template('archive.html') archive_template = env.get_template('archive.html')
tags_template = env.get_template('tags.html') tags_template = env.get_template('tags.html')
tag_template = env.get_template('tag.html') tag_template = env.get_template('tag.html')
@@ -286,6 +287,7 @@ def build(args: argparse.Namespace) -> None:
blog_description=config['description'], blog_description=config['description'],
blog_author=config['author'], blog_author=config['author'],
) )
generate_index(articles, index_template, args.output_dir)
generate_archive(articles, archive_template, args.output_dir) generate_archive(articles, archive_template, args.output_dir)
generate_tags(articles, tags_template, tag_template, args.output_dir) generate_tags(articles, tags_template, tag_template, args.output_dir)
@@ -305,6 +307,8 @@ def process_markdown(
If a markdown file has a `date` metadata field it will be recognized If a markdown file has a `date` metadata field it will be recognized
as article otherwise as page. as article otherwise as page.
Articles are sorted by date in descending order.
Parameters Parameters
---------- ----------
convertibles convertibles
@@ -317,7 +321,7 @@ def process_markdown(
Returns Returns
------- -------
list[tuple[str, dict[str, Any]]], list[tuple[str, dict[str, Any]]] list[tuple[str, dict[str, Any]]], list[tuple[str, dict[str, Any]]]
articles and pages articles and pages, articles are sorted by date in descending order.
""" """
logger.info("Converting Markdown files...") logger.info("Converting Markdown files...")
@@ -404,12 +408,14 @@ def generate_feed(
feed.write(fh, encoding='utf8') feed.write(fh, encoding='utf8')
def generate_archive( def generate_index(
articles: list[tuple[str, dict[str, Any]]], articles: list[tuple[str, dict[str, Any]]],
template: Template, template: Template,
output_dir: str, output_dir: str,
) -> None: ) -> None:
"""Generate the archive page. """Generate the index page.
This is used for the index (i.e. landing) page.
Parameters Parameters
---------- ----------
@@ -431,6 +437,35 @@ def generate_archive(
fh.write(result) fh.write(result)
def generate_archive(
articles: list[tuple[str, dict[str, Any]]],
template: Template,
output_dir: str,
) -> None:
"""Generate the archive page.
This is used for the full archive.
Parameters
----------
articles
List of articles. Each article has the destination path and a
dictionary with the content.
template
output_dir
"""
archive = []
for dst, context in articles:
entry = context.copy()
entry['dst'] = dst
archive.append(entry)
result = template.render(dict(archive=archive))
with open(f'{output_dir}/archive.html', 'w') as fh:
fh.write(result)
def generate_tags( def generate_tags(
articles: list[tuple[str, dict[str, Any]]], articles: list[tuple[str, dict[str, Any]]],
tags_template: Template, tags_template: Template,

View File

@@ -1,6 +1,6 @@
{% extends "base.html" %} {% extends "base.html" %}
{% block title %}{{ site.title }}{% endblock %} {% block title %}Archive{% endblock %}
{% block content %} {% block content %}

23
blag/templates/index.html Normal file
View File

@@ -0,0 +1,23 @@
{% extends "base.html" %}
{% block title %}{{ site.title }}{% endblock %}
{% block content %}
{% for entry in archive[:10] %}
{% if entry.title %}
<h1><a href="{{entry.dst}}">{{entry.title}}</a></h1>
{% if entry.description %}
<p>— {{ entry.description }}</p>
{% endif %}
{% endif %}
<p>Written on {{ entry.date.date() }}.</p>
{% endfor %}
<p><a href="/archive.html">all articles...</a></p>
{% endblock %}

View File

@@ -193,7 +193,8 @@ Template Used For Variables
============ ====================================== =================== ============ ====================================== ===================
page.html pages (i.e. non-articles) site, content, meta page.html pages (i.e. non-articles) site, content, meta
article.html articles (i.e. blog posts) site, content, meta article.html articles (i.e. blog posts) site, content, meta
archive.html archive- and landing page of the blog site, archive index.html landing page of the blog site, archive
archive.html archive page of the blog site, archive
tags.html list of tags site, tags tags.html list of tags site, tags
tag.html archive of Articles with a certain tag site, archive, tag tag.html archive of Articles with a certain tag site, archive, tag
============ ====================================== =================== ============ ====================================== ===================

View File

@@ -33,6 +33,11 @@ def article_template(environment: Environment) -> Iterator[Template]:
yield environment.get_template('article.html') yield environment.get_template('article.html')
@pytest.fixture
def index_template(environment: Environment) -> Iterator[Template]:
yield environment.get_template('index.html')
@pytest.fixture @pytest.fixture
def archive_template(environment: Environment) -> Iterator[Template]: def archive_template(environment: Environment) -> Iterator[Template]:
yield environment.get_template('archive.html') yield environment.get_template('archive.html')

View File

@@ -291,8 +291,10 @@ foo bar
assert os.path.exists(f'{args.output_dir}/testdir/test') assert os.path.exists(f'{args.output_dir}/testdir/test')
# ... feed # ... feed
assert os.path.exists(f'{args.output_dir}/atom.xml') assert os.path.exists(f'{args.output_dir}/atom.xml')
# ... archive # ... index
assert os.path.exists(f'{args.output_dir}/index.html') assert os.path.exists(f'{args.output_dir}/index.html')
# ... archive
assert os.path.exists(f'{args.output_dir}/archive.html')
# ... tags # ... tags
assert os.path.exists(f'{args.output_dir}/tags/index.html') assert os.path.exists(f'{args.output_dir}/tags/index.html')
assert os.path.exists(f'{args.output_dir}/tags/foo.html') assert os.path.exists(f'{args.output_dir}/tags/foo.html')
@@ -304,6 +306,7 @@ foo bar
[ [
'page.html', 'page.html',
'article.html', 'article.html',
'index.html',
'archive.html', 'archive.html',
'tags.html', 'tags.html',
'tag.html', 'tag.html',

View File

@@ -27,6 +27,26 @@ def test_article(article_template: Template) -> None:
assert '1980-05-09' in result assert '1980-05-09' in result
def test_index(index_template: Template) -> None:
entry = {
'title': 'this is a title',
'dst': 'https://example.com/link',
'date': datetime.datetime(1980, 5, 9),
}
archive = [entry]
ctx = {
'archive': archive,
}
result = index_template.render(ctx)
assert 'site title' in result
assert 'this is a title' in result
assert '1980-05-09' in result
assert 'https://example.com/link' in result
assert '/archive.html' in result
def test_archive(archive_template: Template) -> None: def test_archive(archive_template: Template) -> None:
entry = { entry = {
'title': 'this is a title', 'title': 'this is a title',
@@ -38,7 +58,7 @@ def test_archive(archive_template: Template) -> None:
'archive': archive, 'archive': archive,
} }
result = archive_template.render(ctx) result = archive_template.render(ctx)
assert 'site title' in result assert 'Archive' in result
assert 'this is a title' in result assert 'this is a title' in result
assert '1980-05-09' in result assert '1980-05-09' in result