From 68af1e279438725d55d72c01f4ed8128ee7b9230 Mon Sep 17 00:00:00 2001 From: Kim Christie Date: Mon, 7 Sep 2026 14:25:12 +0100 Subject: [PATCH 1/8] 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/8] 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/8] 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: From 9a2d54916741348a1caf11ab4cbccd23fd64dde0 Mon Sep 17 00:00:00 2001 From: Kim Christie Date: Fri, 11 Sep 2026 11:21:46 +0100 Subject: [PATCH 4/8] Support site navigation on homepage --- docs/LICENSE.md | 0 docs/css/theme.css | 51 ++++++++++++++++++++++++++++++++++++---- docs/templates/base.html | 3 +++ 3 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 docs/LICENSE.md diff --git a/docs/LICENSE.md b/docs/LICENSE.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/css/theme.css b/docs/css/theme.css index a955299..f4fa055 100644 --- a/docs/css/theme.css +++ b/docs/css/theme.css @@ -44,7 +44,7 @@ main { } } -@media (max-width: 800px) { +@media (max-width: 750px) { main { padding: 1.5rem 1rem; width: 100%; @@ -53,6 +53,10 @@ main { nav.toc { display: none; } + + nav.site { + display: none; + } } /* Typography & spacing */ @@ -214,6 +218,45 @@ div.pagination a.next { text-decoration: none; } +/* Navigation styling */ + +nav.site { + position: fixed; + width : 20%; + padding: 2rem; + height: 100%; + overflow-y: scroll; +} + +nav.site ul { + padding: 0; + margin: 0; +} + +nav.site li { + padding: 0; + margin: 0.5rem 0; + display: block; +} + +nav.site li a.active { + color: var(--link-color); +} + +nav.site li a:hover { + color: var(--link-color); + text-decoration: none; +} + +nav.site li a { + color: var(--muted-fg-color); +} + +nav.site li a:hover { + color: var(--fg-color); + text-decoration: none; +} + /* Table of contents styling */ nav.toc { @@ -225,8 +268,6 @@ nav.toc { overflow-y: scroll; } -/* Navigation styling */ - nav.toc ul { padding: 0; margin: 0; @@ -254,4 +295,6 @@ nav.toc li a { nav.toc li a:hover { color: var(--fg-color); text-decoration: none; -} \ No newline at end of file +} + +/* Navigation styling */ diff --git a/docs/templates/base.html b/docs/templates/base.html index c7c500a..6228513 100644 --- a/docs/templates/base.html +++ b/docs/templates/base.html @@ -12,6 +12,9 @@ + From 6660534182a025c6502b2043910e68758d6a98da Mon Sep 17 00:00:00 2001 From: Kim Christie Date: Fri, 11 Sep 2026 11:22:26 +0100 Subject: [PATCH 5/8] Version 2.0.dev4 --- src/mkdocs/__version__.py | 2 +- uv.lock | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/mkdocs/__version__.py b/src/mkdocs/__version__.py index a335a7c..a7971ae 100644 --- a/src/mkdocs/__version__.py +++ b/src/mkdocs/__version__.py @@ -1,2 +1,2 @@ __title__ = "mkdocs" -__version__ = "2.0.dev3" +__version__ = "2.0.dev4" diff --git a/uv.lock b/uv.lock index 6525700..26edd46 100644 --- a/uv.lock +++ b/uv.lock @@ -13,14 +13,15 @@ wheels = [ [[package]] name = "httpx" -version = "1.0.dev5" +version = "1.0.dev6" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "truststore" }, + { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/51/1b/1471c9b33061b8bb8fe32a5dcf488371ec890550c033981f3c625fc2689e/httpx-1.0.dev5.tar.gz", hash = "sha256:56fc545e2afa14ea800153a0d2418e2598f78b3cd7c853df9a38f38b516a0f35", size = 29871, upload-time = "2026-08-21T10:59:58.52Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fb/cf/b69904e914caa43e662c2275612a347c8a3f084cba7ecbcab45bb0487d63/httpx-1.0.dev6.tar.gz", hash = "sha256:918d99857fb7b841e6d79a7cda909125df8b2466e6959c3ca4c23130052b6e6a", size = 29938, upload-time = "2026-08-31T17:59:55.135Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fc/a2/b5ebbdbdf44f598ef6552c37faad06ec9684ac26d92012fdd10db2e12b16/httpx-1.0.dev5-py3-none-any.whl", hash = "sha256:cea2ce9a060dfdab35ce568188032bd5e58cff574cdde67bafbeae90237e545e", size = 37788, upload-time = "2026-08-21T10:59:57.494Z" }, + { url = "https://files.pythonhosted.org/packages/74/bc/dc055edab7b3aad9da517f4b4581ee233b1b3a4df4ec9d5f84407f74bc08/httpx-1.0.dev6-py3-none-any.whl", hash = "sha256:516cd76d86f016b2bc25d544d892a3ecce8db263459b3084894753fec322c841", size = 37878, upload-time = "2026-08-31T17:59:54.19Z" }, ] [[package]] @@ -142,7 +143,7 @@ dependencies = [ [package.metadata] requires-dist = [ { name = "click" }, - { name = "httpx", specifier = ">=1.0.dev5" }, + { name = "httpx", specifier = ">=1.0.dev6" }, { name = "jinja2" }, { name = "markdown" }, ] @@ -155,3 +156,12 @@ sdist = { url = "https://files.pythonhosted.org/packages/53/a3/1585216310e344e81 wheels = [ { url = "https://files.pythonhosted.org/packages/19/97/56608b2249fe206a67cd573bc93cd9896e1efb9e98bce9c163bcdc704b88/truststore-0.10.4-py3-none-any.whl", hash = "sha256:adaeaecf1cbb5f4de3b1959b42d41f6fab57b2b1666adb59e89cb0b53361d981", size = 18660, upload-time = "2025-08-12T18:49:01.46Z" }, ] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, +] From ac35f7f6b5687ee7fdb18bb2ee763d44ac9825b6 Mon Sep 17 00:00:00 2001 From: Kim Christie Date: Fri, 11 Sep 2026 11:27:24 +0100 Subject: [PATCH 6/8] Revert "Version 2.0.dev4" This reverts commit 6660534182a025c6502b2043910e68758d6a98da. --- src/mkdocs/__version__.py | 2 +- uv.lock | 18 ++++-------------- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/src/mkdocs/__version__.py b/src/mkdocs/__version__.py index a7971ae..a335a7c 100644 --- a/src/mkdocs/__version__.py +++ b/src/mkdocs/__version__.py @@ -1,2 +1,2 @@ __title__ = "mkdocs" -__version__ = "2.0.dev4" +__version__ = "2.0.dev3" diff --git a/uv.lock b/uv.lock index 26edd46..6525700 100644 --- a/uv.lock +++ b/uv.lock @@ -13,15 +13,14 @@ wheels = [ [[package]] name = "httpx" -version = "1.0.dev6" +version = "1.0.dev5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "truststore" }, - { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fb/cf/b69904e914caa43e662c2275612a347c8a3f084cba7ecbcab45bb0487d63/httpx-1.0.dev6.tar.gz", hash = "sha256:918d99857fb7b841e6d79a7cda909125df8b2466e6959c3ca4c23130052b6e6a", size = 29938, upload-time = "2026-08-31T17:59:55.135Z" } +sdist = { url = "https://files.pythonhosted.org/packages/51/1b/1471c9b33061b8bb8fe32a5dcf488371ec890550c033981f3c625fc2689e/httpx-1.0.dev5.tar.gz", hash = "sha256:56fc545e2afa14ea800153a0d2418e2598f78b3cd7c853df9a38f38b516a0f35", size = 29871, upload-time = "2026-08-21T10:59:58.52Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/74/bc/dc055edab7b3aad9da517f4b4581ee233b1b3a4df4ec9d5f84407f74bc08/httpx-1.0.dev6-py3-none-any.whl", hash = "sha256:516cd76d86f016b2bc25d544d892a3ecce8db263459b3084894753fec322c841", size = 37878, upload-time = "2026-08-31T17:59:54.19Z" }, + { url = "https://files.pythonhosted.org/packages/fc/a2/b5ebbdbdf44f598ef6552c37faad06ec9684ac26d92012fdd10db2e12b16/httpx-1.0.dev5-py3-none-any.whl", hash = "sha256:cea2ce9a060dfdab35ce568188032bd5e58cff574cdde67bafbeae90237e545e", size = 37788, upload-time = "2026-08-21T10:59:57.494Z" }, ] [[package]] @@ -143,7 +142,7 @@ dependencies = [ [package.metadata] requires-dist = [ { name = "click" }, - { name = "httpx", specifier = ">=1.0.dev6" }, + { name = "httpx", specifier = ">=1.0.dev5" }, { name = "jinja2" }, { name = "markdown" }, ] @@ -156,12 +155,3 @@ sdist = { url = "https://files.pythonhosted.org/packages/53/a3/1585216310e344e81 wheels = [ { url = "https://files.pythonhosted.org/packages/19/97/56608b2249fe206a67cd573bc93cd9896e1efb9e98bce9c163bcdc704b88/truststore-0.10.4-py3-none-any.whl", hash = "sha256:adaeaecf1cbb5f4de3b1959b42d41f6fab57b2b1666adb59e89cb0b53361d981", size = 18660, upload-time = "2025-08-12T18:49:01.46Z" }, ] - -[[package]] -name = "typing-extensions" -version = "4.16.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, -] From d0c8745acb59f4f87fd37fef1f85633bd43203aa Mon Sep 17 00:00:00 2001 From: Kim Christie Date: Fri, 11 Sep 2026 11:31:10 +0100 Subject: [PATCH 7/8] License --- docs/LICENSE.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/LICENSE.md b/docs/LICENSE.md index e69de29..924c5a3 100644 --- a/docs/LICENSE.md +++ b/docs/LICENSE.md @@ -0,0 +1,9 @@ +Copyright © 2026, Encode OSS Ltd. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +

— 💖 —

\ No newline at end of file From 31049456eb86c46880111ee04c128dc6128e7e9e Mon Sep 17 00:00:00 2001 From: Kim Christie Date: Fri, 11 Sep 2026 11:31:21 +0100 Subject: [PATCH 8/8] Dev dependencies --- uv.lock | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/uv.lock b/uv.lock index 6525700..26edd46 100644 --- a/uv.lock +++ b/uv.lock @@ -13,14 +13,15 @@ wheels = [ [[package]] name = "httpx" -version = "1.0.dev5" +version = "1.0.dev6" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "truststore" }, + { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/51/1b/1471c9b33061b8bb8fe32a5dcf488371ec890550c033981f3c625fc2689e/httpx-1.0.dev5.tar.gz", hash = "sha256:56fc545e2afa14ea800153a0d2418e2598f78b3cd7c853df9a38f38b516a0f35", size = 29871, upload-time = "2026-08-21T10:59:58.52Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fb/cf/b69904e914caa43e662c2275612a347c8a3f084cba7ecbcab45bb0487d63/httpx-1.0.dev6.tar.gz", hash = "sha256:918d99857fb7b841e6d79a7cda909125df8b2466e6959c3ca4c23130052b6e6a", size = 29938, upload-time = "2026-08-31T17:59:55.135Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fc/a2/b5ebbdbdf44f598ef6552c37faad06ec9684ac26d92012fdd10db2e12b16/httpx-1.0.dev5-py3-none-any.whl", hash = "sha256:cea2ce9a060dfdab35ce568188032bd5e58cff574cdde67bafbeae90237e545e", size = 37788, upload-time = "2026-08-21T10:59:57.494Z" }, + { url = "https://files.pythonhosted.org/packages/74/bc/dc055edab7b3aad9da517f4b4581ee233b1b3a4df4ec9d5f84407f74bc08/httpx-1.0.dev6-py3-none-any.whl", hash = "sha256:516cd76d86f016b2bc25d544d892a3ecce8db263459b3084894753fec322c841", size = 37878, upload-time = "2026-08-31T17:59:54.19Z" }, ] [[package]] @@ -142,7 +143,7 @@ dependencies = [ [package.metadata] requires-dist = [ { name = "click" }, - { name = "httpx", specifier = ">=1.0.dev5" }, + { name = "httpx", specifier = ">=1.0.dev6" }, { name = "jinja2" }, { name = "markdown" }, ] @@ -155,3 +156,12 @@ sdist = { url = "https://files.pythonhosted.org/packages/53/a3/1585216310e344e81 wheels = [ { url = "https://files.pythonhosted.org/packages/19/97/56608b2249fe206a67cd573bc93cd9896e1efb9e98bce9c163bcdc704b88/truststore-0.10.4-py3-none-any.whl", hash = "sha256:adaeaecf1cbb5f4de3b1959b42d41f6fab57b2b1666adb59e89cb0b53361d981", size = 18660, upload-time = "2025-08-12T18:49:01.46Z" }, ] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, +]