p1: /v2/scrape, /v1/fetch, auth, CLI, contract tests
Single Fetcher.Fetch on the Guard that holds DenyPrefixes. skipTlsVerification is ignored. No 502. keys add writes the secret only to --out. Release binary has no -test-allow-prefix.
This commit is contained in:
+88
@@ -0,0 +1,88 @@
|
||||
// dom makes it easier to interact with the html document.
|
||||
//
|
||||
// Node = return all the nodes
|
||||
// Element = return all the nodes that are of type Element. This e.g. excludes #text nodes.
|
||||
package dom
|
||||
|
||||
import "golang.org/x/net/html"
|
||||
|
||||
// AllNodes recursively gets all the nodes in the tree.
|
||||
func AllNodes(startNode *html.Node) (allNodes []*html.Node) {
|
||||
var finder func(*html.Node)
|
||||
finder = func(node *html.Node) {
|
||||
allNodes = append(allNodes, node)
|
||||
|
||||
for child := node.FirstChild; child != nil; child = child.NextSibling {
|
||||
finder(child)
|
||||
}
|
||||
}
|
||||
|
||||
finder(startNode)
|
||||
|
||||
return allNodes
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - //
|
||||
|
||||
func AllChildNodes(node *html.Node) (children []*html.Node) {
|
||||
for child := node.FirstChild; child != nil; child = child.NextSibling {
|
||||
children = append(children, child)
|
||||
}
|
||||
return children
|
||||
}
|
||||
|
||||
// AllChildElements is similar to AllChildNodes but only returns
|
||||
// nodes of type `ElementNode`.
|
||||
func AllChildElements(node *html.Node) (children []*html.Node) {
|
||||
for child := node.FirstChild; child != nil; child = child.NextSibling {
|
||||
if child.Type == html.ElementNode {
|
||||
children = append(children, child)
|
||||
}
|
||||
}
|
||||
return children
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - //
|
||||
|
||||
func FirstChildNode(node *html.Node) *html.Node {
|
||||
return node.FirstChild
|
||||
}
|
||||
func FirstChildElement(node *html.Node) *html.Node {
|
||||
for child := node.FirstChild; child != nil; child = child.NextSibling {
|
||||
if child.Type == html.ElementNode {
|
||||
return child
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - //
|
||||
|
||||
func PrevSiblingNode(node *html.Node) *html.Node {
|
||||
return node.PrevSibling
|
||||
}
|
||||
func PrevSiblingElement(node *html.Node) *html.Node {
|
||||
for sibling := node.PrevSibling; sibling != nil; sibling = sibling.PrevSibling {
|
||||
if sibling.Type == html.ElementNode {
|
||||
return sibling
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - //
|
||||
|
||||
func NextSiblingNode(node *html.Node) *html.Node {
|
||||
return node.NextSibling
|
||||
}
|
||||
|
||||
// NextSiblingElement returns the element immediately following the passed-in node or nil.
|
||||
// In contrast to `node.NextSibling` this only returns the next `ElementNode`.
|
||||
func NextSiblingElement(node *html.Node) *html.Node {
|
||||
for sibling := node.NextSibling; sibling != nil; sibling = sibling.NextSibling {
|
||||
if sibling.Type == html.ElementNode {
|
||||
return sibling
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user