summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorLi Haoyi <haoyi@dropbox.com>2014-10-08 21:32:56 -0700
committerLi Haoyi <haoyi@dropbox.com>2014-10-08 21:32:56 -0700
commitb5b95c7d83b376c74a43848715228dfd3a415354 (patch)
tree56d3755bbef582127601160d2a43541f57fdd5bd /src/main
parenta57376f40b539260f1d13d3278f10e16a4a2fbe1 (diff)
downloadworkbench-b5b95c7d83b376c74a43848715228dfd3a415354.tar.gz
workbench-b5b95c7d83b376c74a43848715228dfd3a415354.tar.bz2
workbench-b5b95c7d83b376c74a43848715228dfd3a415354.zip
0.2.2
Diffstat (limited to 'src/main')
-rw-r--r--src/main/scala/workbench/Plugin.scala11
-rw-r--r--src/main/scala/workbench/Server.scala5
2 files changed, 14 insertions, 2 deletions
diff --git a/src/main/scala/workbench/Plugin.scala b/src/main/scala/workbench/Plugin.scala
index 85b8f39..3a1b175 100644
--- a/src/main/scala/workbench/Plugin.scala
+++ b/src/main/scala/workbench/Plugin.scala
@@ -80,7 +80,16 @@ object Plugin extends sbt.Plugin {
var s = IO.read(new sbt.File(path.drop(prefix.length)))
s = s.replace("\nvar ScalaJS = ", "\nvar ScalaJS = ScalaJS || ")
- s = s.replaceAll("\n(ScalaJS\\.c\\.[a-zA-Z_$0-9]+\\.prototype) = ", "/*X*/\n$1 = $1 || ")
+ s = s.replaceAll(
+ "\n(ScalaJS\\.c\\.[a-zA-Z_$0-9]+\\.prototype) = (.*?\n)",
+ """
+ |$1 = $1 || {}
+ |(function(){
+ | var newProto = $2
+ | for (var attrname in newProto) { $1[attrname] = newProto[attrname]; }
+ |})()
+ |""".stripMargin
+ )
for(char <- Seq("d", "c", "h", "i", "n", "m")){
s = s.replaceAll("\n(ScalaJS\\." + char + "\\.[a-zA-Z_$0-9]+) = ", "\n$1 = $1 || ")
}
diff --git a/src/main/scala/workbench/Server.scala b/src/main/scala/workbench/Server.scala
index 8d05037..3ffe288 100644
--- a/src/main/scala/workbench/Server.scala
+++ b/src/main/scala/workbench/Server.scala
@@ -56,15 +56,18 @@ class Server(url: String, port: Int, bootSnippet: String) extends SimpleRoutingA
// Even if there's someone already waiting,
// a new actor waiting replaces the old one
waitingActor = Some(a)
- case (a: ActorRef, None, msgs) =>
+ case (a: ActorRef, None, msgs) =>
respond(a, upickle.json.write(Js.Arr(msgs:_*)))
queuedMessages = Nil
+
case (msg: Js.Arr, None, msgs) =>
queuedMessages = msg :: msgs
+
case (msg: Js.Arr, Some(a), Nil) =>
respond(a, upickle.json.write(Js.Arr(msg)))
waitingActor = None
+
case (Clear, waiting, Nil) =>
waiting.foreach(respond(_, upickle.json.write(Js.Arr())))
waitingActor = None