ref: bbbf75c1e8e624ddc05ec6901ebfff4d3750e215
parent: 14f3fdd014c2a01a1d3d19d34d28fa22256260c3
author: Philip Silva <philip.silva@protonmail.com>
date: Fri Dec 25 11:27:25 EST 2020
Updated click handler
--- a/browser/experimental.go
+++ b/browser/experimental.go
@@ -1,11 +1,8 @@
package browser
import (
- //"bytes"
"fmt"
"image"
- //"io/ioutil"
- //"net/http"
"strings"
"opossum/domino"
"opossum/nodes"
@@ -13,7 +10,6 @@
"9fans.net/go/draw"
"github.com/mjl-/duit"
- //"opossum/nodes"
)
func (el *Element) slicedDraw(dui *duit.DUI, self *duit.Kid, img *draw.Image, orig image.Point, m draw.Mouse, force bool) bool {
@@ -141,7 +137,6 @@
})
}
-
func processJS(htm string) (resHtm string, err error) {
_ = strings.Replace(htm, "window.", "", -1)
d := domino.NewDomino(htm)
@@ -156,10 +151,7 @@
return
}
-func processJS2(htm string, doc *nodes.Node, scripts []string) (resHtm string, err error) {
- //_ = strings.Replace(htm, "window.", "", -1)
- d := domino.NewDomino(htm)
- d.Start()
+func processJS2(d *domino.Domino, doc *nodes.Node, scripts []string) (resHtm string, err error) {
code := ""
for _, script := range scripts {
code += `
@@ -178,7 +170,6 @@
}
`
}
- log.Printf("code=%v\n", code)
if err = d.Exec/*6*/(code); err != nil {
return "", fmt.Errorf("exec <script>s: %w", err)
}
@@ -187,8 +178,6 @@
if err != nil {
return "", fmt.Errorf("track changes: %w", err)
}
- log.Printf("processJS: changes = %v", changed)
- log.Printf("exp. resHtm=%v\n", resHtm)
- d.Stop()
+ log.Printf("processJS: changed = %v", changed)
return
}
--- a/browser/website.go
+++ b/browser/website.go
@@ -15,6 +15,7 @@
type Website struct {
duit.UI
html string
+ d *domino.Domino
}
func (w *Website) layout(f opossum.Fetcher) {
@@ -108,7 +109,13 @@
}
codes := domino.Scripts(nt, downloads)
log.Infof("JS pipeline start")
- jsProcessed, err := processJS2(w.html, nt, codes)
+ if w.d != nil {
+ log.Infof("Stop existing JS instance")
+ w.d.Stop()
+ }
+ w.d = domino.NewDomino(w.html)
+ w.d.Start()
+ jsProcessed, err := processJS2(w.d, nt, codes)
if err == nil {
if w.html != jsProcessed {
log.Infof("html changed")
--- a/domino/domino.go
+++ b/domino/domino.go
@@ -188,15 +188,16 @@
func (d *Domino) TriggerClick(selector string) (newHTML string, ok bool, err error) {
res, err := d.vm.RunString(`
var sel = '` + selector + `';
- console.log('sel=' + sel);
var sell = document.querySelector(sel);
- console.log('sell=' + sell);
- var selfn = sell.click.bind(sell);
- console.log('selfn=' + selfn);
- if (selfn) {
- selfn();
+ if (sell._listeners && sell._listeners.click) {
+ var selfn = sell.click.bind(sell);
+ if (selfn) {
+ selfn();
+ }
+ !!selfn;
+ } else {
+ false;
}
- !!selfn;
`)
ok = fmt.Sprintf("%v", res) == "true"