-
Notifications
You must be signed in to change notification settings - Fork 61
/
Copy pathVersion6.scala
136 lines (126 loc) · 5.09 KB
/
Version6.scala
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package playscala
import org.scalajs.dom
import org.scalajs.dom.document
import org.scalajs.dom.html
import org.scalajs.dom.experimental.Fetch
import org.scalajs.dom.experimental.Headers
import org.scalajs.dom.experimental.RequestInit
import org.scalajs.dom.experimental.HttpMethod
import org.scalajs.dom.experimental.RequestMode
import play.api.libs.json.Json
import models.ReadsAndWrites._
import scala.scalajs.js.Thenable.Implicits._
import play.api.libs.json.JsSuccess
import play.api.libs.json.JsError
import scala.concurrent.ExecutionContext
import scala.scalajs.js.annotation.JSExportTopLevel
import scalajs.js
import models.TaskItem
object Version6 {
implicit val ec = ExecutionContext.global
val csrfToken = document.getElementById("csrfToken").asInstanceOf[html.Input].value
val validateRoute = document.getElementById("validateRoute").asInstanceOf[html.Input].value
val tasksRoute = document.getElementById("tasksRoute").asInstanceOf[html.Input].value
val createRoute = document.getElementById("createRoute").asInstanceOf[html.Input].value
val deleteRoute = document.getElementById("deleteRoute").asInstanceOf[html.Input].value
val addRoute = document.getElementById("addRoute").asInstanceOf[html.Input].value
val logoutRoute = document.getElementById("logoutRoute").asInstanceOf[html.Input].value
def init(): Unit = {
println("In version 6.")
}
@JSExportTopLevel("login")
def login(): Unit = {
val username = document.getElementById("loginName").asInstanceOf[html.Input].value
val password = document.getElementById("loginPass").asInstanceOf[html.Input].value
val data = models.UserData(username, password)
FetchJson.fetchPost(validateRoute, csrfToken, data, (bool: Boolean) => {
if(bool) {
document.getElementById("login-section").asInstanceOf[js.Dynamic].hidden = true
document.getElementById("task-section").asInstanceOf[js.Dynamic].hidden = false
document.getElementById("login-message").innerHTML = ""
document.getElementById("create-message").innerHTML = ""
document.getElementById("loginName").asInstanceOf[html.Input].value = ""
document.getElementById("loginPass").asInstanceOf[html.Input].value = ""
loadTasks()
} else {
document.getElementById("login-message").innerHTML = "Login Failed"
}
}, e => {
println("Fetch error: " + e)
})
}
@JSExportTopLevel("createUser")
def createUser(): Unit = {
val username = document.getElementById("createName").asInstanceOf[html.Input].value
val password = document.getElementById("createPass").asInstanceOf[html.Input].value
val data = models.UserData(username, password)
FetchJson.fetchPost(createRoute, csrfToken, data, (bool: Boolean) => {
if(bool) {
document.getElementById("login-section").asInstanceOf[js.Dynamic].hidden = true
document.getElementById("task-section").asInstanceOf[js.Dynamic].hidden = false
document.getElementById("login-message").innerHTML = ""
document.getElementById("create-message").innerHTML = ""
document.getElementById("createName").asInstanceOf[html.Input].value = ""
document.getElementById("createPass").asInstanceOf[html.Input].value = ""
loadTasks()
} else {
document.getElementById("create-message").innerHTML = "User Creation Failed"
}
}, e => {
println("Fetch error: " + e)
})
}
def loadTasks(): Unit = {
val ul = document.getElementById("task-list")
ul.innerHTML = ""
FetchJson.fetchGet(tasksRoute, (tasks: Seq[TaskItem]) => {
for (task <- tasks) {
val li = document.createElement("li")
val text = document.createTextNode(task.text)
li.appendChild(text);
li.asInstanceOf[html.LI].onclick = e => {
delete(task.id)
}
ul.appendChild(li)
}
}, e => {
println("Fetch error: " + e)
})
}
def delete(id: Int): Unit = {
FetchJson.fetchPost(deleteRoute, csrfToken, id, (bool: Boolean) => {
if(bool) {
document.getElementById("task-message").innerHTML = ""
loadTasks()
} else {
document.getElementById("task-message").innerHTML = "Failed to delete."
}
}, e => {
println("Fetch error: " + e)
})
}
@JSExportTopLevel("addTask")
def addTask(): Unit = {
val task = document.getElementById("newTask").asInstanceOf[html.Input].value
FetchJson.fetchPost(addRoute, csrfToken, task, (bool: Boolean) => {
if(bool) {
loadTasks()
document.getElementById("newTask").asInstanceOf[html.Input].value = ""
document.getElementById("task-message").innerHTML = ""
} else {
document.getElementById("task-message").innerHTML = "Failed to add."
}
}, e => {
println("Fetch error: " + e)
})
}
@JSExportTopLevel("logout")
def logout(): Unit = {
FetchJson.fetchGet(logoutRoute, (bool: Boolean) => {
document.getElementById("login-section").asInstanceOf[js.Dynamic].hidden = false;
document.getElementById("task-section").asInstanceOf[js.Dynamic].hidden = true;
}, e => {
println("Fetch error: " + e)
})
}
}