初始提交
This commit is contained in:
@@ -0,0 +1,177 @@
|
||||
from dataclasses import dataclass, field
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class TuiKeymapRegistry:
|
||||
"""
|
||||
TUI 键位注册表。
|
||||
|
||||
该对象集中维护页面切换快捷键和派生提示文案,避免模块级
|
||||
常量散落并在后续扩展时继续增长。
|
||||
|
||||
:param navigation_shortcuts: 页面导航快捷键映射
|
||||
"""
|
||||
|
||||
navigation_shortcuts: dict[str, str] = field(default_factory=dict)
|
||||
|
||||
@staticmethod
|
||||
def normalize_view_key(view_key: str) -> str:
|
||||
"""
|
||||
规范化页面标识。
|
||||
|
||||
:param view_key: 原始页面标识
|
||||
:return: 规范化后的页面标识
|
||||
"""
|
||||
return str(view_key).strip().lower()
|
||||
|
||||
def get_navigation_shortcut(self, view_key: str) -> str:
|
||||
"""
|
||||
获取指定页面的导航快捷键。
|
||||
|
||||
:param view_key: 页面标识
|
||||
:return: 快捷键文本
|
||||
"""
|
||||
normalized_view_key = self.normalize_view_key(view_key)
|
||||
return self.navigation_shortcuts.get(normalized_view_key, '')
|
||||
|
||||
@property
|
||||
def navigation_shortcut_hint(self) -> str:
|
||||
"""
|
||||
构建页面导航快捷键总提示。
|
||||
|
||||
:return: 快捷键提示
|
||||
"""
|
||||
ordered_keys = ['dashboard', 'app', 'ops', 'database', 'cache', 'jobs', 'gen', 'configs', 'crypto']
|
||||
shortcuts = [
|
||||
self.get_navigation_shortcut(view_key).upper()
|
||||
for view_key in ordered_keys
|
||||
if self.get_navigation_shortcut(view_key)
|
||||
]
|
||||
return f'[{" / ".join(shortcuts).replace(" / ", "/")}]'
|
||||
|
||||
@property
|
||||
def sidebar_shortcut_hint(self) -> str:
|
||||
"""
|
||||
获取侧栏快捷键提示。
|
||||
|
||||
:return: 提示文本
|
||||
"""
|
||||
return '[S] 侧栏'
|
||||
|
||||
@property
|
||||
def refresh_shortcut_hint(self) -> str:
|
||||
"""
|
||||
获取刷新快捷键提示。
|
||||
|
||||
:return: 提示文本
|
||||
"""
|
||||
return '[R] 刷新'
|
||||
|
||||
@property
|
||||
def quit_shortcut_hint(self) -> str:
|
||||
"""
|
||||
获取退出快捷键提示。
|
||||
|
||||
:return: 提示文本
|
||||
"""
|
||||
return '[Q] 退出'
|
||||
|
||||
@property
|
||||
def focus_shortcut_hint(self) -> str:
|
||||
"""
|
||||
获取焦点切换快捷键提示。
|
||||
|
||||
:return: 提示文本
|
||||
"""
|
||||
return '[←/→] 切换焦点'
|
||||
|
||||
@property
|
||||
def region_switch_shortcut_hint(self) -> str:
|
||||
"""
|
||||
获取区域切换快捷键提示。
|
||||
|
||||
:return: 提示文本
|
||||
"""
|
||||
return '[←/→] 切换区域'
|
||||
|
||||
@property
|
||||
def scroll_shortcut_hint(self) -> str:
|
||||
"""
|
||||
获取滚动快捷键提示。
|
||||
|
||||
:return: 提示文本
|
||||
"""
|
||||
return '[J/K] 滚动'
|
||||
|
||||
@property
|
||||
def page_scroll_shortcut_hint(self) -> str:
|
||||
"""
|
||||
获取翻页快捷键提示。
|
||||
|
||||
:return: 提示文本
|
||||
"""
|
||||
return '[PgUp/PgDn] 翻页'
|
||||
|
||||
@property
|
||||
def home_end_shortcut_hint(self) -> str:
|
||||
"""
|
||||
获取首尾跳转快捷键提示。
|
||||
|
||||
:return: 提示文本
|
||||
"""
|
||||
return '[Home/End] 首尾'
|
||||
|
||||
@property
|
||||
def browser_interaction_hint(self) -> str:
|
||||
"""
|
||||
构建浏览页交互提示。
|
||||
|
||||
:return: 提示文本
|
||||
"""
|
||||
return (
|
||||
f'浏览键:{self.focus_shortcut_hint} {self.scroll_shortcut_hint} '
|
||||
f'{self.page_scroll_shortcut_hint} {self.home_end_shortcut_hint}'
|
||||
)
|
||||
|
||||
@property
|
||||
def global_shortcut_hint(self) -> str:
|
||||
"""
|
||||
构建全局快捷键提示。
|
||||
|
||||
:return: 提示文本
|
||||
"""
|
||||
return (
|
||||
f'页面 {self.navigation_shortcut_hint} {self.sidebar_shortcut_hint} '
|
||||
f'{self.focus_shortcut_hint} {self.scroll_shortcut_hint} '
|
||||
f'{self.page_scroll_shortcut_hint} {self.home_end_shortcut_hint} '
|
||||
f'{self.refresh_shortcut_hint} {self.quit_shortcut_hint}'
|
||||
)
|
||||
|
||||
@property
|
||||
def hero_shortcut_hint(self) -> str:
|
||||
"""
|
||||
构建首页英雄区快捷键提示。
|
||||
|
||||
:return: 提示文本
|
||||
"""
|
||||
return (
|
||||
f'页面 {self.navigation_shortcut_hint} {self.sidebar_shortcut_hint} '
|
||||
f'{self.region_switch_shortcut_hint} {self.scroll_shortcut_hint} '
|
||||
f'{self.page_scroll_shortcut_hint} {self.home_end_shortcut_hint} '
|
||||
f'{self.refresh_shortcut_hint} {self.quit_shortcut_hint}'
|
||||
)
|
||||
|
||||
|
||||
TUI_KEYMAP_REGISTRY = TuiKeymapRegistry(
|
||||
navigation_shortcuts={
|
||||
'dashboard': 'd',
|
||||
'app': 'a',
|
||||
'ops': 'o',
|
||||
'database': 'b',
|
||||
'cache': 'c',
|
||||
'jobs': 't',
|
||||
'gen': 'g',
|
||||
'configs': 'p',
|
||||
'crypto': 'e',
|
||||
}
|
||||
)
|
||||
Reference in New Issue
Block a user