summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorLi Haoyi <haoyi@dropbox.com>2014-09-03 23:06:31 -0700
committerLi Haoyi <haoyi@dropbox.com>2014-09-03 23:06:31 -0700
commit2f96da023d9172deb646de9bd1cf0a05c4201df7 (patch)
tree8636cf8853fe0a8621587e4a9870230545f89f9c /client
parent424cc28d19f7e23cab6af9795a6c6a5c4adf5e3c (diff)
downloadworkbench-2f96da023d9172deb646de9bd1cf0a05c4201df7.tar.gz
workbench-2f96da023d9172deb646de9bd1cf0a05c4201df7.tar.bz2
workbench-2f96da023d9172deb646de9bd1cf0a05c4201df7.zip
lols
Diffstat (limited to 'client')
-rw-r--r--client/src/main/scala/workbench/Main.scala76
1 files changed, 70 insertions, 6 deletions
diff --git a/client/src/main/scala/workbench/Main.scala b/client/src/main/scala/workbench/Main.scala
index 0b0cea7..7f63da6 100644
--- a/client/src/main/scala/workbench/Main.scala
+++ b/client/src/main/scala/workbench/Main.scala
@@ -1,10 +1,74 @@
-package workbench
+package com.lihaoyi.workbench
+import upickle._
+import org.scalajs.dom
import org.scalajs.dom.extensions._
-import async.Async._
-object Main{
- def main(bootSnippet: String, host: String, port: Int): Unit = async{
- while(true){
- val data = await(Ajax.get(s"http://$host:$port/notifications"))
+import upickle.{Reader, Writer, Js}
+
+import scala.scalajs.js
+import scala.scalajs.js.annotation.JSExport
+import scalajs.concurrent.JSExecutionContext.Implicits.runNow
+object WireServer extends autowire.Server[Js.Value, upickle.Reader, upickle.Writer]{
+
+ def write[Result: Writer](r: Result) = upickle.writeJs(r)
+ def read[Result: Reader](p: Js.Value) = upickle.readJs[Result](p)
+ def wire(parsed: Js.Arr): Unit = {
+ WireServer.route[Api](Main).apply(
+ autowire.Core.Request(
+ parsed(0).asInstanceOf[Js.Arr].value.collect{case Js.Str(s) => s},
+ parsed(1).value.asInstanceOf[Map[String, Js.Value]]
+ )
+ )
+ }
+}
+@JSExport
+object Main extends Api{
+ def main(bootSnippet: String, host: String, port: Int): Unit = {
+ def rec(): Unit = {
+ val f = Ajax.get(s"http://$host:$port/notifications")
+
+ f.onSuccess { case data =>
+ val parsed = json.read(data.responseText).asInstanceOf[Js.Arr]
+ WireServer.wire(parsed)
+ rec()
+ } (runNow)
+ ()
+ }
+ rec()
+ }
+
+
+ override def clear(): Unit = ???
+
+ override def reload(): Unit = {
+ dom.console.log("Reloading page...")
+ dom.location.reload()
+ }
+
+ override def run(path: String, bootSnippet: Option[String]): Unit = {
+ val tag = dom.document.createElement("script")
+ var loaded = false
+
+ tag.setAttribute("src", path)
+
+ bootSnippet.foreach{ bootSnippet =>
+ tag.onreadystatechange = (e: dom.Event) => {
+ dom.console.log("Post-run reboot")
+ if (!loaded) {
+ dom.console.log("Post-run reboot go!")
+ js.eval(bootSnippet)
+ }
+ loaded = true
+ }
+ }
+ dom.document.head.appendChild(tag)
+ }
+
+ override def print(level: String, msg: String): Unit = {
+ level match {
+ case "error" => dom.console.error(msg)
+ case "warn" => dom.console.warn(msg)
+ case "info" => dom.console.info(msg)
+ case "log" => dom.console.log(msg)
}
}
} \ No newline at end of file