burterm/internal/tui/dashboardview.go
2026-09-14 10:55:07 +03:00

55 lines
2.1 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package tui
import (
"github.com/charmbracelet/bubbles/viewport"
tea "github.com/charmbracelet/bubbletea"
)
// dashboardModel — вкладка Dashboard. Сама по себе не знает ни про
// атаки, ни про прокси, ни про краулинг — это намеренно: сбор метрики
// требует доступа к m.attacks/m.proxyView/m.spiderView корневой Model,
// поэтому рендер содержимого живёт в Model.renderDashboard (model.go),
// а dashboardModel — просто прокручиваемая витрина для готовой строки.
type dashboardModel struct {
viewport viewport.Model
}
func newDashboardView() dashboardModel {
return dashboardModel{viewport: viewport.New(0, 0)}
}
func (m *dashboardModel) SetSize(width, height int) {
if width < 0 {
width = 0
}
if height < 0 {
height = 0
}
m.viewport.Width = width
// 3 строки футера, которые View() добавляет сам: пустая строка +
// две строки подсказки (теперь гарантированно на двух строках, не
// на одной — см. комментарий у View()). Раньше здесь не вычиталось
// вообще ничего (тот же класс бага, что был у Proxy) — "работало"
// только по случайному совпадению с тем, что снаружи model.go
// передавал заведомо урезанную высоту.
vh := height - 3
if vh < 3 {
vh = 3
}
m.viewport.Height = vh
}
// SetContent обновляет отображаемый текст — вызывается из Model по тикеру.
func (m *dashboardModel) SetContent(s string) {
m.viewport.SetContent(s)
}
func (m dashboardModel) Update(msg tea.Msg) (dashboardModel, tea.Cmd) {
var cmd tea.Cmd
m.viewport, cmd = m.viewport.Update(msg)
return m, cmd
}
func (m dashboardModel) View() string {
return m.viewport.View() + "\n\n↑/↓ — прокрутка · обновляется раз в секунду\nf1-f12, pgup — вкладки\n"
}