From 8bda8e06ef8c5e58fe39a23bead814d0175f5b4c Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Tue, 1 Apr 2014 22:18:29 -0700 Subject: 0.1.2 --- Plugin.scala | 17 +++++++------ build.sbt | 12 ++++----- readme.md | 2 +- workbench_template.js | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++ workbench_template.ts | 69 --------------------------------------------------- 5 files changed, 84 insertions(+), 85 deletions(-) create mode 100644 workbench_template.js delete mode 100644 workbench_template.ts diff --git a/Plugin.scala b/Plugin.scala index 0d18d2f..c7d3bf3 100644 --- a/Plugin.scala +++ b/Plugin.scala @@ -2,7 +2,7 @@ package com.lihaoyi.workbench import akka.actor.{ActorRef, Actor, ActorSystem} import scala.concurrent.duration._ -import java.nio.file.{Paths} + import play.api.libs.json.Json import sbt._ import Keys._ @@ -19,6 +19,7 @@ object Plugin extends sbt.Plugin with SimpleRoutingApp{ config = ConfigFactory.load(ActorSystem.getClass.getClassLoader), classLoader = ActorSystem.getClass.getClassLoader ) + val refreshBrowsers = taskKey[Unit]("Sends a message to all connected web pages asking them to refresh the page") val updateBrowsers = taskKey[Unit]("partially resets some of the stuff in the browser") val localUrl = settingKey[(String, Int)]("localUrl") @@ -44,15 +45,16 @@ object Plugin extends sbt.Plugin with SimpleRoutingApp{ // a new actor waiting replaces the old one waitingActor = Some(a) case (a: ActorRef, None, msgs) => - respond(a, "[" + msgs.mkString(",") + "]") + + respond(a, JsArray(msgs).toString) queuedMessages = Nil case (msg: JsArray, None, msgs) => queuedMessages = msg :: msgs case (msg: JsArray, Some(a), Nil) => - respond(a, "[" + msg + "]") + respond(a, Json.arr(msg).toString) waitingActor = None case (Clear, Some(a), Nil) => - respond(a, "[]") + respond(a, Json.arr().toString) waitingActor = None } }) @@ -83,11 +85,10 @@ object Plugin extends sbt.Plugin with SimpleRoutingApp{ streams.value.log.info("workbench: Checking " + x.getName) FileFunction.cached(streams.value.cacheDirectory / x.getName, FilesInfo.lastModified, FilesInfo.lastModified){ (f: Set[File]) => streams.value.log.info("workbench: Refreshing " + x.getName) - val cwd = Paths.get(new File("").getAbsolutePath) - val filePath = Paths.get(f.head.getAbsolutePath) + pubSub ! Json.arr( "run", - "/" + cwd.relativize(filePath).toString, + "/" + f.head.getAbsolutePath.drop(new File("").getAbsolutePath.length), bootSnippet.value ) f @@ -100,7 +101,7 @@ object Plugin extends sbt.Plugin with SimpleRoutingApp{ complete{ IO.readStream( getClass.getClassLoader - .getResourceAsStream("workbench_template.ts") + .getResourceAsStream("workbench_template.js") ).replace("", localUrl.value._1) .replace("", localUrl.value._2.toString) .replace("", bootSnippet.value) diff --git a/build.sbt b/build.sbt index 769ecaa..4e87481 100644 --- a/build.sbt +++ b/build.sbt @@ -2,7 +2,7 @@ import sbt.Keys._ name := "workbench" -version := "0.1.1" +version := "0.1.2" organization := "com.lihaoyi" @@ -12,7 +12,7 @@ sbtPlugin := true publishArtifact in Test := false publishTo <<= version { (v: String) => - Some("releases" at "https://oss.sonatype.org/service/local/staging/deploy/maven2") + Some("releases" at "https://oss.sonatype.org/service/local/staging/deploy/maven2") } pomExtra := ( @@ -36,15 +36,13 @@ pomExtra := ( ) -(resources in Compile) := {(resources in Compile).value ++ (baseDirectory.value * "*.ts").get} - -resolvers += "spray repo" at "http://repo.spray.io" +(resources in Compile) := {(resources in Compile).value ++ (baseDirectory.value * "*.js").get} resolvers += "typesafe" at "http://repo.typesafe.com/typesafe/releases/" libraryDependencies ++= Seq( - "io.spray" % "spray-can" % "1.3.0", - "io.spray" % "spray-routing" % "1.3.0", + "io.spray" % "spray-can" % "1.3.1", + "io.spray" % "spray-routing" % "1.3.1", "com.typesafe.akka" %% "akka-actor" % "2.3.0", "com.typesafe.play" %% "play-json" % "2.2.2" ) diff --git a/readme.md b/readme.md index 13148fb..4cf43ed 100644 --- a/readme.md +++ b/readme.md @@ -15,7 +15,7 @@ To Use ------ - Clone this from Github into a local directory -- Add a `addSbtPlugin("com.lihaoyi" % "workbench" % "0.1.1")` to your `project/build.sbt` +- Add a `addSbtPlugin("com.lihaoyi" % "workbench" % "0.1.2")` to your `project/build.sbt` - Add `workbenchSettings` to your project settings in `build.sbt`: ```scala diff --git a/workbench_template.js b/workbench_template.js new file mode 100644 index 0000000..f9c016c --- /dev/null +++ b/workbench_template.js @@ -0,0 +1,69 @@ +(function(){ + var shadowBody = null + var bootSnippet = "" + window.onload = function(){ + shadowBody = document.body.cloneNode(true) + } + window.addEventListener("keydown", function (event) { + if(event.keyCode==13 && event.ctrlKey && event.altKey && event.shiftKey) { + clear() + eval(bootSnippet) + } + }) + function clear(){ + document.body = shadowBody.cloneNode(true) + for(var i = 0; i < 99999; i++){ + clearTimeout(i) + clearInterval(i) + } + } + + var start = function(){ + var req = new XMLHttpRequest() + + req.open("POST", "http://:/notifications") + + req.onload = function(){ + if (req.status != 200){ + setTimeout(function(){start()}, 1000) + }else{ + var dataList = JSON.parse(req.responseText) + for(var i = 0; i < dataList.length; i++){ + + var data = dataList[i] + if (data[0] == "reload") { + console.log("Reloading page...") + location.reload() + } + if (data[0] == "clear"){ + clear() + } + if (data[0] == "run"){ + var tag = document.createElement("script") + var loaded = false + tag.setAttribute("src", "http://:" + data[1]) + var bootSnippet = data[2] + if (bootSnippet){ + tag.onreadystatechange = tag.onload = function() { + console.log("Post-run reboot") + if (!loaded) { + console.log("Post-run reboot go!") + eval(bootSnippet) + } + loaded = true + }; + } + document.head.appendChild(tag) + } + if (data[0] == "boot"){ + eval(bootSnippet) + } + if (data[0] == "print") console[data[1]](data[2]) + } + start() + } + } + req.send() + } + start() +})() diff --git a/workbench_template.ts b/workbench_template.ts deleted file mode 100644 index f9c016c..0000000 --- a/workbench_template.ts +++ /dev/null @@ -1,69 +0,0 @@ -(function(){ - var shadowBody = null - var bootSnippet = "" - window.onload = function(){ - shadowBody = document.body.cloneNode(true) - } - window.addEventListener("keydown", function (event) { - if(event.keyCode==13 && event.ctrlKey && event.altKey && event.shiftKey) { - clear() - eval(bootSnippet) - } - }) - function clear(){ - document.body = shadowBody.cloneNode(true) - for(var i = 0; i < 99999; i++){ - clearTimeout(i) - clearInterval(i) - } - } - - var start = function(){ - var req = new XMLHttpRequest() - - req.open("POST", "http://:/notifications") - - req.onload = function(){ - if (req.status != 200){ - setTimeout(function(){start()}, 1000) - }else{ - var dataList = JSON.parse(req.responseText) - for(var i = 0; i < dataList.length; i++){ - - var data = dataList[i] - if (data[0] == "reload") { - console.log("Reloading page...") - location.reload() - } - if (data[0] == "clear"){ - clear() - } - if (data[0] == "run"){ - var tag = document.createElement("script") - var loaded = false - tag.setAttribute("src", "http://:" + data[1]) - var bootSnippet = data[2] - if (bootSnippet){ - tag.onreadystatechange = tag.onload = function() { - console.log("Post-run reboot") - if (!loaded) { - console.log("Post-run reboot go!") - eval(bootSnippet) - } - loaded = true - }; - } - document.head.appendChild(tag) - } - if (data[0] == "boot"){ - eval(bootSnippet) - } - if (data[0] == "print") console[data[1]](data[2]) - } - start() - } - } - req.send() - } - start() -})() -- cgit v1.2.3