41 lines
1.4 KiB
Python
41 lines
1.4 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Optional
|
|
|
|
from textual import on
|
|
from textual.app import ComposeResult
|
|
from textual.containers import Container, Horizontal
|
|
from textual.screen import ModalScreen
|
|
from textual.widgets import Button, Static
|
|
|
|
|
|
class GithubRepositoryScreen(ModalScreen[Optional[str]]):
|
|
def __init__(self, repository_url: str) -> None:
|
|
super().__init__()
|
|
self.repository_url = repository_url
|
|
|
|
def compose(self) -> ComposeResult:
|
|
with Container(id="github-dialog"):
|
|
yield Static("Open Github repository", id="github-title")
|
|
yield Static("Choose what to do with the repository URL:", id="github-body")
|
|
yield Static(self.repository_url, id="github-url")
|
|
with Horizontal(id="github-buttons"):
|
|
yield Button("Open in browser", id="github-open", variant="primary")
|
|
yield Button("Copy to clipboard", id="github-copy")
|
|
yield Button("Cancel", id="github-cancel")
|
|
|
|
def on_mount(self) -> None:
|
|
self.query_one("#github-open", Button).focus()
|
|
|
|
@on(Button.Pressed, "#github-open")
|
|
def handle_open(self) -> None:
|
|
self.dismiss("open")
|
|
|
|
@on(Button.Pressed, "#github-copy")
|
|
def handle_copy(self) -> None:
|
|
self.dismiss("copy")
|
|
|
|
@on(Button.Pressed, "#github-cancel")
|
|
def handle_cancel(self) -> None:
|
|
self.dismiss(None)
|