-
Notifications
You must be signed in to change notification settings - Fork 23
/
viewport.go
102 lines (81 loc) · 2.49 KB
/
viewport.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package commands
import (
"github.com/charmbracelet/bubbles/key"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
)
func updateViewport(msg tea.Msg, m model) (tea.Model, tea.Cmd) {
var (
cmd tea.Cmd
cmds []tea.Cmd
)
switch msg := msg.(type) {
case tea.WindowSizeMsg:
m.help.Width = msg.Width
case tea.KeyMsg:
switch {
case key.Matches(msg, ViewportKeyMap.GotoStart):
m.viewport.GotoTop()
case key.Matches(msg, ViewportKeyMap.GotoEnd):
m.viewport.GotoBottom()
case key.Matches(msg, ViewportKeyMap.Escape):
m.selectedArticle = nil
case key.Matches(msg, ViewportKeyMap.OpenInBrowser):
current, err := m.commands.store.GetItemByID(*m.selectedArticle)
if err != nil {
return m, nil
}
it := ItemToTUIItem(current)
cmd = m.commands.OpenLink(it.URL)
cmds = append(cmds, cmd)
case key.Matches(msg, ViewportKeyMap.Prev):
current := m.list.Index()
if current-1 < 0 {
return m, nil
}
m.list.Select(current - 1)
items := m.list.Items()
item := items[current-1]
id := item.(TUIItem).ID
m.selectedArticle = &id
content, err := m.commands.GetGlamourisedArticle(*m.selectedArticle)
if err != nil {
return m, tea.Quit
}
m.viewport.SetContent(content)
case key.Matches(msg, ViewportKeyMap.Next):
current := m.list.Index()
items := m.list.Items()
if current+1 >= len(items) {
return m, nil
}
m.list.Select(current + 1)
item := items[current+1]
id := item.(TUIItem).ID
m.selectedArticle = &id
content, err := m.commands.GetGlamourisedArticle(*m.selectedArticle)
if err != nil {
return m, tea.Quit
}
m.viewport.SetContent(content)
case key.Matches(msg, ViewportKeyMap.Quit):
return m, tea.Quit
case key.Matches(msg, ViewportKeyMap.ShowFullHelp):
m.help.ShowAll = !m.help.ShowAll
if m.help.ShowAll {
m.viewport.Height = m.viewport.Height + lipgloss.Height(m.help.ShortHelpView(ViewportKeyMap.ShortHelp())) - lipgloss.Height(m.help.FullHelpView(ViewportKeyMap.FullHelp()))
} else {
m.viewport.Height = m.viewport.Height + lipgloss.Height(m.help.FullHelpView(ViewportKeyMap.FullHelp())) - lipgloss.Height(m.help.ShortHelpView(ViewportKeyMap.ShortHelp()))
}
}
}
m.viewport, cmd = m.viewport.Update(msg)
cmds = append(cmds, cmd)
return m, tea.Batch(cmds...)
}
func viewportView(m model) string {
return m.viewport.View() + "\n" + m.viewportHelp()
}
func (m model) viewportHelp() string {
return helpStyle.Render(m.help.View(ViewportKeyMap))
}