aboutsummaryrefslogtreecommitdiff
path: root/ui
diff options
context:
space:
mode:
authorJakob Odersky <jakob@inpher.io>2019-10-09 17:10:43 -0400
committerJakob Odersky <jakob@inpher.io>2019-10-09 20:33:16 -0400
commit0ceee5ed4bae240b8c8e94d2fd7424d9d0b67ec7 (patch)
tree2df0258f81050e6fed51d38e217c4f6256518e12 /ui
parentfaed28c54900fc0b359700873367095f51425794 (diff)
downloadscala-triad-0ceee5ed4bae240b8c8e94d2fd7424d9d0b67ec7.tar.gz
scala-triad-0ceee5ed4bae240b8c8e94d2fd7424d9d0b67ec7.tar.bz2
scala-triad-0ceee5ed4bae240b8c8e94d2fd7424d9d0b67ec7.zip
Migrate build to mill
Diffstat (limited to 'ui')
-rw-r--r--ui/src/JsTemplates.scala3
-rw-r--r--ui/src/Main.scala (renamed from ui/src/main/scala/Main.scala)0
-rw-r--r--ui/src/http/XhrBackend.scala51
-rw-r--r--ui/src/http/package.scala3
4 files changed, 57 insertions, 0 deletions
diff --git a/ui/src/JsTemplates.scala b/ui/src/JsTemplates.scala
new file mode 100644
index 0000000..bbb29c5
--- /dev/null
+++ b/ui/src/JsTemplates.scala
@@ -0,0 +1,3 @@
+package triad
+
+object JsTemplates extends Templates(scalatags.JsDom)
diff --git a/ui/src/main/scala/Main.scala b/ui/src/Main.scala
index 3621b4a..3621b4a 100644
--- a/ui/src/main/scala/Main.scala
+++ b/ui/src/Main.scala
diff --git a/ui/src/http/XhrBackend.scala b/ui/src/http/XhrBackend.scala
new file mode 100644
index 0000000..3a791c1
--- /dev/null
+++ b/ui/src/http/XhrBackend.scala
@@ -0,0 +1,51 @@
+package triad
+package http
+
+import org.scalajs.dom.{ErrorEvent, Event, XMLHttpRequest}
+
+import scala.concurrent.{Future, Promise, TimeoutException}
+import scala.scalajs.js
+import scala.scalajs.js.typedarray.{ArrayBuffer, Int8Array}
+
+trait XhrBackend extends Backend {
+
+ def send(request: Request): Future[Response] = {
+ val promise = Promise[Response]
+ val xhr = new XMLHttpRequest()
+
+ xhr.open(request.method, request.url)
+ xhr.responseType = "arraybuffer"
+ for ((name, value) <- request.headers) {
+ xhr.setRequestHeader(name, value)
+ }
+
+ xhr.send(js.Array(request.body: _*))
+
+ xhr.onload = (e: Event) => {
+ val body: Array[Byte] = if (!js.isUndefined(xhr.response)) {
+ val buffer = new Int8Array(xhr.response.asInstanceOf[ArrayBuffer])
+ buffer.toArray
+ } else {
+ Array.empty[Byte]
+ }
+
+ val response = Response(
+ xhr.status,
+ Map.empty,
+ body
+ )
+ promise.success(response)
+ }
+
+ xhr.onerror = (e: ErrorEvent) => {
+ promise.failure(new RuntimeException(s"XHR error: ${e.message}"))
+ }
+ xhr.ontimeout = (e: Event) => {
+ promise.failure(
+ new TimeoutException(s"Request timed out: ${xhr.statusText}"))
+ }
+
+ promise.future
+ }
+
+}
diff --git a/ui/src/http/package.scala b/ui/src/http/package.scala
new file mode 100644
index 0000000..7b680eb
--- /dev/null
+++ b/ui/src/http/package.scala
@@ -0,0 +1,3 @@
+package triad
+
+package object http extends XhrBackend