Refactor server.go
This commit is contained in:
parent
1b760329ef
commit
03e5a27b4e
45
server.go
45
server.go
@ -11,10 +11,6 @@ import (
|
|||||||
|
|
||||||
const PORT = 3003
|
const PORT = 3003
|
||||||
|
|
||||||
type frontendInfo struct {
|
|
||||||
Name, Mountpoint string
|
|
||||||
}
|
|
||||||
|
|
||||||
//go:embed "all:vuejs/dist"
|
//go:embed "all:vuejs/dist"
|
||||||
var vueFiles embed.FS
|
var vueFiles embed.FS
|
||||||
|
|
||||||
@ -33,11 +29,26 @@ var alpineFiles embed.FS
|
|||||||
//go:embed "react"
|
//go:embed "react"
|
||||||
var reactFiles embed.FS
|
var reactFiles embed.FS
|
||||||
|
|
||||||
func addFrontend(files embed.FS, mountpoint string, subfs string, name string) frontendInfo {
|
type frontendInfo struct {
|
||||||
subFiles, _ := fs.Sub(files, subfs)
|
Name, Mountpoint string
|
||||||
fileServer := http.FileServerFS(subFiles)
|
Filesystem fs.FS
|
||||||
http.Handle(mountpoint, http.StripPrefix(mountpoint, fileServer))
|
}
|
||||||
return frontendInfo{name, mountpoint}
|
|
||||||
|
var frontends = []frontendInfo{
|
||||||
|
{"JS Only", "/vanillaJS/", getSubFS(vanillaFiles, "vanillaJS")},
|
||||||
|
{"Alpine.js", "/alpinejs/", getSubFS(alpineFiles, "alpinejs")},
|
||||||
|
{"React", "/react/", getSubFS(reactFiles, "react")},
|
||||||
|
{"React (Next)", "/reactNextJS/", getSubFS(nextFiles, "reactNextJS/out")},
|
||||||
|
{"Vue.js", "/vuejs/", getSubFS(vueFiles, "vuejs/dist")},
|
||||||
|
{"Svelte", "/svelte/", getSubFS(svelteFiles, "svelte/dist")},
|
||||||
|
}
|
||||||
|
|
||||||
|
func getSubFS(f fs.FS, dir string) fs.FS {
|
||||||
|
files, err := fs.Sub(f, dir)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return files
|
||||||
}
|
}
|
||||||
|
|
||||||
func outputIndexAndExit(indexTemplate template.Template, frontends []frontendInfo) {
|
func outputIndexAndExit(indexTemplate template.Template, frontends []frontendInfo) {
|
||||||
@ -45,8 +56,8 @@ func outputIndexAndExit(indexTemplate template.Template, frontends []frontendInf
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err) // Handle error
|
panic(err) // Handle error
|
||||||
}
|
}
|
||||||
defer file.Close()
|
|
||||||
indexTemplate.Execute(file, frontends)
|
indexTemplate.Execute(file, frontends)
|
||||||
|
file.Close()
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,19 +69,15 @@ func main() {
|
|||||||
panic(fmt.Sprintf("Error parsing homepage template\n%s", err))
|
panic(fmt.Sprintf("Error parsing homepage template\n%s", err))
|
||||||
}
|
}
|
||||||
|
|
||||||
frontends := []frontendInfo{
|
|
||||||
addFrontend(vanillaFiles, "/vanillaJS/", "vanillaJS", "JS Only"),
|
|
||||||
addFrontend(alpineFiles, "/alpinejs/", "alpinejs", "Alpine.js"),
|
|
||||||
addFrontend(reactFiles, "/react/", "react", "React"),
|
|
||||||
addFrontend(nextFiles, "/reactNextJS/", "reactNextJS/out", "React (Next.js)"),
|
|
||||||
addFrontend(vueFiles, "/vuejs/", "vuejs/dist", "Vue.js"),
|
|
||||||
addFrontend(svelteFiles, "/svelte/", "svelte/dist", "Svelte"),
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(args) == 2 && args[1] == "generate" {
|
if len(args) == 2 && args[1] == "generate" {
|
||||||
outputIndexAndExit(*home_template, frontends)
|
outputIndexAndExit(*home_template, frontends)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, info := range frontends {
|
||||||
|
fileServer := http.FileServerFS(info.Filesystem)
|
||||||
|
http.Handle(info.Mountpoint, http.StripPrefix(info.Mountpoint, fileServer))
|
||||||
|
}
|
||||||
|
|
||||||
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||||
err = home_template.Execute(w, frontends)
|
err = home_template.Execute(w, frontends)
|
||||||
})
|
})
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user