add search and back button to docs
This commit is contained in:
57
dig/docs.py
57
dig/docs.py
@@ -3,7 +3,10 @@ import os, sys
|
||||
from rich.console import Console
|
||||
|
||||
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()
|
||||
@@ -13,9 +16,45 @@ class DocsApp(App):
|
||||
TITLE = "Digpkg Docs"
|
||||
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):
|
||||
|
||||
super().__init__()
|
||||
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:
|
||||
with open(self.inital_markdown_path, "r") as f:
|
||||
@@ -23,6 +62,22 @@ class DocsApp(App):
|
||||
|
||||
yield Header()
|
||||
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()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user