ref: a5214c3c2a9396417edd4658e1344126da856ba9
parent: 0f6260b296b7a1542e278cab6ed41314df8eebbe
author: Philip Silva <philip.silva@protonmail.com>
date: Sun Jan 10 13:57:25 EST 2021
Fix submit closure
--- a/browser/browser.go
+++ b/browser/browser.go
@@ -319,6 +319,9 @@
t = "Submit"
}
+ // TODO: would be better to deal with *nodes.Node but keeping the correct
+ // references in the closure is tricky. Probably better to write a separate
+ // type Button to avoid this problem completely.
click := func() (r duit.Event) {
f := n.Ancestor("form")
@@ -326,7 +329,7 @@
return
}
- b.submit(f, n)
+ b.submit(f.DomSubtree, n.DomSubtree)
return duit.Event{
Consumed: true,
@@ -359,7 +362,7 @@
},
Keys: func(k rune, m draw.Mouse) (e duit.Event) {
if k == 10 {
- browser.submit(n.Ancestor("form"), nil)
+ browser.submit(n.Ancestor("form").DomSubtree, nil)
return duit.Event{
Consumed: true,
NeedLayout: true,
@@ -387,7 +390,6 @@
}
}
}
-
x := m.Point.X
y := m.Point.Y
maxX := self.R.Dx()
@@ -396,7 +398,6 @@
dui.Display.SetCursor(&draw.Cursor{
Set: cursor,
})
-
if m.Buttons == 0 {
r.Consumed = true
return r
@@ -535,7 +536,6 @@
} else if len(rows[0]) == 1 {
return rows[0][0]
}
-
return NewElement(horizontalSeq(true, rows[0]), n)
} else {
seqs := make([]*Element, 0, len(rows))
@@ -543,7 +543,6 @@
seq := horizontalSeq(true, row)
seqs = append(seqs, NewElement(seq, n))
}
-
return NewElement(verticalSeq(seqs), n)
}
}
@@ -748,7 +747,6 @@
seqs = append(seqs, NewElement(seq, row.n))
}
}
-
return NewElement(verticalSeq(seqs), n)
}
}
--- a/browser/website.go
+++ b/browser/website.go
@@ -169,17 +169,17 @@
log.Flush()
}
-func formData(n, submitBtn *nodes.Node) (data url.Values) {
+func formData(n, submitBtn *html.Node) (data url.Values) {
data = make(url.Values)
- if n.Data() == "input" {
- if n.Attr("type") == "submit" && (submitBtn == nil || n.DomSubtree != submitBtn.DomSubtree) {
+ if n.Data == "input" {
+ if attr(*n, "type") == "submit" && n != submitBtn {
return
}
- if k := n.Attr("name"); k != "" {
- data.Set(k, n.Attr("value"))
+ if k := attr(*n, "name"); k != "" {
+ data.Set(k, attr(*n, "value"))
}
}
- for _, c := range n.Children {
+ for c := n.FirstChild; c != nil; c = c.NextSibling {
for k, vs := range formData(c, submitBtn) {
data.Set(k, vs[0]) // TODO: what aboot the rest?
}
@@ -187,18 +187,17 @@
return
}
-func (b *Browser) submit(form, submitBtn *nodes.Node) {
+func (b *Browser) submit(form *html.Node, submitBtn *html.Node) {
var err error
var buf []byte
var contentType opossum.ContentType
method := "GET" // TODO
- if m := form.Attr("method"); m != "" {
+ if m := attr(*form, "method"); m != "" {
method = strings.ToUpper(m)
}
-
uri := b.URL()
- if action := form.Attr("action"); action != "" {
+ if action := attr(*form, "action"); action != "" {
uri, err = b.LinkedUrl(action)
if err != nil {
log.Printf("error parsing %v", action)
@@ -205,7 +204,6 @@
return
}
}
-
if method == "GET" {
q := uri.Query()