From b8e8fc724eeafbf2d8fe6eef987f25a37c23c946 Mon Sep 17 00:00:00 2001 From: Avelino Date: Wed, 22 Dec 2021 10:14:34 -0300 Subject: [PATCH] initial logic for generating folder/htmld sub cat Signed-off-by: Avelino --- make_site.go | 99 ++++++++++++++++++++++++++++++++++++++++++++++ tmpl/cat-tmpl.html | 57 ++++++++++++++++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 make_site.go create mode 100644 tmpl/cat-tmpl.html diff --git a/make_site.go b/make_site.go new file mode 100644 index 00000000..7112f6e6 --- /dev/null +++ b/make_site.go @@ -0,0 +1,99 @@ +package main + +import ( + "bytes" + "fmt" + "io/ioutil" + "log" + "os" + "text/template" + + "github.com/PuerkitoBio/goquery" + "github.com/avelino/slugify" +) + +type Link struct { + Title string + Url string + Description string +} + +type Object struct { + Title string + Slug string + Description string + Items []Link +} + +func main() { + GenerateHTML() + input, err := ioutil.ReadFile("./tmpl/index.html") + if err != nil { + panic(err) + } + buf := bytes.NewBuffer(input) + query, err := goquery.NewDocumentFromReader(buf) + if err != nil { + panic(err) + } + + objs := []Object{} + query.Find("body #content ul ul").First().Each(func(_ int, s *goquery.Selection) { + + s.Find("li a").Each(func(_ int, s *goquery.Selection) { + selector, _ := s.Attr("href") + obj := makeObjById(selector, query.Find("body")) + objs = append(objs, obj) + }) + }) + + makeSiteStruct(objs) + makeSitemap(objs) +} + +func makeSiteStruct(objs []Object) { + for _, obj := range objs { + folder := fmt.Sprintf("tmpl/%s", obj.Slug) + fmt.Println(folder) + + err := os.Mkdir(folder, 0755) + if err != nil { + log.Println(err) + } + + t := template.Must(template.ParseFiles("tmpl/cat-tmpl.html")) + f, _ := os.Create(fmt.Sprintf("%s/index.html", folder)) + t.Execute(f, obj) + } +} + +func makeSitemap(objs []Object) { + t := template.Must(template.ParseFiles("tmpl/sitemap-tmpl.xml")) + f, _ := os.Create("tmpl/sitemap.xml") + t.Execute(f, objs) +} + +func makeObjById(selector string, s *goquery.Selection) (obj Object) { + s.Find(selector).Each(func(_ int, s *goquery.Selection) { + desc := s.NextFiltered("p") + ul := desc.NextFiltered("ul") + + links := []Link{} + ul.Find("li").Each(func(_ int, s *goquery.Selection) { + url, _ := s.Find("a").Attr("href") + link := Link{ + Title: s.Find("a").Text(), + Description: s.Text(), + Url: url, + } + links = append(links, link) + }) + obj = Object{ + Slug: slugify.Slugify(s.Text()), + Title: s.Text(), + Description: desc.Text(), + Items: links, + } + }) + return +} diff --git a/tmpl/cat-tmpl.html b/tmpl/cat-tmpl.html new file mode 100644 index 00000000..c7db71e4 --- /dev/null +++ b/tmpl/cat-tmpl.html @@ -0,0 +1,57 @@ + + + + + + + + + {{.Title}} - Awesome Go + + + + + + + + + + + + + + + +
+
    + {{range .Items}} +
  • {{.Descrition}}
  • + {{end}} +
+ + + Deploys by Netlify + +
+ + + + + + + \ No newline at end of file