/
login.go
113 lines (85 loc) · 2.19 KB
/
login.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package login
import (
"syscall/js"
"github.com/Nerzal/tinydom"
"github.com/Nerzal/tinydom/elements/form"
"github.com/Nerzal/tinydom/elements/input"
"github.com/Nerzal/tinydom/elements/label"
)
const user = "tinygo"
const password = "secure1234"
var doc = tinydom.GetDocument()
type Service struct {
channel chan string
}
func NewService(channel chan string) *Service {
return &Service{channel: channel}
}
func (service *Service) RenderLogin() {
tinydom.GetWindow().PushState(nil, "login", "/login")
div := doc.CreateElement("div").
SetId("login-component")
h1 := doc.CreateElement("h1").
SetInnerHTML("Login")
loginForm := form.New()
userNameLabel := label.
New().
SetFor("userName").
SetInnerHTML("UserName:")
userName := input.
New(input.TextInput).
SetId("userName")
passwordLabel := label.
New().
SetFor("password").
SetInnerHTML("Password:")
password := input.
New(input.PasswordInput).
SetId("password")
login := input.New(input.ButtonInput).
SetValue("login").
AddEventListener("click", js.FuncOf(service.onClick)).
AddEventListener("keypress", js.FuncOf(service.onKeyPress))
loginForm.AppendChildrenBr(
userNameLabel,
userName,
passwordLabel,
password,
login,
)
div.AppendChildren(h1, loginForm.Element)
body := doc.GetElementById("body-component")
body.AppendChild(div)
}
func (service *Service) onClick(this js.Value, args []js.Value) interface{} {
service.login()
return nil
}
func (service *Service) onKeyPress(this js.Value, args []js.Value) interface{} {
if len(args) == 0 {
println("keyPress event with no event should not happen")
return nil
}
event := tinydom.Event{Value: args[0]}
if event.Key() == "Enter" {
service.login()
}
return nil
}
func (service *Service) login() {
userElem := input.FromElement(doc.GetElementById("userName"))
userName := userElem.Value()
if userName != user {
tinydom.GetWindow().Alert("Invalid username or password")
return
}
passwordElem := input.FromElement(doc.GetElementById("password"))
passwordInput := passwordElem.Value()
if passwordInput != password {
tinydom.GetWindow().Alert("Invalid username or password")
return
}
go func() {
service.channel <- userName
}()
}