184 lines
3.7 KiB
Go
184 lines
3.7 KiB
Go
// +build ignore
|
|
|
|
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"bytes"
|
|
"fmt"
|
|
"github.com/gomarkdown/markdown"
|
|
"github.com/gomarkdown/markdown/html"
|
|
"html/template"
|
|
"io/ioutil"
|
|
"os"
|
|
"os/exec"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
const wikiUrl = "https://github.com/statping-ng/statping-ng.wiki"
|
|
|
|
var vue = `<template>
|
|
<div class="col-12">
|
|
<div class="row mb-4">
|
|
{{ range .Categories }}
|
|
<div class="col">
|
|
<h4 class="h4 mb-2">{{ .String }}</h4>
|
|
{{ range .Pages }}
|
|
<a @click.prevent='tab="{{.String}}"' class="d-block mb-1 text-link" href="#">{{.String}}</a>
|
|
{{end}}
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
|
|
<div class="col-12" v-if='tab === "Home"'>
|
|
<div v-pre>
|
|
{{html .Home.Data}}
|
|
</div>
|
|
</div>
|
|
{{ range .Pages }}
|
|
<div class="col-12" v-if='tab === "{{.String}}"'>
|
|
<h1 class="h1 mt-5 mb-5 text-muted">{{ .String }}</h1>
|
|
<span class="spacer"></span>
|
|
<div v-pre>
|
|
{{html .Data}}
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
|
|
<div class="col-12 shadow-md mt-5">
|
|
<div class="text-dim" v-pre>
|
|
{{html .Footer.Data}}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="text-center small text-dim" v-pre>
|
|
Automatically generated from Statping's Wiki on {{.CreatedAt}}
|
|
</div>
|
|
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
name: 'Help',
|
|
data () {
|
|
return {
|
|
tab: "Home",
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
IMG {
|
|
max-width: 80%;
|
|
alignment: center;
|
|
display: block;
|
|
}
|
|
</style>
|
|
`
|
|
|
|
var temp *template.Template
|
|
|
|
type Category struct {
|
|
String string
|
|
Pages []*Page
|
|
}
|
|
|
|
type Page struct {
|
|
String string
|
|
Data string
|
|
}
|
|
|
|
type Render struct {
|
|
Categories []*Category
|
|
Pages []*Page
|
|
Home *Page
|
|
Footer *Page
|
|
CreatedAt time.Time
|
|
}
|
|
|
|
func main() {
|
|
fmt.Println("RUNNING: ./source/generate_help.go")
|
|
fmt.Println("\n\nGenerating Help.vue from Statping's Wiki")
|
|
fmt.Println("Cloning ", wikiUrl)
|
|
cmd := exec.Command("git", "clone", wikiUrl)
|
|
cmd.Start()
|
|
cmd.Wait()
|
|
|
|
fmt.Println("Generating Help view from Wiki")
|
|
|
|
d, _ := ioutil.ReadFile("statping.wiki/_Sidebar.md")
|
|
|
|
var cats []*Category
|
|
var pages []*Page
|
|
scanner := bufio.NewScanner(strings.NewReader(string(d)))
|
|
var thisCategory *Category
|
|
for scanner.Scan() {
|
|
txt := scanner.Text()
|
|
if txt == "" {
|
|
continue
|
|
}
|
|
if txt[0:1] == "#" {
|
|
newCate := &Category{
|
|
String: txt[2:len(txt)],
|
|
}
|
|
if txt[2:len(txt)] == "Contact" || txt[2:len(txt)] == "Badges" {
|
|
continue
|
|
}
|
|
thisCategory = newCate
|
|
cats = append(cats, newCate)
|
|
}
|
|
if txt[0:2] == "[[" {
|
|
file := "statping.wiki/" + txt[2:len(txt)-2] + ".md"
|
|
file = strings.ReplaceAll(file, " ", "-")
|
|
page := &Page{
|
|
String: txt[2 : len(txt)-2],
|
|
Data: open(file),
|
|
}
|
|
pages = append(pages, page)
|
|
thisCategory.Pages = append(thisCategory.Pages, page)
|
|
}
|
|
}
|
|
|
|
home := &Page{
|
|
String: "Home",
|
|
Data: open("statping.wiki/Home.md"),
|
|
}
|
|
|
|
footer := &Page{
|
|
String: "Footer",
|
|
Data: open("statping.wiki/_Footer.md"),
|
|
}
|
|
|
|
w := bytes.NewBufferString("")
|
|
temp = template.New("wiki")
|
|
temp.Funcs(template.FuncMap{
|
|
"html": func(val string) template.HTML {
|
|
return template.HTML(val)
|
|
},
|
|
"fake": func(val string) template.HTML {
|
|
return template.HTML(`{{` + val + `}}`)
|
|
},
|
|
})
|
|
temp, _ = temp.Parse(vue)
|
|
temp.ExecuteTemplate(w, "wiki", Render{Categories: cats, Pages: pages, Home: home, Footer: footer, CreatedAt: time.Now().UTC()})
|
|
|
|
fmt.Println("Saving wiki page to: ./frontend/src/pages/Home.vue")
|
|
ioutil.WriteFile("../frontend/src/pages/Help.vue", w.Bytes(), os.FileMode(0755))
|
|
|
|
fmt.Println("Deleting statping wiki repo")
|
|
os.RemoveAll("statping.wiki")
|
|
}
|
|
|
|
func open(filename string) string {
|
|
htmlFlags := html.CommonFlags | html.HrefTargetBlank
|
|
opts := html.RendererOptions{Flags: htmlFlags}
|
|
renderer := html.NewRenderer(opts)
|
|
|
|
d, _ := ioutil.ReadFile(filename)
|
|
output := markdown.ToHTML(d, nil, renderer)
|
|
return string(output)
|
|
}
|