add search and back button to docs

This commit is contained in:
2026-01-23 18:06:07 +11:00
parent c9976b9c08
commit 7460d784b6
2 changed files with 58 additions and 2 deletions

View File

@@ -3,7 +3,10 @@ import os, sys
from rich.console import Console from rich.console import Console
from textual.app import App, ComposeResult from textual.app import App, ComposeResult
from textual.widgets import MarkdownViewer, Header, Footer from textual.widgets import MarkdownViewer, Header, Footer, Input, Button
from textual.containers import Horizontal
from textual_autocomplete import PathAutoComplete
from textual import on
console = Console() console = Console()
@@ -13,9 +16,45 @@ class DocsApp(App):
TITLE = "Digpkg Docs" TITLE = "Digpkg Docs"
SUB_TITLE = "made with ❤️ by SpookyDervish" SUB_TITLE = "made with ❤️ by SpookyDervish"
CSS = """
#search {
margin: 1;
width: 1fr;
}
#back {
margin-top: 1;
margin-left: 1;
}
#bottom {
height: 5;
}
"""
def __init__(self, inital_markdown_path: str): def __init__(self, inital_markdown_path: str):
super().__init__() super().__init__()
self.inital_markdown_path = inital_markdown_path self.inital_markdown_path = inital_markdown_path
self.docs_folder = os.path.join(os.path.dirname(self.inital_markdown_path), "docs")
async def on_input_submitted(self, event: Input.Submitted):
if event.input.id == "search":
if not os.path.isdir(self.docs_folder):
return
file_path = os.path.join(self.docs_folder, event.input.value)
if os.path.isfile(file_path):
event.input.clear()
event.input.focus()
await self.query_one(MarkdownViewer).go(file_path)
else:
self.notify("That file wasn't found.", title="Uh oh", severity="error")
async def on_button_pressed(self, event: Button.Pressed):
if event.button.id == "back":
await self.query_one(MarkdownViewer).back()
def compose(self) -> ComposeResult: def compose(self) -> ComposeResult:
with open(self.inital_markdown_path, "r") as f: with open(self.inital_markdown_path, "r") as f:
@@ -23,6 +62,22 @@ class DocsApp(App):
yield Header() yield Header()
yield MarkdownViewer(markdown) yield MarkdownViewer(markdown)
with Horizontal(id="bottom"):
yield Button(label="Back", id="back", flat=True, variant="error")
search_input = Input(id="search", placeholder="Search . . .")
yield search_input
if os.path.isdir(self.docs_folder):
yield PathAutoComplete(
search_input,
path=self.docs_folder
)
else:
search_input.disabled = True
search_input.tooltip = "This mineral doesn't have a docs folder and can't be searched."
yield Footer() yield Footer()

View File

@@ -6,7 +6,8 @@ setup(
packages=find_packages(), packages=find_packages(),
install_requires=[ install_requires=[
"textual>=7.3.0", "textual>=7.3.0",
"requests>=2.32.5" "requests>=2.32.5",
"textual-autocomplete>=4.0.6"
], ],
entry_points={ entry_points={
"console_scripts": [ "console_scripts": [