summaryrefslogtreecommitdiff
path: root/internal/links/find.go
blob: 442282650b35af0ce9c4784dbae9b28e7a07afd4 (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 parse(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
}