mirror of
https://github.com/anotherhadi/spilltea.git
synced 2026-05-20 01:32:33 +02:00
85c2806604
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
76 lines
1.7 KiB
Go
76 lines
1.7 KiB
Go
package docs
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"strings"
|
|
"text/template"
|
|
|
|
tea "charm.land/bubbletea/v2"
|
|
"charm.land/glamour/v2"
|
|
"charm.land/lipgloss/v2"
|
|
"github.com/anotherhadi/spilltea/internal/config"
|
|
"github.com/anotherhadi/spilltea/internal/style"
|
|
"github.com/charmbracelet/x/ansi"
|
|
)
|
|
|
|
func windowStyle() lipgloss.Style {
|
|
return lipgloss.NewStyle().
|
|
Border(lipgloss.RoundedBorder()).
|
|
BorderForeground(style.S.Subtle).
|
|
Padding(0, 0)
|
|
}
|
|
|
|
func (e Model) View() tea.View {
|
|
statusBar := e.renderStatusBar()
|
|
if len(e.matches) > 0 {
|
|
var countText string
|
|
if e.searching {
|
|
countText = fmt.Sprintf("%d matches", len(e.matches))
|
|
} else {
|
|
countText = fmt.Sprintf("%d/%d", e.matchIndex+1, len(e.matches))
|
|
}
|
|
count := lipgloss.NewStyle().Padding(0, 1).
|
|
Foreground(style.S.MutedFg).
|
|
Render(countText)
|
|
statusBar = lipgloss.JoinHorizontal(lipgloss.Top, statusBar, count)
|
|
}
|
|
return tea.NewView(lipgloss.JoinVertical(lipgloss.Left,
|
|
windowStyle().Render(e.viewport.View()),
|
|
statusBar,
|
|
))
|
|
}
|
|
|
|
func (m *Model) renderMarkdown() {
|
|
cfg := config.Global
|
|
data := struct {
|
|
Cfg *config.Config
|
|
}{
|
|
Cfg: cfg,
|
|
}
|
|
|
|
tmpl, err := template.New("info").Parse(contentMarkdown)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
var processed bytes.Buffer
|
|
if err := tmpl.Execute(&processed, data); err != nil {
|
|
return
|
|
}
|
|
|
|
width := m.viewport.Width() - 2
|
|
renderer, _ := glamour.NewTermRenderer(
|
|
glamour.WithStyles(style.GlamourStyleConfig(cfg)),
|
|
glamour.WithWordWrap(width),
|
|
)
|
|
|
|
str, _ := renderer.Render(processed.String())
|
|
m.renderedLines = strings.Split(str, "\n")
|
|
m.strippedLines = make([]string, len(m.renderedLines))
|
|
for i, l := range m.renderedLines {
|
|
m.strippedLines[i] = ansi.Strip(l)
|
|
}
|
|
m.applySearch()
|
|
}
|