mirror of
https://github.com/RealOrangeOne/notes.git
synced 2024-11-17 13:09:04 +00:00
Hide TOC on short pages
This commit is contained in:
parent
9052286c0b
commit
d5aee63bd5
3 changed files with 33 additions and 0 deletions
13
docs/notes/mkdocs-conditionally-hide-toc.md
Normal file
13
docs/notes/mkdocs-conditionally-hide-toc.md
Normal file
|
@ -0,0 +1,13 @@
|
|||
---
|
||||
title: Hide short Table of Contents
|
||||
tags:
|
||||
- Mkdocs
|
||||
---
|
||||
|
||||
Some of my notes don't have headings. Others have barely any. However, the Table of Contents area takes up a large area of screen for no reason.
|
||||
|
||||
This hook only shows the Table of Contents area when there are more than 4 headings (at any level).
|
||||
|
||||
```python
|
||||
{! ../hooks/hide_toc.py !}
|
||||
```
|
19
hooks/hide_toc.py
Normal file
19
hooks/hide_toc.py
Normal file
|
@ -0,0 +1,19 @@
|
|||
from mkdocs.structure.toc import TableOfContents
|
||||
|
||||
def flatten_toc(item):
|
||||
yield item
|
||||
children = item.items if isinstance(item, TableOfContents) else item.children
|
||||
for subitem in children:
|
||||
yield from flatten_toc(subitem)
|
||||
|
||||
|
||||
def on_page_content(html, page, config, files):
|
||||
if not page.url.startswith("notes/") or page.file.src_uri == "notes/index.md":
|
||||
return
|
||||
|
||||
toc = list(flatten_toc(page.toc))
|
||||
|
||||
if len(toc) <= 4:
|
||||
hidden_items = page.meta.setdefault("hide", [])
|
||||
if "toc" not in hidden_items:
|
||||
hidden_items.append("toc")
|
|
@ -55,6 +55,7 @@ theme:
|
|||
hooks:
|
||||
- hooks/notes.py
|
||||
- hooks/tag_nav.py
|
||||
- hooks/hide_toc.py
|
||||
|
||||
# Extensions
|
||||
markdown_extensions:
|
||||
|
|
Loading…
Reference in a new issue