minewebgen - internal/js/settings.go
1 package main
2
3 import (
4 "time"
5
6 "vimagination.zapto.org/gopherjs/xdom"
7 "vimagination.zapto.org/gopherjs/xform"
8 "vimagination.zapto.org/gopherjs/xjs"
9 "honnef.co/go/js/dom"
10 )
11
12 func settingsTab(c dom.Element) {
13 s, err := RPC.Settings()
14 if err != nil {
15 xjs.Alert("Error reading settings: %s", err)
16 return
17 }
18 sn := xform.InputText("serverName", s.ServerName)
19 sn.Required = true
20 la := xform.InputText("listenAddr", s.ListenAddr)
21 la.Required = true
22 sp := xform.InputText("serversPath", s.DirServers)
23 sp.Required = true
24 mp := xform.InputText("mapsPath", s.DirMaps)
25 mp.Required = true
26 gp := xform.InputText("gensPath", s.DirGenerators)
27 gp.Required = true
28 ge := xform.InputText("genExe", s.GeneratorExecutable)
29 ge.Required = true
30 mm := xform.InputNumber("maxMem", 100, 10000, float64(s.GeneratorMaxMem/1024/1024))
31 mm.Required = true
32 sb := xform.InputSubmit("Save")
33 sb.AddEventListener("click", false, func(e dom.Event) {
34 if sn.Value == "" || la.Value == "" || sp.Value == "" || mp.Value == "" || gp.Value == "" || ge.Value == "" || !mm.CheckValidity() {
35 return
36 }
37 e.PreventDefault()
38 sb.Disabled = true
39 go func() {
40 s.ServerName = sn.Value
41 s.ListenAddr = la.Value
42 s.DirServers = sp.Value
43 s.DirMaps = mp.Value
44 s.DirGenerators = gp.Value
45 s.GeneratorExecutable = ge.Value
46 s.GeneratorMaxMem = uint64(mm.ValueAsNumber * 1024 * 1024)
47 if err := RPC.SetSettings(s); err != nil {
48 xjs.Alert("Error saving settings: %s", err)
49 return
50 }
51 SetTitle(sn.Value)
52 span := xdom.Span()
53 span.Style().Set("color", "#f00")
54 c.AppendChild(xjs.SetInnerText(span, "Saved!"))
55 time.Sleep(5 * time.Second)
56 c.RemoveChild(span)
57 sb.Disabled = false
58 }()
59 })
60 xjs.AppendChildren(c, xjs.AppendChildren(xdom.Form(), xjs.AppendChildren(xdom.Fieldset(),
61 xjs.SetInnerText(xdom.Legend(), "Change Settings"),
62 xform.Label("Server Name", "serverName"), sn, xdom.Br(),
63 xform.Label("Listen Address", "listenAddr"), la, xdom.Br(),
64 xform.Label("Servers Path", "serversPath"), sp, xdom.Br(),
65 xform.Label("Maps Path", "mapsPath"), mp, xdom.Br(),
66 xform.Label("Generators Path", "gensPath"), gp, xdom.Br(),
67 xform.Label("Generator Executable", "genExe"), ge, xdom.Br(),
68 xform.Label("Generator Memory (MB)", "maxMem"), mm, xdom.Br(),
69 sb,
70 )))
71 }