summaryrefslogtreecommitdiff
path: root/internal/links/find.go
blob: 33b24d5e06200635103901b56a9d051f7c7763a8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package links

import (
	"io"

	"golang.org/x/net/html"
	"golang.org/x/net/html/atom"
)

func find(htmlInput io.Reader) ([]string, error) {
	doc, err := html.Parse(htmlInput)
	if err != nil {
		return nil, err
	}

	hrefs := findHrefs(doc)

	return hrefs, nil
}

// findHrefs returns all link addresses inside doc.
func findHrefs(doc *html.Node) []string {
	var hrefs []string
	for node := range doc.Descendants() {
		if node.Type == html.ElementNode && node.DataAtom == atom.A {
			for _, attr := range node.Attr {
				if attr.Key == "href" {
					hrefs = append(hrefs, attr.Val)
				}
			}
		}
	}

	return hrefs
}