Commit cc58433d authored by Mathieu leclaire's avatar Mathieu leclaire

First commit

parents
*.log
target/
target/*
*.orig
build
build/*
dist
dist/*
private
private/*
release/
release/*
*.iml
*.ipr
*.iws
*.iml
.idea/
.idea/*
*~
.project
.settings
*.bak
*.js
project ser
exit
set offline in Global := true
exit
clean
exit
clean
exit
# ServerTest #
## Build & Run ##
```sh
$ cd ServerTest
$ ./sbt
> container:start
> browse
```
If `browse` doesn't launch your browser, manually open [http://localhost:8080/](http://localhost:8080/) in your browser.
import sbt._
import Keys._
import org.scalatra.sbt._
import org.scalatra.sbt.PluginKeys._
import com.mojolly.scalate.ScalatePlugin._
import ScalateKeys._
import fr.iscpif.jsmanager.JSManagerPlugin._
object ScalaTraJSTagsWireRxBuild extends Build {
val Organization = "fr.iscpif"
val Name = "ScalaTraJSTagsWireRx"
val Version = "0.1.0-SNAPSHOT"
val ScalaVersion = "2.11.1"
val ScalatraVersion = "2.3.0"
lazy val shared = project.in(file("./shared"))
.settings(scalaVersion := ScalaVersion)
lazy val ui = Project(
"ui",
file("./ui"),
settings = Defaults.defaultSettings ++ jsManagerSettings ++ Seq(
version := Version,
scalaVersion := ScalaVersion,
resolvers ++= Seq(Resolver.sonatypeRepo("snapshots"),
"Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"),
libraryDependencies ++= Seq(
"com.lihaoyi" %%% "autowire" % "0.1.2",
"com.scalatags" %%% "scalatags" % "0.3.8",
"com.scalarx" %%% "scalarx" % "0.2.5",
"fr.iscpif" %%% "scaladget" % "0.1.0-SNAPSHOT",
"org.scala-lang.modules.scalajs" %%% "scalajs-dom" % "0.6",
"org.scala-lang.modules.scalajs" %%% "scalajs-jquery" % "0.6",
"org.scala-lang.modules" %% "scala-async" % "0.9.2"
),
jsCall := "Plot().run();",
outputPath := "server/src/main/webapp/"
)
).dependsOn(shared)
lazy val server = Project(
"server",
file("./server"),
settings = Defaults.defaultSettings ++ ScalatraPlugin.scalatraWithJRebel ++ scalateSettings ++ jsManagerSettings ++ Seq(
organization := Organization,
name := Name,
version := Version,
scalaVersion := ScalaVersion,
resolvers ++= Seq(Resolver.sonatypeRepo("snapshots"),
"Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"),
libraryDependencies ++= Seq(
"com.lihaoyi" %%% "upickle" % "0.1.7",
"org.scala-lang.modules.scalajs" %%% "scalajs-dom" % "0.6",
"com.lihaoyi" %% "autowire" % "0.1.2",
"org.scalatra" %% "scalatra" % ScalatraVersion,
"org.scalatra" %% "scalatra-scalate" % ScalatraVersion,
"org.scalatra" %% "scalatra-specs2" % ScalatraVersion % "test",
"ch.qos.logback" % "logback-classic" % "1.0.6" % "runtime",
"org.eclipse.jetty" % "jetty-webapp" % "8.1.8.v20121106" % "container",
"org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "container;provided;test" artifacts (Artifact("javax.servlet", "jar", "jar"))
)
)
).dependsOn(shared)
}
sbt.version=0.13.1
resolvers ++= Seq(Resolver.sonatypeRepo("snapshots"),
Resolver.url("scala-js-releases",
url("http://dl.bintray.com/content/scala-js/scala-js-releases"))(
Resolver.ivyStylePatterns))
resolvers += "Typesafe repository" at
"http://repo.typesafe.com/typesafe/releases/"
addSbtPlugin("fr.iscpif" %% "jsmanager" % "0.1.0-SNAPSHOT")
addSbtPlugin("com.mojolly.scalate" % "xsbt-scalate-generator" % "0.4.2")
addSbtPlugin("org.scalatra.sbt" % "scalatra-sbt" % "0.3.5")
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>YYYYYYYYYYYYYYYYYY</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<link href="styles.css" rel="stylesheet"/>
<script type="text/javascript" src="target/scala-2.10/fake-opt.js"></script>
<script type="text/javascript" src="target/scala-2.10/fake-preopt.js"></script>
<script type="text/javascript" src="src/main/resources/js/d3.js"></script>
<script type="text/javascript" src="src/main/resources/js/cola.v3.min.js"></script>
</head>
<body>
</body>
<script>
Plot().main();
</script>
</html>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>
import fr.iscpif.app._
import org.scalatra._
import javax.servlet.ServletContext
import scala.concurrent.ExecutionContext.Implicits.global
//
class ScalatraBootstrap extends LifeCycle {
override def init(context: ServletContext) {
context.mount(new MyScalatraServlet, "/*")
}
}
package fr.iscpif.app
import org.scalatra._
import scala.concurrent.ExecutionContext.Implicits.global
import autowire._
import shared._
import scala.concurrent.duration._
import scala.concurrent.Await
object Server extends Api {
def hello(a: Int) = a * 3
}
class MyScalatraServlet extends ServertestStack {
get("/") {
contentType = "text/html"
jade("/default.jade")
}
post("/shared/Api/hello") {
Await.result(autowire.Macros.route[Web](Server)(
autowire.Request(Seq("shared", "Api", "hello"),
upickle.read[Map[String, String]](request.body))
),100.seconds)
}
}
package fr.iscpif.app
import org.scalatra._
import scalate.ScalateSupport
import org.fusesource.scalate.{ TemplateEngine, Binding }
import org.fusesource.scalate.layout.DefaultLayoutStrategy
import javax.servlet.http.HttpServletRequest
import collection.mutable
trait ServertestStack extends ScalatraServlet with ScalateSupport {
/* wire up the precompiled templates */
override protected def defaultTemplatePath: List[String] = List("/WEB-INF/templates/views")
override protected def createTemplateEngine(config: ConfigT) = {
val engine = super.createTemplateEngine(config)
engine.layoutStrategy = new DefaultLayoutStrategy(engine,
TemplateEngine.templateTypes.map("/WEB-INF/templates/layouts/default." + _): _*)
engine.packagePrefix = "templates"
engine
}
/* end wiring up the precompiled templates */
override protected def templateAttributes(implicit request: HttpServletRequest): mutable.Map[String, Any] = {
super.templateAttributes ++ mutable.Map.empty // Add extra attributes here, they need bindings in the build file
}
notFound {
// remove content type in case it was set through an action
contentType = null
// Try to render a ScalateTemplate if no route matched
findTemplate(requestPath) map { path =>
contentType = "text/html"
layoutTemplate(path)
} orElse serveStaticResource() getOrElse resourceNotFound()
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<!--
This listener loads a class in the default package called ScalatraBootstrap.
That class should implement org.scalatra.LifeCycle. Your app can be
configured in Scala code there.
-->
<listener>
<listener-class>org.scalatra.servlet.ScalatraListener</listener-class>
</listener>
</web-app>
This diff is collapsed.
html
head
meta(charset="utf-8")
link(rel="stylesheet" href="css/styles.css")
link(rel="stylesheet" href="css/bootstrap.min.css")
script( type="text/javascript" src="js/d3.v3.min.js")
script( type="text/javascript" src="js/jquery-2.1.1.min.js")
script(type="text/javascript" src="js/bootstrap.min.js")
script(type="text/javascript" src="js/ui-fastopt.js")
script(type="text/javascript" src="js/ui-opt.js")
body
script="Plot().run();"
\ No newline at end of file
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="css/bootstrap.min.css"/>
<script type="text/javascript" src="js/d3.v3.min.js"></script>
<script type="text/javascript" src="js/jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="js/bootstrap.min.js"></script>
<script type="text/javascript" src="js/ui-opt.js"></script>
<script type="text/javascript" src="js/ui-fastopt.js"></script>
</head>
<body>
<script>Plot().run();</script>
</body>
</html>
package fr.iscpif.app
import org.scalatra.test.specs2._
// For more on Specs2, see http://etorreborre.github.com/specs2/guide/org.specs2.guide.QuickStart.html
class MyScalatraServletSpec extends ScalatraSpec { def is =
"GET / on MyScalatraServlet" ^
"should return status 200" ! root200^
end
addServlet(classOf[MyScalatraServlet], "/*")
def root200 = get("/") {
status must_== 200
}
}
package shared
import scala.annotation.ClassfileAnnotation
class Web extends ClassfileAnnotation
@Web
trait Api {
def hello(a: Int): Int
}
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>YYYYYYYYYYYYYYYYYY</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<link href="styles.css" rel="stylesheet"/>
<script type="text/javascript" src="target/scala-2.10/fake-opt.js"></script>
<script type="text/javascript" src="target/scala-2.10/fake-preopt.js"></script>
<script type="text/javascript" src="src/main/resources/js/d3.js"></script>
<script type="text/javascript" src="src/main/resources/js/cola.v3.min.js"></script>
</head>
<body>
</body>
<script>
Plot().main();
</script>
</html>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>
package ui
import org.scalajs.dom
import org.scalajs.dom.{XMLHttpRequest, HTMLElement}
import scala.concurrent.duration._
import scala.concurrent.{Future, Await}
import scala.util.{Failure, Success}
import scalatags.JsDom._
import all._
import tags2.section
import rx._
import scala.scalajs.js.annotation.JSExport
import scala.scalajs.concurrent.JSExecutionContext.Implicits.runNow
import org.scalajs.dom.extensions.Ajax
import scala.Some
import shared._
import autowire._
import fr.iscpif.scaladget.JsRxTags._
@JSExport
object Plot {
val helloValue = Var(0)
@JSExport
def run() {
val submitButton = button("Click me")(
cursor := "pointer",
onclick := { () => Post[Api](_.hello(5)).foreach { i =>
helloValue() = helloValue() + i
}
false
}
).render
Rx {
dom.document.body.appendChild(submitButton)
dom.document.body.appendChild(h1(helloValue).render)
}
}
}
object Post extends autowire.Client[Web] {
override def callRequest(req: Request): Future[String] = {
val url = req.path.mkString("/")
dom.extensions.Ajax.post(
url = "http://localhost:8080/" + url,
data = upickle.write(req.args)
).map {
_.responseText
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment