77 lines
1.5 KiB
Go
77 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/charmbracelet/bubbles/viewport"
|
|
tea "github.com/charmbracelet/bubbletea"
|
|
"github.com/charmbracelet/glamour"
|
|
)
|
|
|
|
type childMessage struct{}
|
|
|
|
type postModel struct {
|
|
viewport viewport.Model
|
|
}
|
|
|
|
func (m postModel) Init() tea.Cmd {
|
|
return nil
|
|
}
|
|
|
|
func (m postModel) View() string {
|
|
return m.viewport.View()
|
|
}
|
|
|
|
func (m postModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|
switch msg := msg.(type) {
|
|
case tea.KeyMsg:
|
|
switch msg.String() {
|
|
case tea.KeyEsc.String():
|
|
return m, func() tea.Msg {
|
|
return childMessage{}
|
|
}
|
|
default:
|
|
var cmd tea.Cmd
|
|
m.viewport, cmd = m.viewport.Update(msg)
|
|
return m, cmd
|
|
}
|
|
case tea.WindowSizeMsg:
|
|
//TODO: something. What should happen on height change.
|
|
}
|
|
|
|
return m, nil
|
|
}
|
|
|
|
func processMarkdown(markdown string) (string, error) {
|
|
postContent, err := getPostWithoutMetaData(markdown)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
postInfo, err := getPostInfo(markdown)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
// This is stupid
|
|
lines := strings.Split(postContent, "\n")
|
|
lines = append([]string{"# " + postInfo.Title[1:len(postInfo.Title)-1]}, lines...)
|
|
|
|
return strings.Join(lines, "\n"), nil
|
|
}
|
|
|
|
func createMarkdownPostModel(markdown string, termRender *glamour.TermRenderer, viewPort viewport.Model) (postModel, error) {
|
|
m := postModel{
|
|
viewport: viewPort,
|
|
}
|
|
|
|
out, err := termRender.Render(markdown)
|
|
if err != nil {
|
|
return postModel{}, err
|
|
}
|
|
|
|
m.viewport.SetContent(out)
|
|
|
|
return m, nil
|
|
}
|