92 lines
3.3 KiB
Bash
92 lines
3.3 KiB
Bash
#!/usr/bin/env bash
|
|
# Shared presentation helpers. No Proxmox operations belong in this file.
|
|
|
|
TAPM_UI_INIT() {
|
|
TAPM_UI_RESET='' TAPM_UI_BOLD='' TAPM_UI_MUTED='' TAPM_UI_ACCENT=''
|
|
TAPM_UI_SUCCESS='' TAPM_UI_WARNING='' TAPM_UI_ERROR='' TAPM_UI_SELECTED=''
|
|
if [[ -t 1 && "${TERM:-dumb}" != dumb && -z "${NO_COLOR+x}" ]]; then
|
|
TAPM_UI_RESET=$'\e[0m' TAPM_UI_BOLD=$'\e[1m' TAPM_UI_MUTED=$'\e[90m'
|
|
TAPM_UI_ACCENT=$'\e[96m' TAPM_UI_SUCCESS=$'\e[32m'
|
|
TAPM_UI_WARNING=$'\e[33m' TAPM_UI_ERROR=$'\e[31m'
|
|
TAPM_UI_SELECTED=$'\e[1;36m'
|
|
fi
|
|
TAPM_UI_WIDTH="${COLUMNS:-80}"
|
|
if [[ -t 1 && "${TERM:-dumb}" != dumb ]]; then
|
|
TAPM_UI_WIDTH="$(tput cols 2>/dev/null)" || TAPM_UI_WIDTH="${COLUMNS:-80}"
|
|
fi
|
|
[[ "$TAPM_UI_WIDTH" =~ ^[0-9]+$ ]] || TAPM_UI_WIDTH=80
|
|
(( TAPM_UI_WIDTH > 100 )) && TAPM_UI_WIDTH=100
|
|
(( TAPM_UI_WIDTH < 20 )) && TAPM_UI_WIDTH=20
|
|
return 0
|
|
}
|
|
|
|
TAPM_UI_PLAIN() {
|
|
# Existing menus embed ANSI colors in a few labels; styling is centralized here.
|
|
printf '%s' "$1" | sed -E $'s/\033\\[[0-9;]*[[:alpha:]]//g'
|
|
}
|
|
|
|
TAPM_UI_TEXT() {
|
|
local style="$1" text="$2" line
|
|
while IFS= read -r line; do
|
|
printf ' %s%s%s\n' "$style" "$line" "$TAPM_UI_RESET"
|
|
done < <(printf '%s\n' "$text" | fold -s -w "$((TAPM_UI_WIDTH - 2))")
|
|
}
|
|
|
|
TAPM_UI_RULE() {
|
|
local rule
|
|
printf -v rule '%*s' "$((TAPM_UI_WIDTH - 2))" ''
|
|
TAPM_UI_TEXT "$TAPM_UI_MUTED" "${rule// /-}"
|
|
}
|
|
|
|
TAPM_UI_TASK() {
|
|
TAPM_UI_TEXT "$TAPM_UI_ACCENT" "Starting: $(TAPM_UI_PLAIN "$1")"
|
|
TAPM_UI_RULE
|
|
printf '\n'
|
|
}
|
|
|
|
TAPM_UI_MENU_META() {
|
|
local title="$1" value="$2"
|
|
TAPM_UI_KIND=task
|
|
TAPM_UI_HINT=''
|
|
case "$title:$value" in
|
|
'Main Menu:'*|'Host Setup:post_install'|'Host Setup:virtio'|\
|
|
'Cluster & Maintenance:services'|'TA-ProxMenu Management:branches'|\
|
|
'TAPM Host Configuration:customize'|'TAPM Host Configuration:vzdump'|\
|
|
'TAPM Host Configuration:restore'|'Configure vzdump Performance:restore')
|
|
TAPM_UI_KIND=submenu ;;
|
|
'Select ISO Storage:'*|'Restore TAPM Host Configuration Backup:'*|\
|
|
'Git Branch Management:'*|'Configure vzdump Performance:'*)
|
|
TAPM_UI_KIND=choice ;;
|
|
'Customize TAPM Host Profile:'*)
|
|
[[ "$value" == apply ]] || TAPM_UI_KIND=choice ;;
|
|
'TA-ProxMenu Management:install_update')
|
|
# The update banner is printed after the user confirms installation.
|
|
TAPM_UI_KIND=choice ;;
|
|
esac
|
|
case "$value" in back|quit) TAPM_UI_KIND=navigation ;; esac
|
|
case "$title:$value" in
|
|
'Cluster & Maintenance:maintenance')
|
|
TAPM_UI_HINT='Applies to this host; entering maintenance evacuates guests.' ;;
|
|
'Cluster & Maintenance:keepalived')
|
|
TAPM_UI_HINT='Deploy or reconfigure Keepalived across cluster hosts.' ;;
|
|
'Cluster & Maintenance:iso_nfs')
|
|
TAPM_UI_HINT='Create an LXC NFS server and register shared ISO storage.' ;;
|
|
'Cluster & Maintenance:orphan_disks')
|
|
TAPM_UI_HINT='Read-only cluster scan with optional CSV export.' ;;
|
|
'Host Setup:cpu')
|
|
TAPM_UI_HINT='Analyze migration compatibility; review before applying a CPU model.' ;;
|
|
'TA-ProxMenu Management:install_update')
|
|
TAPM_UI_HINT="Update status: ${UPDATE_STATUS:-unknown}" ;;
|
|
esac
|
|
}
|
|
|
|
TAPM_UI_MENU_ROW() {
|
|
local number="$1" label="$2" active="$3" marker=' ' style='' suffix=''
|
|
label="$(TAPM_UI_PLAIN "$label")"
|
|
[[ "$TAPM_UI_KIND" == submenu ]] && suffix=' >'
|
|
if (( active )); then
|
|
marker='>' style="$TAPM_UI_SELECTED"
|
|
fi
|
|
TAPM_UI_TEXT "$style" "$marker $number $label$suffix"
|
|
}
|