Console startup box themed as well.
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
"""Startup configuration box formatting utilities."""
|
"""Startup configuration box formatting utilities."""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
from sys import stderr
|
from sys import stderr
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
@@ -11,12 +12,26 @@ if TYPE_CHECKING:
|
|||||||
|
|
||||||
BOX_WIDTH = 60 # Inner width (excluding box chars)
|
BOX_WIDTH = 60 # Inner width (excluding box chars)
|
||||||
|
|
||||||
|
# ANSI color codes
|
||||||
|
RESET = "\033[0m"
|
||||||
|
YELLOW = "\033[33m" # Dark yellow
|
||||||
|
BRIGHT_YELLOW = "\033[93m" # Bright yellow
|
||||||
|
BRIGHT_WHITE = "\033[1;37m" # Bold bright white
|
||||||
|
|
||||||
|
|
||||||
|
def _visible_len(text: str) -> int:
|
||||||
|
"""Calculate visible length of text, ignoring ANSI escape codes."""
|
||||||
|
return len(re.sub(r"\033\[[0-9;]*m", "", text))
|
||||||
|
|
||||||
|
|
||||||
def line(text: str = "") -> str:
|
def line(text: str = "") -> str:
|
||||||
"""Format a line inside the box with proper padding, truncating if needed."""
|
"""Format a line inside the box with proper padding, truncating if needed."""
|
||||||
if len(text) > BOX_WIDTH:
|
visible = _visible_len(text)
|
||||||
|
if visible > BOX_WIDTH:
|
||||||
text = text[: BOX_WIDTH - 1] + "…"
|
text = text[: BOX_WIDTH - 1] + "…"
|
||||||
return f"┃ {text:<{BOX_WIDTH}} ┃\n"
|
visible = BOX_WIDTH
|
||||||
|
padding = BOX_WIDTH - visible
|
||||||
|
return f"┃ {text}{' ' * padding} ┃\n"
|
||||||
|
|
||||||
|
|
||||||
def top() -> str:
|
def top() -> str:
|
||||||
@@ -29,12 +44,25 @@ def bottom() -> str:
|
|||||||
|
|
||||||
def print_startup_config(config: "PaskiaConfig") -> None:
|
def print_startup_config(config: "PaskiaConfig") -> None:
|
||||||
"""Print server configuration on startup."""
|
"""Print server configuration on startup."""
|
||||||
|
# Key graphic with yellow shading (bright for highlights, dark for body)
|
||||||
|
Y = YELLOW # Dark yellow for main body
|
||||||
|
B = BRIGHT_YELLOW # Bright yellow for highlights/edges
|
||||||
|
W = BRIGHT_WHITE # Bold white for URL
|
||||||
|
R = RESET
|
||||||
|
|
||||||
lines = [top()]
|
lines = [top()]
|
||||||
lines.append(line(" ▄▄▄▄▄"))
|
lines.append(line(f" {B}▄▄▄▄▄{R}"))
|
||||||
lines.append(line("█ █ Paskia " + __version__))
|
lines.append(line(f"{B}█{Y} {B}█{R} Paskia " + __version__))
|
||||||
lines.append(line("█ █▄▄▄▄▄▄▄▄▄▄▄▄"))
|
lines.append(line(f"{B}█{Y} {B}█{Y}▄▄▄▄▄▄▄▄▄▄▄▄{R}"))
|
||||||
lines.append(line("█ █▀▀▀▀█▀▀█▀▀█ " + config.site_url + config.site_path))
|
lines.append(
|
||||||
lines.append(line(" ▀▀▀▀▀"))
|
line(
|
||||||
|
f"{B}█{Y} {B}█{Y}▀▀▀▀{B}█{Y}▀▀{B}█{Y}▀▀{B}█{R} {W}"
|
||||||
|
+ config.site_url
|
||||||
|
+ config.site_path
|
||||||
|
+ R
|
||||||
|
)
|
||||||
|
)
|
||||||
|
lines.append(line(f" {Y}▀▀▀▀▀{R}"))
|
||||||
|
|
||||||
# Format auth host section
|
# Format auth host section
|
||||||
if config.auth_host:
|
if config.auth_host:
|
||||||
|
|||||||
Reference in New Issue
Block a user