From 68af1e279438725d55d72c01f4ed8128ee7b9230 Mon Sep 17 00:00:00 2001 From: Kim Christie Date: Mon, 7 Sep 2026 14:25:12 +0100 Subject: [PATCH 1/3] Initial Navigation --- src/mkdocs/mkdocs.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/mkdocs/mkdocs.py b/src/mkdocs/mkdocs.py index c49658c..8038aaa 100644 --- a/src/mkdocs/mkdocs.py +++ b/src/mkdocs/mkdocs.py @@ -93,6 +93,20 @@ def __bool__(self): return bool(self._items) +class NavItem: + def __init__(self, title, page: Page): + self.title = title + self.page = Page + + +class Navigation: + def __init__(self, nav_items): + self._items = nav_items + + def __iter__(self): + return iter(self._items) + + class PageContext: def __init__(self, page, text, html, toc): self.path = page.path @@ -111,6 +125,7 @@ def title(self): class MkDocs: def __init__(self, input_dir): self.site_index = self.load_site(input_dir) + self.nav = self.load_nav({}, self.site_index) self.env = self.init_env(input_dir) self.md = self.init_md() self.base = self.env.get_template('base.html') @@ -140,6 +155,22 @@ def load_site(self, input_dir): statics = sorted(statics, key=lambda x: x.url) return Site(pages, statics) + def load_nav(self, config, site): + nav_config = config.get('nav', []) + nav_config = nav_config if isinstance(nav_config, list) else [] + nav_items = [] + for item in nav_config: + if not isinstance(item, dict): + continue + path = item.get('path', None) + if not path: + continue + if path: + page = site.lookup.get(path) + nav_item = NavItem(page) + nav_items.append(nav_item) + return Navigation(nav_items) + def init_env(self, input_dir) -> jinja2.Environment: @jinja2.pass_context def url(ctx, url_to): From 768413e4fa14560a74783f22eda216388e948f16 Mon Sep 17 00:00:00 2001 From: Kim Christie Date: Mon, 7 Sep 2026 16:09:33 +0100 Subject: [PATCH 2/3] Fix responsive styling --- src/mkdocs/theme/base.html | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/mkdocs/theme/base.html b/src/mkdocs/theme/base.html index f826d58..d647f36 100644 --- a/src/mkdocs/theme/base.html +++ b/src/mkdocs/theme/base.html @@ -43,19 +43,33 @@ @media (max-width: 1000px) { main { + margin-left: 20%; width: 75%; } nav.toc { display: none; } + + nav.site { + width: 25%; + } } -@media (max-width: 600px) { +@media (max-width: 750px) { main { + margin-left: 0; width: 100%; padding: 1rem 1.5rem; } + + nav.toc { + display: none; + } + + nav.site { + display: none; + } } /* Typography & spacing */ From 8016fdc45f9633eb36dbc357ec8c415631c218b4 Mon Sep 17 00:00:00 2001 From: Kim Christie Date: Tue, 8 Sep 2026 11:33:52 +0100 Subject: [PATCH 3/3] Highlight active page in nav --- src/mkdocs/mkdocs.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/mkdocs/mkdocs.py b/src/mkdocs/mkdocs.py index c6e1b8e..058d4ad 100644 --- a/src/mkdocs/mkdocs.py +++ b/src/mkdocs/mkdocs.py @@ -114,8 +114,9 @@ def __iter__(self): @property def html(self): - t = jinja2.Template("""""") - return t.render({"nav": self}) + page = get_current_page() + t = jinja2.Template("""""") + return t.render({"nav": self, "page": page}) class PageContext: