ref: c70619eff54eb25a853b850ac7ccb2f447658519
parent: 35f58b7553f6ebeeaabcdba5b6950f312463e3b8
author: Philip Silva <philip.silva@protonmail.com>
date: Sun Sep 12 02:09:19 EDT 2021
Move LocationField into main.go
--- a/browser/browser.go
+++ b/browser/browser.go
@@ -1391,10 +1391,10 @@
dui *duit.DUI
Website *Website
StatusBar *duit.Label
- LocationField *duit.Field
loading bool
client *http.Client
Download func(res chan *string)
+ LocCh chan string
}
func NewBrowser(_dui *duit.DUI, initUrl string) (b *Browser) {@@ -1412,29 +1412,9 @@
Text: "",
},
Website: &Website{},+ LocCh: make(chan string, 10),
}
- b.LocationField = &duit.Field{- Text: initUrl,
- Font: Style.Font(),
- Keys: func(k rune, m draw.Mouse) (e duit.Event) {- if k == EnterKey && !b.loading {- b.loading = true
- a := b.LocationField.Text
- if !strings.HasPrefix(strings.ToLower(a), "http") {- a = "http://" + a
- }
- u, err := url.Parse(a)
- if err != nil {- log.Errorf("parse url: %v", err)- return
- }
- return b.LoadUrl(u)
- }
- return
- },
- }
-
u, err := url.Parse(initUrl)
if err != nil { log.Fatalf("parse: %v", err)@@ -1498,9 +1478,8 @@
func (b *Browser) Back() (e duit.Event) { if !b.loading {- b.loading = true
b.History.Back()
- b.LocationField.Text = b.History.URL().String()
+ b.LocCh <- b.History.URL().String()
b.LoadUrl(b.History.URL())
}
e.Consumed = true
@@ -1517,8 +1496,7 @@
b.showBodyMessage("") if !b.loading {- b.loading = true
- b.LocationField.Text = u.String()
+ b.LocCh <- u.String()
b.LoadUrl(u)
}
@@ -1528,6 +1506,10 @@
}
}
+func (b *Browser) Loading() bool {+ return b.loading
+}
+
func (b *Browser) showBodyMessage(msg string) { b.Website.UI = &duit.Label{Text: msg,
@@ -1540,6 +1522,7 @@
// LoadUrl after from location field,
func (b *Browser) LoadUrl(url *url.URL) (e duit.Event) {+ b.loading = true
go b.loadUrl(url)
e.Consumed = true
@@ -1672,7 +1655,7 @@
}
b.History.Push(resp.Request.URL, of)
log.Printf("b.History is now %s", b.History.String())- b.LocationField.Text = b.URL().String()
+ b.LocCh <- b.URL().String()
}
return
}
--- a/cmd/opossum/main.go
+++ b/cmd/opossum/main.go
@@ -10,8 +10,10 @@
"github.com/psilva261/opossum/js"
"github.com/psilva261/opossum/logger"
"github.com/psilva261/opossum/style"
+ "net/url"
"os/signal"
"runtime/pprof"
+ "strings"
"time"
"github.com/mjl-/duit"
)
@@ -21,9 +23,10 @@
dui *duit.DUI
b *browser.Browser
cpuprofile string
- startPage string = "http://9p.io"
+ loc string = "http://9p.io"
dbg bool
v View
+ Style = style.Map{})
func init() {@@ -34,10 +37,37 @@
Render() []*duit.Kid
}
-type Nav struct {}+type Nav struct {+ LocationField *duit.Field
+}
+func NewNav() (n *Nav) {+ n = &Nav{+ LocationField: &duit.Field{+ Text: loc,
+ Font: Style.Font(),
+ Keys: func(k rune, m draw.Mouse) (e duit.Event) {+ if k == browser.EnterKey && !b.Loading() {+ a := n.LocationField.Text
+ if !strings.HasPrefix(strings.ToLower(a), "http") {+ a = "http://" + a
+ }
+ u, err := url.Parse(a)
+ if err != nil {+ log.Errorf("parse url: %v", err)+ return
+ }
+ return b.LoadUrl(u)
+ }
+ return
+ },
+ },
+ }
+ return
+}
+
func (n *Nav) Render() []*duit.Kid {- return duit.NewKids(
+ uis := []duit.UI{ &duit.Grid{Columns: 2,
Padding: duit.NSpace(2, duit.SpaceXY(5, 3)),
@@ -51,14 +81,16 @@
},
&duit.Box{Kids: duit.NewKids(
- b.LocationField,
+ n.LocationField,
),
},
),
},
- b.StatusBar,
- b.Website,
- )
+ }
+ if b != nil {+ uis = append(uis, b.StatusBar, b.Website)
+ }
+ return duit.NewKids(uis...)
}
type Confirm struct {@@ -88,7 +120,7 @@
c.res <- &s
c.done = true
e.Consumed = true
- v = &Nav{}+ v = NewNav()
render()
return
},
@@ -101,7 +133,7 @@
close(c.res)
c.done = true
e.Consumed = true
- v = &Nav{}+ v = NewNav()
render()
return
},
@@ -130,7 +162,9 @@
Kids: v.Render(),
Background: white,
}
- browser.PrintTree(b.Website.UI)
+ if b != nil {+ browser.PrintTree(b.Website.UI)
+ }
log.Printf("Render.....")dui.MarkLayout(dui.Top.UI)
dui.MarkDraw(dui.Top.UI)
@@ -146,8 +180,13 @@
dui.Debug = dbg
style.Init(dui)
+ v = NewNav()
+ render()
- b = browser.NewBrowser(dui, startPage)
+ b = &browser.Browser{+ LocCh: make(chan string, 10),
+ }
+ b = browser.NewBrowser(dui, loc)
b.Download = func(res chan *string) { v = &Confirm{ text: fmt.Sprintf("Download %v", b.URL()),@@ -157,15 +196,23 @@
render()
return
}
- v = &Nav{}+ v = NewNav()
render()
for { select {case e := <-dui.Inputs:
+ //log.Infof("e=%v", e)dui.Input(e)
+ case loc = <-b.LocCh:
+ log.Infof("loc=%v", loc)+ if nav, ok := v.(*Nav); ok {+ nav.LocationField.Text = loc
+ }
+
case err, ok := <-dui.Error:
+ //log.Infof("err=%v", err) if !ok {return nil
}
@@ -203,7 +250,7 @@
if len(args) > 1 {usage()
}
- startPage, args = args[0], args[1:]
+ loc, args = args[0], args[1:]
}
}
--
⑨