From 3e92267b4f030f7bc7f0040fef50bd07e4709b21 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Wed, 4 Feb 2015 06:28:31 -0800 Subject: clientserver examples now work with crossProject --- .../app/js/src/main/scala/simple/Client.scala | 37 +++++++++++++++ .../app/jvm/src/main/scala/simple/Page.scala | 21 +++++++++ .../app/jvm/src/main/scala/simple/Server.scala | 46 ++++++++++++++++++ .../shared/src/main/scala/simple/FileData.scala | 3 ++ examples/crossBuilds/clientserver/build.sbt | 27 +++++------ .../client/shared/main/scala/simple/FileData.scala | 3 -- .../client/src/main/scala/simple/Client.scala | 36 --------------- .../crossBuilds/clientserver/project/build.sbt | 2 +- examples/crossBuilds/clientserver/server/shared | 1 - .../server/src/main/scala/simple/Page.scala | 21 --------- .../server/src/main/scala/simple/Server.scala | 46 ------------------ .../app/js/src/main/scala/simple/Client.scala | 47 +++++++++++++++++++ .../app/jvm/src/main/scala/simple/Page.scala | 21 +++++++++ .../app/jvm/src/main/scala/simple/Server.scala | 54 ++++++++++++++++++++++ .../app/shared/src/main/scala/simple/Shared.scala | 7 +++ examples/crossBuilds/clientserver2/build.sbt | 40 ++++++++-------- .../client/shared/main/scala/simple/Shared.scala | 7 --- .../client/src/main/scala/simple/Client.scala | 46 ------------------ .../crossBuilds/clientserver2/project/build.sbt | 2 +- examples/crossBuilds/clientserver2/server/shared | 1 - .../server/src/main/scala/simple/Page.scala | 21 --------- .../server/src/main/scala/simple/Server.scala | 54 ---------------------- examples/crossBuilds/simple/build.sbt | 15 +++--- .../js/shared/test/scala/simple/SimpleTest.scala | 20 ++++++++ .../simple/js/src/main/scala/simple/Platform.scala | 10 +--- .../jvm/src/main/scala/simple/Platform.scala | 10 +--- examples/crossBuilds/simple/project/build.sbt | 2 +- examples/crossBuilds/simple2/build.sbt | 12 ----- .../js/shared/main/scala/simple/Simple.scala | 7 --- .../js/shared/test/scala/simple/SimpleTest.scala | 20 -------- .../js/src/main/scala/simple/Platform.scala | 9 ---- examples/crossBuilds/simple2/jvm/shared | 1 - .../jvm/src/main/scala/simple/Platform.scala | 14 ------ .../crossBuilds/simple2/project/build.properties | 1 - examples/crossBuilds/simple2/project/build.sbt | 4 -- .../src/main/scala/scrollmenu/Controller.scala | 4 +- 36 files changed, 301 insertions(+), 371 deletions(-) create mode 100644 examples/crossBuilds/clientserver/app/js/src/main/scala/simple/Client.scala create mode 100644 examples/crossBuilds/clientserver/app/jvm/src/main/scala/simple/Page.scala create mode 100644 examples/crossBuilds/clientserver/app/jvm/src/main/scala/simple/Server.scala create mode 100644 examples/crossBuilds/clientserver/app/shared/src/main/scala/simple/FileData.scala delete mode 100644 examples/crossBuilds/clientserver/client/shared/main/scala/simple/FileData.scala delete mode 100644 examples/crossBuilds/clientserver/client/src/main/scala/simple/Client.scala delete mode 120000 examples/crossBuilds/clientserver/server/shared delete mode 100644 examples/crossBuilds/clientserver/server/src/main/scala/simple/Page.scala delete mode 100644 examples/crossBuilds/clientserver/server/src/main/scala/simple/Server.scala create mode 100644 examples/crossBuilds/clientserver2/app/js/src/main/scala/simple/Client.scala create mode 100644 examples/crossBuilds/clientserver2/app/jvm/src/main/scala/simple/Page.scala create mode 100644 examples/crossBuilds/clientserver2/app/jvm/src/main/scala/simple/Server.scala create mode 100644 examples/crossBuilds/clientserver2/app/shared/src/main/scala/simple/Shared.scala delete mode 100644 examples/crossBuilds/clientserver2/client/shared/main/scala/simple/Shared.scala delete mode 100644 examples/crossBuilds/clientserver2/client/src/main/scala/simple/Client.scala delete mode 120000 examples/crossBuilds/clientserver2/server/shared delete mode 100644 examples/crossBuilds/clientserver2/server/src/main/scala/simple/Page.scala delete mode 100644 examples/crossBuilds/clientserver2/server/src/main/scala/simple/Server.scala create mode 100644 examples/crossBuilds/simple/js/shared/test/scala/simple/SimpleTest.scala delete mode 100644 examples/crossBuilds/simple2/build.sbt delete mode 100644 examples/crossBuilds/simple2/js/shared/main/scala/simple/Simple.scala delete mode 100644 examples/crossBuilds/simple2/js/shared/test/scala/simple/SimpleTest.scala delete mode 100644 examples/crossBuilds/simple2/js/src/main/scala/simple/Platform.scala delete mode 120000 examples/crossBuilds/simple2/jvm/shared delete mode 100644 examples/crossBuilds/simple2/jvm/src/main/scala/simple/Platform.scala delete mode 100644 examples/crossBuilds/simple2/project/build.properties delete mode 100644 examples/crossBuilds/simple2/project/build.sbt diff --git a/examples/crossBuilds/clientserver/app/js/src/main/scala/simple/Client.scala b/examples/crossBuilds/clientserver/app/js/src/main/scala/simple/Client.scala new file mode 100644 index 0000000..7db2384 --- /dev/null +++ b/examples/crossBuilds/clientserver/app/js/src/main/scala/simple/Client.scala @@ -0,0 +1,37 @@ +package simple + +import scalatags.JsDom.all._ +import scalajs.concurrent.JSExecutionContext.Implicits.runNow +import org.scalajs.dom +import dom.html +import dom.ext.Ajax +import scalajs.js.annotation.JSExport + +@JSExport +object Client extends{ + @JSExport + def main(container: html.Div) = { + val inputBox = input.render + val outputBox = ul.render + def update() = Ajax.post("/ajax/list", inputBox.value).foreach{ xhr => + val data = upickle.read[Seq[FileData]](xhr.responseText) + outputBox.innerHTML = "" + for(FileData(name, size) <- data){ + outputBox.appendChild( + li( + b(name), " - ", size, " bytes" + ).render + ) + } + } + inputBox.onkeyup = (e: dom.Event) => update() + update() + container.appendChild( + div( + h1("File Search"), + inputBox, + outputBox + ).render + ) + } +} \ No newline at end of file diff --git a/examples/crossBuilds/clientserver/app/jvm/src/main/scala/simple/Page.scala b/examples/crossBuilds/clientserver/app/jvm/src/main/scala/simple/Page.scala new file mode 100644 index 0000000..27cf954 --- /dev/null +++ b/examples/crossBuilds/clientserver/app/jvm/src/main/scala/simple/Page.scala @@ -0,0 +1,21 @@ +package simple +import scalatags.Text.all._ + +object Page{ + val boot = + "simple.Client().main(document.getElementById('contents'))" + val skeleton = + html( + head( + script(src:="/appjs-fastopt.js"), + link( + rel:="stylesheet", + href:="https://cdnjs.cloudflare.com/ajax/libs/pure/0.5.0/pure-min.css" + ) + ), + body( + onload:=boot, + div(id:="contents") + ) + ) +} diff --git a/examples/crossBuilds/clientserver/app/jvm/src/main/scala/simple/Server.scala b/examples/crossBuilds/clientserver/app/jvm/src/main/scala/simple/Server.scala new file mode 100644 index 0000000..e9038b5 --- /dev/null +++ b/examples/crossBuilds/clientserver/app/jvm/src/main/scala/simple/Server.scala @@ -0,0 +1,46 @@ +package simple + +import akka.actor.ActorSystem +import spray.http.{HttpEntity, MediaTypes} +import spray.routing.SimpleRoutingApp + +import scala.util.Properties + +object Server extends SimpleRoutingApp{ + def main(args: Array[String]): Unit = { + implicit val system = ActorSystem() + val port = Properties.envOrElse("PORT", "8080").toInt + startServer("0.0.0.0", port = port){ + get{ + pathSingleSlash{ + complete{ + HttpEntity( + MediaTypes.`text/html`, + Page.skeleton.render + ) + } + } ~ + getFromResourceDirectory("") + } ~ + post{ + path("ajax" / "list"){ + extract(_.request.entity.asString) { e => + complete { + upickle.write(list(e)) + } + } + } + } + } + } + def list(path: String) = { + val (dir, last) = path.splitAt(path.lastIndexOf("/") + 1) + val files = + Option(new java.io.File("./" + dir).listFiles()) + .toSeq.flatten + for{ + f <- files + if f.getName.startsWith(last) + } yield FileData(f.getName, f.length()) + } +} \ No newline at end of file diff --git a/examples/crossBuilds/clientserver/app/shared/src/main/scala/simple/FileData.scala b/examples/crossBuilds/clientserver/app/shared/src/main/scala/simple/FileData.scala new file mode 100644 index 0000000..d3d2f91 --- /dev/null +++ b/examples/crossBuilds/clientserver/app/shared/src/main/scala/simple/FileData.scala @@ -0,0 +1,3 @@ +package simple + +case class FileData(name: String, size: Long) \ No newline at end of file diff --git a/examples/crossBuilds/clientserver/build.sbt b/examples/crossBuilds/clientserver/build.sbt index 94525ff..85c51fa 100644 --- a/examples/crossBuilds/clientserver/build.sbt +++ b/examples/crossBuilds/clientserver/build.sbt @@ -1,32 +1,27 @@ import NativePackagerKeys._ -val sharedSettings = Seq( + +val app = crossProject.settings( unmanagedSourceDirectories in Compile += baseDirectory.value / "shared" / "main" / "scala", libraryDependencies ++= Seq( "com.lihaoyi" %%% "scalatags" % "0.4.5", - "com.lihaoyi" %%% "upickle" % "0.2.7" + "com.lihaoyi" %%% "upickle" % "0.2.6" ), scalaVersion := "2.11.5" -) - -lazy val client = project.in(file("client")) - .enablePlugins(ScalaJSPlugin) - .settings(sharedSettings:_*) - .settings( +).jsSettings( libraryDependencies ++= Seq( "org.scala-js" %%% "scalajs-dom" % "0.8.0" ) -) - -lazy val server = project.in(file("server")) - .settings(sharedSettings:_*) - .settings(packageArchetype.java_application:_*) - .settings( +).jvmSettings( libraryDependencies ++= Seq( "io.spray" %% "spray-can" % "1.3.2", "io.spray" %% "spray-routing" % "1.3.2", "com.typesafe.akka" %% "akka-actor" % "2.3.6" - ), - (resources in Compile) += (fastOptJS in (client, Compile)).value.data + ) +) + +lazy val appJS = app.js +lazy val appJVM = app.jvm.settings( + (resources in Compile) += (fastOptJS in (appJS, Compile)).value.data ) diff --git a/examples/crossBuilds/clientserver/client/shared/main/scala/simple/FileData.scala b/examples/crossBuilds/clientserver/client/shared/main/scala/simple/FileData.scala deleted file mode 100644 index d3d2f91..0000000 --- a/examples/crossBuilds/clientserver/client/shared/main/scala/simple/FileData.scala +++ /dev/null @@ -1,3 +0,0 @@ -package simple - -case class FileData(name: String, size: Long) \ No newline at end of file diff --git a/examples/crossBuilds/clientserver/client/src/main/scala/simple/Client.scala b/examples/crossBuilds/clientserver/client/src/main/scala/simple/Client.scala deleted file mode 100644 index 63e891b..0000000 --- a/examples/crossBuilds/clientserver/client/src/main/scala/simple/Client.scala +++ /dev/null @@ -1,36 +0,0 @@ -package simple - -import scalatags.JsDom.all._ -import scalajs.concurrent.JSExecutionContext.Implicits.runNow -import org.scalajs.dom -import dom.extensions.Ajax -import scalajs.js.annotation.JSExport - -@JSExport -object Client extends{ - @JSExport - def main(container: html.Div) = { - val inputBox = input.render - val outputBox = ul.render - def update() = Ajax.post("/ajax/list", inputBox.value).foreach{ xhr => - val data = upickle.read[Seq[FileData]](xhr.responseText) - outputBox.innerHTML = "" - for(FileData(name, size) <- data){ - outputBox.appendChild( - li( - b(name), " - ", size, " bytes" - ).render - ) - } - } - inputBox.onkeyup = (e: dom.Event) => update() - update() - container.appendChild( - div( - h1("File Search"), - inputBox, - outputBox - ).render - ) - } -} \ No newline at end of file diff --git a/examples/crossBuilds/clientserver/project/build.sbt b/examples/crossBuilds/clientserver/project/build.sbt index 2336450..2e982c3 100644 --- a/examples/crossBuilds/clientserver/project/build.sbt +++ b/examples/crossBuilds/clientserver/project/build.sbt @@ -1,4 +1,4 @@ /*project/build.sbt*/ -addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.0-RC2") +addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.0") addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "0.7.4") diff --git a/examples/crossBuilds/clientserver/server/shared b/examples/crossBuilds/clientserver/server/shared deleted file mode 120000 index f32be42..0000000 --- a/examples/crossBuilds/clientserver/server/shared +++ /dev/null @@ -1 +0,0 @@ -../client/shared \ No newline at end of file diff --git a/examples/crossBuilds/clientserver/server/src/main/scala/simple/Page.scala b/examples/crossBuilds/clientserver/server/src/main/scala/simple/Page.scala deleted file mode 100644 index 19ed953..0000000 --- a/examples/crossBuilds/clientserver/server/src/main/scala/simple/Page.scala +++ /dev/null @@ -1,21 +0,0 @@ -package simple -import scalatags.Text.all._ - -object Page{ - val boot = - "simple.Client().main(document.getElementById('contents'))" - val skeleton = - html( - head( - script(src:="/client-fastopt.js"), - link( - rel:="stylesheet", - href:="https://cdnjs.cloudflare.com/ajax/libs/pure/0.5.0/pure-min.css" - ) - ), - body( - onload:=boot, - div(id:="contents") - ) - ) -} diff --git a/examples/crossBuilds/clientserver/server/src/main/scala/simple/Server.scala b/examples/crossBuilds/clientserver/server/src/main/scala/simple/Server.scala deleted file mode 100644 index e9038b5..0000000 --- a/examples/crossBuilds/clientserver/server/src/main/scala/simple/Server.scala +++ /dev/null @@ -1,46 +0,0 @@ -package simple - -import akka.actor.ActorSystem -import spray.http.{HttpEntity, MediaTypes} -import spray.routing.SimpleRoutingApp - -import scala.util.Properties - -object Server extends SimpleRoutingApp{ - def main(args: Array[String]): Unit = { - implicit val system = ActorSystem() - val port = Properties.envOrElse("PORT", "8080").toInt - startServer("0.0.0.0", port = port){ - get{ - pathSingleSlash{ - complete{ - HttpEntity( - MediaTypes.`text/html`, - Page.skeleton.render - ) - } - } ~ - getFromResourceDirectory("") - } ~ - post{ - path("ajax" / "list"){ - extract(_.request.entity.asString) { e => - complete { - upickle.write(list(e)) - } - } - } - } - } - } - def list(path: String) = { - val (dir, last) = path.splitAt(path.lastIndexOf("/") + 1) - val files = - Option(new java.io.File("./" + dir).listFiles()) - .toSeq.flatten - for{ - f <- files - if f.getName.startsWith(last) - } yield FileData(f.getName, f.length()) - } -} \ No newline at end of file diff --git a/examples/crossBuilds/clientserver2/app/js/src/main/scala/simple/Client.scala b/examples/crossBuilds/clientserver2/app/js/src/main/scala/simple/Client.scala new file mode 100644 index 0000000..8894262 --- /dev/null +++ b/examples/crossBuilds/clientserver2/app/js/src/main/scala/simple/Client.scala @@ -0,0 +1,47 @@ +package simple +import scalatags.JsDom.all._ +import org.scalajs.dom +import dom.html +import scalajs.js.annotation.JSExport +import scalajs.concurrent.JSExecutionContext.Implicits.runNow +import autowire._ + +object Ajaxer extends autowire.Client[String, upickle.Reader, upickle.Writer]{ + override def doCall(req: Request) = { + dom.ext.Ajax.post( + url = "/ajax/" + req.path.mkString("/"), + data = upickle.write(req.args) + ).map(_.responseText) + } + + def read[Result: upickle.Reader](p: String) = upickle.read[Result](p) + def write[Result: upickle.Writer](r: Result) = upickle.write(r) +} + +@JSExport +object Client extends{ + @JSExport + def main(container: html.Div) = { + val inputBox = input.render + val outputBox = ul.render + def update() = Ajaxer[Api].list(inputBox.value).call().foreach{ data => + outputBox.innerHTML = "" + for(FileData(name, size) <- data){ + outputBox.appendChild( + li( + b(name), " - ", size, " bytes" + ).render + ) + } + } + inputBox.onkeyup = (e: dom.Event) => update() + update() + container.appendChild( + div( + h1("File Search"), + inputBox, + outputBox + ).render + ) + } +} \ No newline at end of file diff --git a/examples/crossBuilds/clientserver2/app/jvm/src/main/scala/simple/Page.scala b/examples/crossBuilds/clientserver2/app/jvm/src/main/scala/simple/Page.scala new file mode 100644 index 0000000..c04107b --- /dev/null +++ b/examples/crossBuilds/clientserver2/app/jvm/src/main/scala/simple/Page.scala @@ -0,0 +1,21 @@ +package simple +import scalatags.Text.all._ + +object Page{ + val boot = + "simple.Client().main(document.getElementById('contents'))" + val skeleton = + html( + head( + script(src:="/appjs-fastopt.js"), + link( + rel:="stylesheet", + href:="http://yui.yahooapis.com/pure/0.5.0/pure-min.css" + ) + ), + body( + onload:=boot, + div(id:="contents") + ) + ) +} diff --git a/examples/crossBuilds/clientserver2/app/jvm/src/main/scala/simple/Server.scala b/examples/crossBuilds/clientserver2/app/jvm/src/main/scala/simple/Server.scala new file mode 100644 index 0000000..8967c17 --- /dev/null +++ b/examples/crossBuilds/clientserver2/app/jvm/src/main/scala/simple/Server.scala @@ -0,0 +1,54 @@ +package simple + +import akka.actor.ActorSystem +import spray.http.{HttpEntity, MediaTypes} +import spray.routing.SimpleRoutingApp +import scala.concurrent.ExecutionContext.Implicits.global + +object Router extends autowire.Server[String, upickle.Reader, upickle.Writer]{ + def read[Result: upickle.Reader](p: String) = upickle.read[Result](p) + def write[Result: upickle.Writer](r: Result) = upickle.write(r) +} + +object Server extends SimpleRoutingApp with Api{ + def main(args: Array[String]): Unit = { + implicit val system = ActorSystem() + startServer("localhost", port = 8080){ + get{ + pathSingleSlash{ + complete{ + HttpEntity( + MediaTypes.`text/html`, + Page.skeleton.render + ) + } + } ~ + getFromResourceDirectory("") + } ~ + post{ + path("ajax" / Segments){ s => + extract(_.request.entity.asString) { e => + complete { + Router.route[Api](Server)( + autowire.Core.Request( + s, + upickle.read[Map[String, String]](e) + ) + ) + } + } + } + } + } + } + def list(path: String) = { + val (dir, last) = path.splitAt(path.lastIndexOf("/") + 1) + val files = + Option(new java.io.File("./" + dir).listFiles()) + .toSeq.flatten + for{ + f <- files + if f.getName.startsWith(last) + } yield FileData(f.getName, f.length()) + } +} \ No newline at end of file diff --git a/examples/crossBuilds/clientserver2/app/shared/src/main/scala/simple/Shared.scala b/examples/crossBuilds/clientserver2/app/shared/src/main/scala/simple/Shared.scala new file mode 100644 index 0000000..c7b17b7 --- /dev/null +++ b/examples/crossBuilds/clientserver2/app/shared/src/main/scala/simple/Shared.scala @@ -0,0 +1,7 @@ +package simple + +case class FileData(name: String, size: Long) + +trait Api{ + def list(path: String): Seq[FileData] +} \ No newline at end of file diff --git a/examples/crossBuilds/clientserver2/build.sbt b/examples/crossBuilds/clientserver2/build.sbt index c5c020c..c01f12b 100644 --- a/examples/crossBuilds/clientserver2/build.sbt +++ b/examples/crossBuilds/clientserver2/build.sbt @@ -1,31 +1,27 @@ -val sharedSettings = Seq( +val app = crossProject.settings( unmanagedSourceDirectories in Compile += baseDirectory.value / "shared" / "main" / "scala", libraryDependencies ++= Seq( - "com.lihaoyi" %%% "scalatags" % "0.4.3-RC1", - "com.lihaoyi" %%% "upickle" % "0.2.6-RC1", - "com.lihaoyi" %%% "autowire" % "0.2.4-RC1" + "com.lihaoyi" %%% "scalatags" % "0.4.5", + "com.lihaoyi" %%% "upickle" % "0.2.6", + "com.lihaoyi" %%% "autowire" % "0.2.4" ), scalaVersion := "2.11.5" -) - -lazy val client = project.in(file("client")) - .enablePlugins(ScalaJSPlugin) - .settings(sharedSettings:_*) - .settings( - libraryDependencies ++= Seq( - "org.scala-js" %%% "scalajs-dom" % "0.7.0" +).jsSettings( + libraryDependencies ++= Seq( + "org.scala-js" %%% "scalajs-dom" % "0.8.0" + ) + ).jvmSettings( + libraryDependencies ++= Seq( + "io.spray" %% "spray-can" % "1.3.2", + "io.spray" %% "spray-routing" % "1.3.2", + "com.typesafe.akka" %% "akka-actor" % "2.3.6" + ) ) -) -lazy val server = project.in(file("server")) - .settings(sharedSettings:_*) - .settings( - libraryDependencies ++= Seq( - "io.spray" %% "spray-can" % "1.3.2", - "io.spray" %% "spray-routing" % "1.3.2", - "com.typesafe.akka" %% "akka-actor" % "2.3.6" - ), - (resources in Compile) += (fastOptJS in (client, Compile)).value.data +lazy val appJS = app.js +lazy val appJVM = app.jvm.settings( + (resources in Compile) += (fastOptJS in (appJS, Compile)).value.data ) + diff --git a/examples/crossBuilds/clientserver2/client/shared/main/scala/simple/Shared.scala b/examples/crossBuilds/clientserver2/client/shared/main/scala/simple/Shared.scala deleted file mode 100644 index c7b17b7..0000000 --- a/examples/crossBuilds/clientserver2/client/shared/main/scala/simple/Shared.scala +++ /dev/null @@ -1,7 +0,0 @@ -package simple - -case class FileData(name: String, size: Long) - -trait Api{ - def list(path: String): Seq[FileData] -} \ No newline at end of file diff --git a/examples/crossBuilds/clientserver2/client/src/main/scala/simple/Client.scala b/examples/crossBuilds/clientserver2/client/src/main/scala/simple/Client.scala deleted file mode 100644 index af3ea91..0000000 --- a/examples/crossBuilds/clientserver2/client/src/main/scala/simple/Client.scala +++ /dev/null @@ -1,46 +0,0 @@ -package simple -import scalatags.JsDom.all._ -import org.scalajs.dom -import scalajs.js.annotation.JSExport -import scalajs.concurrent.JSExecutionContext.Implicits.runNow -import autowire._ - -object Ajaxer extends autowire.Client[String, upickle.Reader, upickle.Writer]{ - override def doCall(req: Request) = { - dom.extensions.Ajax.post( - url = "/ajax/" + req.path.mkString("/"), - data = upickle.write(req.args) - ).map(_.responseText) - } - - def read[Result: upickle.Reader](p: String) = upickle.read[Result](p) - def write[Result: upickle.Writer](r: Result) = upickle.write(r) -} - -@JSExport -object Client extends{ - @JSExport - def main(container: html.Div) = { - val inputBox = input.render - val outputBox = ul.render - def update() = Ajaxer[Api].list(inputBox.value).call().foreach{ data => - outputBox.innerHTML = "" - for(FileData(name, size) <- data){ - outputBox.appendChild( - li( - b(name), " - ", size, " bytes" - ).render - ) - } - } - inputBox.onkeyup = (e: dom.Event) => update() - update() - container.appendChild( - div( - h1("File Search"), - inputBox, - outputBox - ).render - ) - } -} \ No newline at end of file diff --git a/examples/crossBuilds/clientserver2/project/build.sbt b/examples/crossBuilds/clientserver2/project/build.sbt index f969143..d523658 100644 --- a/examples/crossBuilds/clientserver2/project/build.sbt +++ b/examples/crossBuilds/clientserver2/project/build.sbt @@ -1,3 +1,3 @@ /*project/build.sbt*/ -addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.0-RC2") +addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.0") diff --git a/examples/crossBuilds/clientserver2/server/shared b/examples/crossBuilds/clientserver2/server/shared deleted file mode 120000 index f32be42..0000000 --- a/examples/crossBuilds/clientserver2/server/shared +++ /dev/null @@ -1 +0,0 @@ -../client/shared \ No newline at end of file diff --git a/examples/crossBuilds/clientserver2/server/src/main/scala/simple/Page.scala b/examples/crossBuilds/clientserver2/server/src/main/scala/simple/Page.scala deleted file mode 100644 index 9b21b5a..0000000 --- a/examples/crossBuilds/clientserver2/server/src/main/scala/simple/Page.scala +++ /dev/null @@ -1,21 +0,0 @@ -package simple -import scalatags.Text.all._ - -object Page{ - val boot = - "simple.Client().main(document.getElementById('contents'))" - val skeleton = - html( - head( - script(src:="/client-fastopt.js"), - link( - rel:="stylesheet", - href:="http://yui.yahooapis.com/pure/0.5.0/pure-min.css" - ) - ), - body( - onload:=boot, - div(id:="contents") - ) - ) -} diff --git a/examples/crossBuilds/clientserver2/server/src/main/scala/simple/Server.scala b/examples/crossBuilds/clientserver2/server/src/main/scala/simple/Server.scala deleted file mode 100644 index 8967c17..0000000 --- a/examples/crossBuilds/clientserver2/server/src/main/scala/simple/Server.scala +++ /dev/null @@ -1,54 +0,0 @@ -package simple - -import akka.actor.ActorSystem -import spray.http.{HttpEntity, MediaTypes} -import spray.routing.SimpleRoutingApp -import scala.concurrent.ExecutionContext.Implicits.global - -object Router extends autowire.Server[String, upickle.Reader, upickle.Writer]{ - def read[Result: upickle.Reader](p: String) = upickle.read[Result](p) - def write[Result: upickle.Writer](r: Result) = upickle.write(r) -} - -object Server extends SimpleRoutingApp with Api{ - def main(args: Array[String]): Unit = { - implicit val system = ActorSystem() - startServer("localhost", port = 8080){ - get{ - pathSingleSlash{ - complete{ - HttpEntity( - MediaTypes.`text/html`, - Page.skeleton.render - ) - } - } ~ - getFromResourceDirectory("") - } ~ - post{ - path("ajax" / Segments){ s => - extract(_.request.entity.asString) { e => - complete { - Router.route[Api](Server)( - autowire.Core.Request( - s, - upickle.read[Map[String, String]](e) - ) - ) - } - } - } - } - } - } - def list(path: String) = { - val (dir, last) = path.splitAt(path.lastIndexOf("/") + 1) - val files = - Option(new java.io.File("./" + dir).listFiles()) - .toSeq.flatten - for{ - f <- files - if f.getName.startsWith(last) - } yield FileData(f.getName, f.length()) - } -} \ No newline at end of file diff --git a/examples/crossBuilds/simple/build.sbt b/examples/crossBuilds/simple/build.sbt index ce296c4..eb22c41 100644 --- a/examples/crossBuilds/simple/build.sbt +++ b/examples/crossBuilds/simple/build.sbt @@ -1,9 +1,12 @@ -val sharedSettings = Seq( - unmanagedSourceDirectories in Compile += - baseDirectory.value / "shared" / "main" / "scala" + +val cross = crossProject.settings( + // Shared settings here +).jsSettings( + // JS-specific settings here +).jvmSettings( + // JVM-specific settings here ) -lazy val js = project.in(file("js")).enablePlugins(ScalaJSPlugin) - .settings(sharedSettings:_*) +lazy val js = cross.js -lazy val jvm = project.in(file("jvm")).settings(sharedSettings:_*) \ No newline at end of file +lazy val jvm = cross.jvm diff --git a/examples/crossBuilds/simple/js/shared/test/scala/simple/SimpleTest.scala b/examples/crossBuilds/simple/js/shared/test/scala/simple/SimpleTest.scala new file mode 100644 index 0000000..b348c6f --- /dev/null +++ b/examples/crossBuilds/simple/js/shared/test/scala/simple/SimpleTest.scala @@ -0,0 +1,20 @@ +/*js/shared/test/scala/simple/SimpleTest.scala*/ +/*jvm/shared/test/scala/simple/SimpleTest.scala*/ +package simple +import utest._ +object SimpleTest extends TestSuite{ + val tests = TestSuite{ + 'format{ + 'nil - assert(Simple.formatTimes(Nil) == Nil) + 'timeZero - { + val timestamps = Seq(0L, 1L << 32) + val expected = Seq( + "1970-01-01T00:00:00", + "1970-02-19T17:02:47" + ) + val formatted = Simple.formatTimes(timestamps) + assert(formatted == expected) + } + } + } +} \ No newline at end of file diff --git a/examples/crossBuilds/simple/js/src/main/scala/simple/Platform.scala b/examples/crossBuilds/simple/js/src/main/scala/simple/Platform.scala index d726ec1..d4a9554 100644 --- a/examples/crossBuilds/simple/js/src/main/scala/simple/Platform.scala +++ b/examples/crossBuilds/simple/js/src/main/scala/simple/Platform.scala @@ -2,16 +2,8 @@ package simple import scalajs.js -object Platform extends js.JSApp{ +object Platform{ def format(ts: Long) = { new js.Date(ts).toISOString() } - def main() = { - val times = Seq( - 0L, - 1L << 32 - ) - println("Running on JS! " + 1.0d) - println(Simple.formatTimes(times)) - } } \ No newline at end of file diff --git a/examples/crossBuilds/simple/jvm/src/main/scala/simple/Platform.scala b/examples/crossBuilds/simple/jvm/src/main/scala/simple/Platform.scala index c5e8216..4713005 100644 --- a/examples/crossBuilds/simple/jvm/src/main/scala/simple/Platform.scala +++ b/examples/crossBuilds/simple/jvm/src/main/scala/simple/Platform.scala @@ -1,7 +1,7 @@ //jvm/src/main/scala/simple/Platform.scala package simple import java.text.SimpleDateFormat -import java.util.{TimeZone, Locale} +import java.util.TimeZone object Platform{ def format(ts: Long) = { @@ -11,12 +11,4 @@ object Platform{ fmt.setTimeZone(TimeZone.getTimeZone("UTC")) fmt.format(new java.util.Date(ts)) } - def main(args: Array[String]) = { - val times = Seq( - 0L, - 1L << 32 - ) - println("Running on JVM! " + 1.0d) - println(Simple.formatTimes(times)) - } } \ No newline at end of file diff --git a/examples/crossBuilds/simple/project/build.sbt b/examples/crossBuilds/simple/project/build.sbt index b42401a..3175002 100644 --- a/examples/crossBuilds/simple/project/build.sbt +++ b/examples/crossBuilds/simple/project/build.sbt @@ -1,2 +1,2 @@ /*project/build.sbt*/ -addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.0-RC2") +addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.0") diff --git a/examples/crossBuilds/simple2/build.sbt b/examples/crossBuilds/simple2/build.sbt deleted file mode 100644 index eb22c41..0000000 --- a/examples/crossBuilds/simple2/build.sbt +++ /dev/null @@ -1,12 +0,0 @@ - -val cross = crossProject.settings( - // Shared settings here -).jsSettings( - // JS-specific settings here -).jvmSettings( - // JVM-specific settings here -) - -lazy val js = cross.js - -lazy val jvm = cross.jvm diff --git a/examples/crossBuilds/simple2/js/shared/main/scala/simple/Simple.scala b/examples/crossBuilds/simple2/js/shared/main/scala/simple/Simple.scala deleted file mode 100644 index 4ed0285..0000000 --- a/examples/crossBuilds/simple2/js/shared/main/scala/simple/Simple.scala +++ /dev/null @@ -1,7 +0,0 @@ -/*shared/main/scala/simple/Simple.scala*/ -package simple -object Simple{ - def formatTimes(timestamps: Seq[Long]): Seq[String] = { - timestamps.map(Platform.format).map(_.dropRight(5)) - } -} \ No newline at end of file diff --git a/examples/crossBuilds/simple2/js/shared/test/scala/simple/SimpleTest.scala b/examples/crossBuilds/simple2/js/shared/test/scala/simple/SimpleTest.scala deleted file mode 100644 index b348c6f..0000000 --- a/examples/crossBuilds/simple2/js/shared/test/scala/simple/SimpleTest.scala +++ /dev/null @@ -1,20 +0,0 @@ -/*js/shared/test/scala/simple/SimpleTest.scala*/ -/*jvm/shared/test/scala/simple/SimpleTest.scala*/ -package simple -import utest._ -object SimpleTest extends TestSuite{ - val tests = TestSuite{ - 'format{ - 'nil - assert(Simple.formatTimes(Nil) == Nil) - 'timeZero - { - val timestamps = Seq(0L, 1L << 32) - val expected = Seq( - "1970-01-01T00:00:00", - "1970-02-19T17:02:47" - ) - val formatted = Simple.formatTimes(timestamps) - assert(formatted == expected) - } - } - } -} \ No newline at end of file diff --git a/examples/crossBuilds/simple2/js/src/main/scala/simple/Platform.scala b/examples/crossBuilds/simple2/js/src/main/scala/simple/Platform.scala deleted file mode 100644 index d4a9554..0000000 --- a/examples/crossBuilds/simple2/js/src/main/scala/simple/Platform.scala +++ /dev/null @@ -1,9 +0,0 @@ -//js/src/main/scala/simple/Platform.scala -package simple -import scalajs.js - -object Platform{ - def format(ts: Long) = { - new js.Date(ts).toISOString() - } -} \ No newline at end of file diff --git a/examples/crossBuilds/simple2/jvm/shared b/examples/crossBuilds/simple2/jvm/shared deleted file mode 120000 index a12df7d..0000000 --- a/examples/crossBuilds/simple2/jvm/shared +++ /dev/null @@ -1 +0,0 @@ -../js/shared \ No newline at end of file diff --git a/examples/crossBuilds/simple2/jvm/src/main/scala/simple/Platform.scala b/examples/crossBuilds/simple2/jvm/src/main/scala/simple/Platform.scala deleted file mode 100644 index 4713005..0000000 --- a/examples/crossBuilds/simple2/jvm/src/main/scala/simple/Platform.scala +++ /dev/null @@ -1,14 +0,0 @@ -//jvm/src/main/scala/simple/Platform.scala -package simple -import java.text.SimpleDateFormat -import java.util.TimeZone - -object Platform{ - def format(ts: Long) = { - val fmt = new SimpleDateFormat( - "yyyy-MM-dd'T'HH:mm:ss.sss'Z'" - ) - fmt.setTimeZone(TimeZone.getTimeZone("UTC")) - fmt.format(new java.util.Date(ts)) - } -} \ No newline at end of file diff --git a/examples/crossBuilds/simple2/project/build.properties b/examples/crossBuilds/simple2/project/build.properties deleted file mode 100644 index 748703f..0000000 --- a/examples/crossBuilds/simple2/project/build.properties +++ /dev/null @@ -1 +0,0 @@ -sbt.version=0.13.7 diff --git a/examples/crossBuilds/simple2/project/build.sbt b/examples/crossBuilds/simple2/project/build.sbt deleted file mode 100644 index a1be3f8..0000000 --- a/examples/crossBuilds/simple2/project/build.sbt +++ /dev/null @@ -1,4 +0,0 @@ -/*project/build.sbt*/ -addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.0-RC2") - -addSbtPlugin("com.lihaoyi" % "utest-js-plugin" % "0.2.5-RC1") diff --git a/examples/demos/src/main/scala/scrollmenu/Controller.scala b/examples/demos/src/main/scala/scrollmenu/Controller.scala index b4e9b3b..4627837 100644 --- a/examples/demos/src/main/scala/scrollmenu/Controller.scala +++ b/examples/demos/src/main/scala/scrollmenu/Controller.scala @@ -74,8 +74,8 @@ object Controller{ menuLink.classList.toggle("active") } -// main.onscroll = (e: dom.UIEvent) => updateScroll() -// updateScroll() + main.onscroll = (e: dom.UIEvent) => updateScroll() + updateScroll() } } -- cgit v1.2.3