ref: 14f3fdd014c2a01a1d3d19d34d28fa22256260c3
parent: 6f582efbd405ad095635ff0f6991d857e665fc35
author: Philip Silva <philip.silva@protonmail.com>
date: Fri Dec 25 10:39:59 EST 2020
QueryRef
--- a/nodes/nodes.go
+++ b/nodes/nodes.go
@@ -89,6 +89,17 @@
return nil
}
+func (n *Node) QueryRef() string {
+ path := make([]string, 0, 5)
+ path = append(path, n.Data())
+ for p := n.Parent; p != nil; p = p.Parent {
+ if p.Data() != "html" && p.Data() != "body" {
+ path = append([]string{p.Data()}, path...)
+ }
+ }
+ return strings.TrimSpace(strings.Join(path, " "))
+}
+
func IsPureTextContent(n Node) bool {
if n.Text != "" {
return true
--- a/nodes/nodes_test.go
+++ b/nodes/nodes_test.go
@@ -1,6 +1,9 @@
package nodes
import (
+ "golang.org/x/net/html"
+ "opossum/style"
+ "strings"
"testing"
)
@@ -10,4 +13,23 @@
if out := filterText(in); out != exp {
t.Fatalf("%+v", out)
}
+}
+
+func TestQueryRef(t *testing.T) {
+ buf := strings.NewReader(`
+ <html>
+ <body>
+ <p>
+ <b>bold stuff</b>
+ <i>italic stuff</i>
+ <a>link</a>
+ </p>
+ </body>
+ </html>`)
+ doc, err := html.Parse(buf)
+ if err != nil { t.Fatalf(err.Error()) }
+ nt := NewNodeTree(doc, style.Map{}, make(map[*html.Node]style.Map), nil)
+ p := nt.Children[0].Children[1].Children[1]
+ a := p.Children[5]
+ if q := a.QueryRef(); q != "p a" { t.Fatalf("%v", q) }
}
\ No newline at end of file