summaryrefslogtreecommitdiff
path: root/repo/www
diff options
context:
space:
mode:
authorKévin Le Gouguec <kevin.legouguec@gmail.com>2020-08-26 00:17:32 +0200
committerKévin Le Gouguec <kevin.legouguec@gmail.com>2020-08-28 17:08:45 +0200
commitd0d869e06b30a1f8b7b539978caa0ed6123f9864 (patch)
tree462cde345af47d85ee148286deb33bd5af041d92 /repo/www
parent79f3257437636c153bd9e66131495680ddf39afd (diff)
downloadmemory-leaks-d0d869e06b30a1f8b7b539978caa0ed6123f9864.tar.xz
Add breadcrumbs
Likewise, use relative links so that things work when just browsing files locally without a server. Next: tweak or remove redundant titles.
Diffstat (limited to 'repo/www')
-rw-r--r--repo/www/Makefile2
-rw-r--r--repo/www/crumbs.css31
-rwxr-xr-xrepo/www/generate-index.py9
-rwxr-xr-xrepo/www/generate-page.py8
-rw-r--r--repo/www/helpers.py29
-rw-r--r--repo/www/template.html5
6 files changed, 77 insertions, 7 deletions
diff --git a/repo/www/Makefile b/repo/www/Makefile
index 86d1d98..1f32115 100644
--- a/repo/www/Makefile
+++ b/repo/www/Makefile
@@ -14,7 +14,7 @@ page_patterns = $(foreach ext,$(EXTENSIONS),'$(TOP_DIR)/**.$(ext)')
page_folders = $(call dirnames,$(shell git ls-files $(page_patterns)))
top_readme = $(shell git ls-files $(addprefix $(TOP_DIR)/README.,$(EXTENSIONS)))
html_template = template.html
-stylesheets_src =
+stylesheets_src = crumbs.css
lua_filters = convert-internal-links.lua
all: site
diff --git a/repo/www/crumbs.css b/repo/www/crumbs.css
new file mode 100644
index 0000000..ef42620
--- /dev/null
+++ b/repo/www/crumbs.css
@@ -0,0 +1,31 @@
+nav.breadcrumb ol {
+ padding-left: 0;
+}
+
+nav.breadcrumb li {
+ /* Prefer inline-block to inline, to prevent wrapping inside
+ * individual crumbs. */
+ display: inline-block;
+}
+
+/* Prefer
+ * li:not(:last-child)::after
+ * to
+ * li + li::before
+ * as I want crumbs and slashes to wrap like this:
+ * foo / bar /
+ * baz
+ * rather than like that:
+ * foo / bar
+ * / baz
+ */
+nav.breadcrumb li:not(:last-child)::after {
+ margin-left: 0.25em;
+ height: 0.8em;
+ font-weight: bold;
+ content: '/';
+}
+
+nav.breadcrumb li[aria-current="page"] {
+ font-weight: bold;
+}
diff --git a/repo/www/generate-index.py b/repo/www/generate-index.py
index d615756..a993c41 100755
--- a/repo/www/generate-index.py
+++ b/repo/www/generate-index.py
@@ -10,7 +10,7 @@ from tempfile import NamedTemporaryFile
from git import Repo
-from helpers import deserialize_directories, pandoc
+from helpers import deserialize_directories, generate_crumbs, pandoc
def parse_arguments():
@@ -102,6 +102,7 @@ def main(arguments):
path_to_top = '.'
stylesheets = (path.join(path_to_top, s) for s in arguments.css)
+ variables = {'crumbs': generate_crumbs(Path(target)/'index')}
if readme is not None:
repo_top = Repo(search_parent_directories=True).working_dir
@@ -118,7 +119,8 @@ def main(arguments):
pandoc(readme_path, arguments.output, arguments.template,
arguments.filters, stylesheets, title=page_title,
- site_title=arguments.site_title, include_after=(toc.name,))
+ site_title=arguments.site_title, include_after=(toc.name,),
+ variables=variables)
return
with NamedTemporaryFile(suffix='.md') as dummy_readme, \
@@ -128,7 +130,8 @@ def main(arguments):
pandoc(dummy_readme.name, arguments.output, arguments.template,
arguments.filters, stylesheets, title=index_title,
- site_title=arguments.site_title, include_after=(toc.name,))
+ site_title=arguments.site_title, include_after=(toc.name,),
+ variables=variables)
if __name__ == '__main__':
diff --git a/repo/www/generate-page.py b/repo/www/generate-page.py
index e200a9e..8036cc5 100755
--- a/repo/www/generate-page.py
+++ b/repo/www/generate-page.py
@@ -2,10 +2,11 @@
from argparse import ArgumentParser
from os import path
+from pathlib import Path
from git import Repo
-from helpers import pandoc
+from helpers import generate_crumbs, pandoc
def parse_arguments():
@@ -41,6 +42,8 @@ def main(arguments):
path_to_top = path.relpath(repo_top, path.dirname(arguments.page))
stylesheets = (path.join(path_to_top, s) for s in arguments.css)
+ page_path = Path(arguments.page).resolve().relative_to(repo_top)
+
pandoc(
arguments.page,
arguments.output,
@@ -48,7 +51,8 @@ def main(arguments):
arguments.filters,
stylesheets,
title=arguments.title,
- site_title=arguments.site_title
+ site_title=arguments.site_title,
+ variables={'crumbs': generate_crumbs(page_path)}
)
diff --git a/repo/www/helpers.py b/repo/www/helpers.py
index 9b97902..80b8857 100644
--- a/repo/www/helpers.py
+++ b/repo/www/helpers.py
@@ -57,7 +57,7 @@ def deserialize_directories(directories):
def pandoc(page, output, template, filters, stylesheets, title=None,
- site_title=None, include_after=()):
+ site_title=None, include_after=(), variables=None):
cmd = (
'pandoc', '-s', page, '-o', output, '--template', template,
*chain(*(('--lua-filter', f) for f in filters)),
@@ -69,6 +69,33 @@ def pandoc(page, output, template, filters, stylesheets, title=None,
cmd += ('-M', f'title={title}')
if site_title is not None:
cmd += ('-T', site_title)
+ if variables is not None:
+ cmd += tuple(chain(
+ *(('-V', f'{k}={v}') for k, v in variables.items())
+ ))
environ['LUA_PATH'] = '.cache/?.lua;;'
run(cmd, check=True)
+
+
+def generate_crumbs(target):
+ parts = ('(top)', *target.parts)
+
+ if parts[-1] == 'index':
+ *crumbs, current = parts[:-1]
+ else:
+ crumbs = parts[:-1]
+ current, _ = path.splitext(parts[-1])
+
+ crumbs_li = (
+ '<li><a href="{link}">{crumb}</a></li>'.format(
+ link=(path.relpath(path.join(*crumbs[1:i], 'index.html'),
+ start=target.parent)),
+ crumb=crumb
+ )
+ for i, crumb in enumerate(crumbs, start=1)
+ )
+
+ current_li = f'<li aria-current="page">{current}</li>'
+
+ return '\n'.join((*crumbs_li, current_li))
diff --git a/repo/www/template.html b/repo/www/template.html
index 724cde4..f2b308d 100644
--- a/repo/www/template.html
+++ b/repo/www/template.html
@@ -33,6 +33,11 @@ $include-before$
$endfor$
$if(title)$
<header id="title-block-header">
+<nav class="breadcrumb" aria-label="Breadcrumb">
+<ol>
+$crumbs$
+</ol>
+</nav>
<h1 class="title">$title$</h1>
$if(subtitle)$
<p class="subtitle">$subtitle$</p>