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:
11
CHANGELOG.md
11
CHANGELOG.md
@@ -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
|
||||||
|
|||||||
41
blag/blag.py
41
blag/blag.py
@@ -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,
|
||||||
|
|||||||
@@ -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
23
blag/templates/index.html
Normal 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 %}
|
||||||
@@ -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
|
||||||
============ ====================================== ===================
|
============ ====================================== ===================
|
||||||
|
|||||||
@@ -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')
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user