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
|
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)})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue