notes/hooks/notes.py

37 lines
1.1 KiB
Python

import jinja2
from mkdocs.structure.nav import Navigation
from urllib.parse import urlparse
@jinja2.pass_context
def get_page(context, slug):
nav = context["nav"]
for page in nav.pages:
if page.file.src_uri == slug:
return page
raise ValueError("Unable to find page for '%s'", slug)
def get_notes_from_nav(nav: Navigation):
notes_section = next(item for item in nav if item.is_section and item.title == "Notes")
notes = [item for item in nav.pages if item.is_page and notes_section in item.ancestors and item.file.src_uri != "notes/index.md"]
return notes_section, notes
@jinja2.pass_context
def get_notes(context):
notes_section, notes = get_notes_from_nav(context["nav"])
return sorted(notes, key=lambda p: p.meta["git_creation_date_localized_raw_iso_date"], reverse=True)
def get_domain(url):
return urlparse(url).netloc
def on_env(env, config, files):
env.tests["startswith"] = str.startswith
env.globals["get_page"] = get_page
env.globals["get_notes"] = get_notes
env.filters["domain"] = get_domain