bel 2021-11-23 13:50:17 -07:00
parent 2cac29adb7
commit 1043a58f39
4 changed files with 92 additions and 8538 deletions

51
index.html Normal file
View File

@ -0,0 +1,51 @@
<html>
<header>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/water.css@2/out/water.css">
<style>
body {
max-width: 1024px;
margin: auto;
font-size: 24pt;
padding: 50px;
}
input {
font-size: 24;
}
</style>
<script>
var words = {{ .Words }}
console.log(words.length)
function newWords() {
var idxes = new Set()
while(idxes.size < 5) {
var idx = Math.floor(Math.random() * words.length)
idxes.add(idx)
}
var somewords = []
for(idx of idxes) {
somewords.push(words[idx])
}
somewords.sort()
var html = ""
for(word of somewords) {
html += "<li>"
html += word
html += "</li>"
}
var ele = document.getElementById("words")
ele.innerHTML = html
}
</script>
</header>
<body onload="newWords(); return false">
Words:
<ul id="words">
</ul>
<input type="button" onclick="newWords(); return false;" value="New Words"></input>
</body>
<footer>
</footer>
</html>

43
main.go
View File

@ -1,23 +1,30 @@
package main package main
import ( import (
_ "embed"
"fmt" "fmt"
"io"
"io/ioutil"
"local/args" "local/args"
"log" "log"
"net/http" "net/http"
"text/template"
) )
//go:embed ./words.txt //go:embed words.json
var words string var words string
//go:embed index.html
var index string
func main() { func main() {
as := args.NewArgSet() as := args.NewArgSet()
as.Append(args.INT, "p", "port to listen on", 8091) as.Append(args.INT, "p", "port to listen on", 8091)
as.Append(args.BOOL, "debug", "debug mode", false)
if err := as.Parse(); err != nil { if err := as.Parse(); err != nil {
panic(err) panic(err)
} }
log.Printf("args: %+v", as) log.Printf("args: %+v", as)
log.Printf("words: %d", len(words))
if err := http.ListenAndServe(fmt.Sprintf(":%d", as.GetInt("p")), server{args: as}); err != nil { if err := http.ListenAndServe(fmt.Sprintf(":%d", as.GetInt("p")), server{args: as}); err != nil {
panic(err) panic(err)
} }
@ -28,5 +35,35 @@ type server struct {
} }
func (server server) ServeHTTP(w http.ResponseWriter, r *http.Request) { func (server server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
panic("nil") if err := server.writeIndex(w); err != nil {
panic(err)
}
}
func (server server) writeIndex(w io.Writer) error {
if server.args.GetBool("debug") {
return server.writeIndexFile(w)
}
return server.writeIndexEmbed(w)
}
func (server server) writeIndexEmbed(w io.Writer) error {
t := template.New("index")
t, err := t.Parse(index)
if err != nil {
return err
}
return t.Execute(w, struct{ Words string }{Words: words})
}
func (server server) writeIndexFile(w io.Writer) error {
b, err := ioutil.ReadFile("words.json")
if err != nil {
return err
}
t, err := template.ParseFiles("index.html")
if err != nil {
return err
}
return t.Execute(w, struct{ Words string }{Words: string(b)})
} }

1
words.json Normal file

File diff suppressed because one or more lines are too long

8535
words.txt

File diff suppressed because it is too large Load Diff