feat: using renderer
This commit is contained in:
54
main.go
54
main.go
@ -7,6 +7,7 @@ import (
|
||||
"net"
|
||||
"os"
|
||||
"os/signal"
|
||||
"path/filepath"
|
||||
"slices"
|
||||
"strings"
|
||||
"syscall"
|
||||
@ -26,8 +27,6 @@ import (
|
||||
"github.com/charmbracelet/x/term"
|
||||
)
|
||||
|
||||
var docStyle = lipgloss.NewStyle().Margin(1, 2)
|
||||
|
||||
type errMsg error
|
||||
|
||||
type item struct {
|
||||
@ -61,6 +60,9 @@ const (
|
||||
)
|
||||
|
||||
type model struct {
|
||||
renderer *lipgloss.Renderer
|
||||
termRenderer *glamour.TermRenderer
|
||||
|
||||
list list.Model
|
||||
allPosts []string
|
||||
|
||||
@ -76,14 +78,13 @@ type model struct {
|
||||
page Page
|
||||
|
||||
viewport viewport.Model
|
||||
termRenderer *glamour.TermRenderer
|
||||
|
||||
err error
|
||||
}
|
||||
|
||||
func getViewPort(width int, height int) viewport.Model {
|
||||
func getViewPort(renderer *lipgloss.Renderer, width int, height int) viewport.Model {
|
||||
vp := viewport.New(width, height)
|
||||
vp.Style = lipgloss.NewStyle().
|
||||
vp.Style = renderer.NewStyle().
|
||||
BorderStyle(lipgloss.RoundedBorder()).
|
||||
BorderForeground(lipgloss.Color("62")).
|
||||
PaddingRight(2)
|
||||
@ -91,8 +92,8 @@ func getViewPort(width int, height int) viewport.Model {
|
||||
return vp
|
||||
}
|
||||
|
||||
func initialModel(w int, h int) model {
|
||||
posts, err := getAllPosts("/home/johnc/Code/JohnTech/content/blog")
|
||||
func initialModel(renderer *lipgloss.Renderer, w int, h int) model {
|
||||
posts, err := getAllPosts(filepath.Join(os.Getenv("BLOG_PATH"), "content/blog"))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
@ -111,7 +112,7 @@ func initialModel(w int, h int) model {
|
||||
list.SetShowTitle(false)
|
||||
|
||||
// -1 to allow for the initial height of the nav model
|
||||
vp := getViewPort(w, h-3)
|
||||
vp := getViewPort(renderer, w, h-3)
|
||||
|
||||
// We need to adjust the width of the glamour render from our main width
|
||||
// to account for a few things:
|
||||
@ -124,7 +125,7 @@ func initialModel(w int, h int) model {
|
||||
const glamourGutter = 2
|
||||
glamourRenderWidth := w - vp.Style.GetHorizontalFrameSize() - glamourGutter
|
||||
|
||||
renderer, err := glamour.NewTermRenderer(
|
||||
termRenderer, err := glamour.NewTermRenderer(
|
||||
glamour.WithAutoStyle(),
|
||||
glamour.WithWordWrap(glamourRenderWidth),
|
||||
)
|
||||
@ -132,7 +133,7 @@ func initialModel(w int, h int) model {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
frontPageContent, err := os.ReadFile("/home/johnc/Code/JohnTech/content/_index.md")
|
||||
frontPageContent, err := os.ReadFile(filepath.Join(os.Getenv("BLOG_PATH"), "content/_index.md"))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
@ -142,7 +143,7 @@ func initialModel(w int, h int) model {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
frontPageModel, err := createMarkdownPostModel(processedFrontPage, renderer, vp)
|
||||
frontPageModel, err := createMarkdownPostModel(processedFrontPage, termRenderer, vp)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
@ -151,13 +152,13 @@ func initialModel(w int, h int) model {
|
||||
list: list,
|
||||
allPosts: posts,
|
||||
page: FRONT,
|
||||
termRenderer: renderer,
|
||||
termRenderer: termRenderer,
|
||||
viewport: vp,
|
||||
frontPageModel: frontPageModel,
|
||||
frontPageContent: processedFrontPage,
|
||||
width: w,
|
||||
height: h,
|
||||
navModel: createNavModel(w),
|
||||
navModel: createNavModel(renderer, w),
|
||||
}
|
||||
}
|
||||
|
||||
@ -212,11 +213,11 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
return m, nil
|
||||
}
|
||||
case tea.WindowSizeMsg:
|
||||
h, v := docStyle.GetFrameSize()
|
||||
m.list.SetSize(msg.Width-h, msg.Height-v)
|
||||
|
||||
m.height = msg.Height
|
||||
m.width = msg.Width
|
||||
// h, v := m.termRenderer.GetFrameSize()
|
||||
// m.list.SetSize(msg.Width-h, msg.Height-v)
|
||||
//
|
||||
// m.height = msg.Height
|
||||
// m.width = msg.Width
|
||||
}
|
||||
|
||||
list, cmd := m.list.Update(msg)
|
||||
@ -245,7 +246,7 @@ func (m model) View() string {
|
||||
case FRONT:
|
||||
return m.navModel.View() + "\n" + m.frontPageModel.View()
|
||||
case POST_LIST:
|
||||
return m.navModel.View() + docStyle.Render(m.list.View())
|
||||
return m.navModel.View() + m.renderer.NewStyle().Margin(1, 2).Render(m.list.View())
|
||||
case POST:
|
||||
return m.navModel.View() + "\n" + m.postModel.View()
|
||||
default:
|
||||
@ -261,7 +262,7 @@ const (
|
||||
func initServer() {
|
||||
s, err := wish.NewServer(
|
||||
wish.WithAddress(net.JoinHostPort(host, port)),
|
||||
wish.WithHostKeyPath(".ssh/id_rsa"),
|
||||
wish.WithHostKeyPath("./.ssh/id_rsa"),
|
||||
wish.WithMiddleware(
|
||||
bubbletea.Middleware(teaHandler),
|
||||
activeterm.Middleware(), // Bubble Tea apps usually require a PTY.
|
||||
@ -305,7 +306,7 @@ func main() {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
p := tea.NewProgram(initialModel(w, h))
|
||||
p := tea.NewProgram(initialModel(lipgloss.DefaultRenderer(), w, h))
|
||||
if _, err := p.Run(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
@ -329,15 +330,8 @@ func teaHandler(s ssh.Session) (tea.Model, []tea.ProgramOption) {
|
||||
// use it to create the styles.
|
||||
// The recommended way to use these styles is to then pass them down to
|
||||
// your Bubble Tea model.
|
||||
// renderer := bubbletea.MakeRenderer(s)
|
||||
// txtStyle := renderer.NewStyle().Foreground(lipgloss.Color("10"))
|
||||
// quitStyle := renderer.NewStyle().Foreground(lipgloss.Color("8"))
|
||||
//
|
||||
// bg := "light"
|
||||
// if renderer.HasDarkBackground() {
|
||||
// bg = "dark"
|
||||
// }
|
||||
renderer := bubbletea.MakeRenderer(s)
|
||||
|
||||
m := initialModel(pty.Window.Width, pty.Window.Height)
|
||||
m := initialModel(renderer, pty.Window.Width, pty.Window.Height)
|
||||
return m, []tea.ProgramOption{tea.WithAltScreen()}
|
||||
}
|
||||
|
12
nav.go
12
nav.go
@ -6,6 +6,7 @@ import (
|
||||
)
|
||||
|
||||
type navModel struct {
|
||||
renderer *lipgloss.Renderer
|
||||
style lipgloss.Style
|
||||
}
|
||||
|
||||
@ -18,13 +19,13 @@ func (m navModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
}
|
||||
|
||||
func (m navModel) View() string {
|
||||
nameStyle := lipgloss.NewStyle().Bold(true)
|
||||
nameStyle := m.renderer.NewStyle().Bold(true)
|
||||
|
||||
blogStyle := lipgloss.NewStyle().
|
||||
blogStyle := m.renderer.NewStyle().
|
||||
Bold(true).
|
||||
Underline(true)
|
||||
|
||||
shortcutStyle := lipgloss.NewStyle().
|
||||
shortcutStyle := m.renderer.NewStyle().
|
||||
Faint(true)
|
||||
|
||||
name := nameStyle.Render("John Costa")
|
||||
@ -47,14 +48,15 @@ func (m navModel) View() string {
|
||||
return m.style.Render(rightSide)
|
||||
}
|
||||
|
||||
func createNavModel(width int) navModel {
|
||||
style := lipgloss.NewStyle().
|
||||
func createNavModel(renderer *lipgloss.Renderer, width int) navModel {
|
||||
style := renderer.NewStyle().
|
||||
BorderStyle(lipgloss.RoundedBorder()).
|
||||
BorderForeground(lipgloss.Color("62"))
|
||||
|
||||
style = style.Width(width - style.GetHorizontalFrameSize())
|
||||
|
||||
return navModel{
|
||||
renderer: renderer,
|
||||
style: style,
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user