|
@@ -96,35 +96,67 @@ func (s *State) Update(input byte) {
|
|
|
if s.h.Current().feed.Contains(s.h.Current().index - 1) {
|
|
|
s.h.Current().index -= 1
|
|
|
}
|
|
|
- s.output(s.view())
|
|
|
s.loadSurroundings()
|
|
|
case 'j':
|
|
|
if s.h.Current().feed.Contains(s.h.Current().index + 1) {
|
|
|
s.h.Current().index += 1
|
|
|
}
|
|
|
- s.output(s.view())
|
|
|
s.loadSurroundings()
|
|
|
case 'g':
|
|
|
if s.h.Current().feed.Contains(0) {
|
|
|
s.h.Current().index = 0
|
|
|
}
|
|
|
- s.output(s.view())
|
|
|
case 'h':
|
|
|
s.h.Back()
|
|
|
- s.output(s.view())
|
|
|
- case 'l':
|
|
|
+ case 'l':
|
|
|
s.h.Forward()
|
|
|
- s.output(s.view())
|
|
|
case ' ':
|
|
|
s.switchTo(s.h.Current().feed.Get(s.h.Current().index))
|
|
|
- s.output(s.view())
|
|
|
+ case 'c':
|
|
|
+ unwrapped := s.h.Current().feed.Get(s.h.Current().index)
|
|
|
+ if activity, ok := unwrapped.(*pub.Activity); ok {
|
|
|
+ unwrapped = activity.Target()
|
|
|
+ }
|
|
|
+ if post, ok := unwrapped.(*pub.Post); ok {
|
|
|
+ creators := post.Creators()
|
|
|
+ s.switchTo(creators)
|
|
|
+ }
|
|
|
+ case 'r':
|
|
|
+ unwrapped := s.h.Current().feed.Get(s.h.Current().index)
|
|
|
+ if activity, ok := unwrapped.(*pub.Activity); ok {
|
|
|
+ unwrapped = activity.Target()
|
|
|
+ }
|
|
|
+ if post, ok := unwrapped.(*pub.Post); ok {
|
|
|
+ recipients := post.Recipients()
|
|
|
+ s.switchTo(recipients)
|
|
|
+ }
|
|
|
+ case 'a':
|
|
|
+ if activity, ok := s.h.Current().feed.Get(s.h.Current().index).(*pub.Activity); ok {
|
|
|
+ actor := activity.Actor()
|
|
|
+ s.switchTo(actor)
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
+ s.output(s.view())
|
|
|
}
|
|
|
|
|
|
-func (s *State) switchTo(item pub.Any) {
|
|
|
+func (s *State) switchTo(item any) {
|
|
|
switch narrowed := item.(type) {
|
|
|
+ case []pub.Tangible:
|
|
|
+ if len(narrowed) == 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(narrowed) == 1 {
|
|
|
+ s.h.Add(&Page{
|
|
|
+ feed: feed.Create(narrowed[0]),
|
|
|
+ children: narrowed[0].Children(),
|
|
|
+ frontier: narrowed[0],
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ s.h.Add(&Page{
|
|
|
+ feed: feed.CreateAndAppend(narrowed),
|
|
|
+ index: 1,
|
|
|
+ })
|
|
|
+ }
|
|
|
case pub.Tangible:
|
|
|
s.h.Add(&Page{
|
|
|
feed: feed.Create(narrowed),
|