master
parent
2cac29adb7
commit
1043a58f39
|
|
@ -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
43
main.go
|
|
@ -1,23 +1,30 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
_ "embed"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"local/args"
|
||||
"log"
|
||||
"net/http"
|
||||
"text/template"
|
||||
)
|
||||
|
||||
//go:embed ./words.txt
|
||||
//go:embed words.json
|
||||
var words string
|
||||
|
||||
//go:embed index.html
|
||||
var index string
|
||||
|
||||
func main() {
|
||||
as := args.NewArgSet()
|
||||
as.Append(args.INT, "p", "port to listen on", 8091)
|
||||
as.Append(args.BOOL, "debug", "debug mode", false)
|
||||
if err := as.Parse(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
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 {
|
||||
panic(err)
|
||||
}
|
||||
|
|
@ -28,5 +35,35 @@ type server struct {
|
|||
}
|
||||
|
||||
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)})
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue