An MkDocs plugin that simplifies configuring page titles and their order through .pages configuration files
56
Evaluation — 56%
↓ 0.94xAgent success when using this tile
Advanced navigation transformation system that processes MkDocs navigation structures according to .pages configurations. This system handles ordering, filtering, structural modifications, and the integration of custom navigation with automatic file discovery.
The main class responsible for transforming MkDocs navigation based on configuration metadata and plugin options.
class AwesomeNavigation:
"""
Processes and transforms MkDocs navigation based on .pages configurations.
Args:
items (List[NavigationItem]): Initial navigation items from MkDocs
options (Options): Plugin configuration options
files (Files): MkDocs Files collection
explicit_sections (Set[Section]): Sections explicitly defined in mkdocs.yml
"""
def __init__(
self, items: List[NavigationItem], options: Options,
files: Files, explicit_sections: Set[Section]
): ...
def to_mkdocs(self) -> MkDocsNavigation:
"""
Convert processed navigation back to MkDocs Navigation format.
Returns:
MkDocsNavigation: Final navigation with previous/next links and parent links
"""
# Type alias for navigation items
NavigationItem = Union[Page, Section, Link]Manages metadata collection and organization for navigation processing, coordinating between different directory levels and their configurations.
class NavigationMeta:
"""
Manages metadata for navigation sections and items.
Args:
items (List[NavigationItem]): Navigation items to process
options (Options): Plugin configuration options
files (Files): MkDocs Files collection
explicit_sections (Set[Section]): Explicitly defined sections
"""
def __init__(
self, items: List[NavigationItem], options: Options,
files: Files, explicit_sections: Set[Section]
): ...Special section class for dynamically created navigation sections that don't correspond to actual directories.
class VirtualSection(Section):
"""
Represents dynamically created navigation sections.
Extends mkdocs.structure.nav.Section to support sections created
through .pages nav configuration that don't map to actual directories.
"""
passNavigation processing utilities for extracting and organizing navigation items by type.
def get_by_type(nav: List[NavigationItem], T: type) -> List[NavigationItem]:
"""
Extract items of specific type from navigation tree.
Recursively searches through navigation items and their children
to find all items matching the specified type.
Args:
nav (List[NavigationItem]): Navigation items to search
T (type): Type class to match (Page, Section, Link, etc.)
Returns:
List[NavigationItem]: All matching items found in the tree
"""Basic navigation processing flow:
from mkdocs_awesome_pages_plugin.navigation import AwesomeNavigation
from mkdocs_awesome_pages_plugin.options import Options
# Initialize with MkDocs navigation and plugin options
options = Options(
filename='.pages',
collapse_single_pages=False,
strict=True
)
# Process navigation with configurations
awesome_nav = AwesomeNavigation(
items=mkdocs_nav.items,
options=options,
files=files,
explicit_sections=set()
)
# Convert back to MkDocs format
final_nav = awesome_nav.to_mkdocs()Navigation item processing:
# Extract all pages from navigation
pages = get_by_type(navigation.items, Page)
# Extract all sections
sections = get_by_type(navigation.items, Section)
# Extract all links
links = get_by_type(navigation.items, Link)Virtual section creation:
# Created automatically from .pages nav configuration:
# nav:
# - Section Name:
# - file1.md
# - file2.md
# Results in VirtualSection with title "Section Name"
# containing the specified filesThe navigation processing follows a structured pipeline:
.pages configurations from all directoriesnav configurations to reorder itemsThe system intelligently resolves page titles using this priority order:
.pages nav configurationcollapse_single_pages setting.pages override with collapse_single_pagescollapse setting in .pagesInstall with Tessl CLI
npx tessl i tessl/pypi-mkdocs-awesome-pages-pluginevals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
scenario-6
scenario-7
scenario-8
scenario-9
scenario-10