summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorLi Haoyi <haoyi@dropbox.com>2014-11-02 00:30:33 -0700
committerLi Haoyi <haoyi@dropbox.com>2014-11-02 00:30:33 -0700
commitd00a2e25a9ee527fa39feb04c3137715501e9fda (patch)
tree250e6272708f3f346e2e91ef2f0b76eebfc953b3 /examples
parent00746e5c8d1d731d0a0cb581f3bddadde31d0d31 (diff)
downloadhands-on-scala-js-d00a2e25a9ee527fa39feb04c3137715501e9fda.tar.gz
hands-on-scala-js-d00a2e25a9ee527fa39feb04c3137715501e9fda.tar.bz2
hands-on-scala-js-d00a2e25a9ee527fa39feb04c3137715501e9fda.zip
Moved things into folders, sketched out a broad skeleton of the rest of the book
Diffstat (limited to 'examples')
-rw-r--r--examples/src/main/resources/webpage/weather.js17
-rw-r--r--examples/src/main/scala/webpage/Weather0.scala27
-rw-r--r--examples/src/main/scala/webpage/Weather1.scala30
-rw-r--r--examples/src/main/scala/webpage/Weather2.scala35
-rw-r--r--examples/src/main/scala/webpage/Weather3.scala55
-rw-r--r--examples/src/main/scala/webpage/WeatherSearch.scala90
6 files changed, 254 insertions, 0 deletions
diff --git a/examples/src/main/resources/webpage/weather.js b/examples/src/main/resources/webpage/weather.js
new file mode 100644
index 0000000..8e95305
--- /dev/null
+++ b/examples/src/main/resources/webpage/weather.js
@@ -0,0 +1,17 @@
+function WeatherJs(target) {
+ var xhr = new XMLHttpRequest()
+
+ xhr.open("GET",
+ "http://api.openweathermap.org/data/" +
+ "2.5/weather?q=Singapore"
+ );
+
+ xhr.onload = function (e) {
+ if (xhr.status == 200) {
+ var pre = document.createElement("pre");
+ pre.textContent = xhr.responseText;
+ target.appendChild(pre);
+ }
+ };
+ xhr.send();
+} \ No newline at end of file
diff --git a/examples/src/main/scala/webpage/Weather0.scala b/examples/src/main/scala/webpage/Weather0.scala
new file mode 100644
index 0000000..4a2c6f0
--- /dev/null
+++ b/examples/src/main/scala/webpage/Weather0.scala
@@ -0,0 +1,27 @@
+package webpage
+
+import org.scalajs.dom
+import org.scalajs.dom.{Node, Element}
+import scala.scalajs.js
+import scala.scalajs.js.annotation.JSExport
+import scalatags.JsDom.all._
+
+@JSExport
+object Weather0 extends{
+ @JSExport
+ def main(target: dom.HTMLDivElement) = {
+ val xhr = new dom.XMLHttpRequest()
+ xhr.open("GET",
+ "http://api.openweathermap.org/" +
+ "data/2.5/weather?q=Singapore"
+ )
+ xhr.onload = (e: dom.Event) => {
+ if (xhr.status == 200) {
+ target.appendChild(
+ pre(xhr.responseText).render
+ )
+ }
+ }
+ xhr.send()
+ }
+} \ No newline at end of file
diff --git a/examples/src/main/scala/webpage/Weather1.scala b/examples/src/main/scala/webpage/Weather1.scala
new file mode 100644
index 0000000..c509cb5
--- /dev/null
+++ b/examples/src/main/scala/webpage/Weather1.scala
@@ -0,0 +1,30 @@
+package webpage
+
+import org.scalajs.dom
+import org.scalajs.dom.{Node, Element}
+import scala.scalajs.js
+import scala.scalajs.js.annotation.JSExport
+import scalatags.JsDom.all._
+
+@JSExport
+object Weather1 extends{
+ @JSExport
+ def main(target: dom.HTMLDivElement) = {
+ import dom.extensions._
+ import scala.scalajs
+ .concurrent
+ .JSExecutionContext
+ .Implicits
+ .runNow
+
+ val url =
+ "http://api.openweathermap.org/" +
+ "data/2.5/weather?q=Singapore"
+
+ Ajax.get(url).onSuccess{ case xhr =>
+ target.appendChild(
+ pre(xhr.responseText).render
+ )
+ }
+ }
+} \ No newline at end of file
diff --git a/examples/src/main/scala/webpage/Weather2.scala b/examples/src/main/scala/webpage/Weather2.scala
new file mode 100644
index 0000000..aa04059
--- /dev/null
+++ b/examples/src/main/scala/webpage/Weather2.scala
@@ -0,0 +1,35 @@
+package webpage
+
+import org.scalajs.dom
+import org.scalajs.dom.{Node, Element}
+import scala.scalajs.js
+import scala.scalajs.js.annotation.JSExport
+import scalatags.JsDom.all._
+
+@JSExport
+object Weather2 extends{
+ @JSExport
+ def main(target: dom.HTMLDivElement) = {
+ import dom.extensions._
+ import scala.scalajs
+ .concurrent
+ .JSExecutionContext
+ .Implicits
+ .runNow
+
+ val url =
+ "http://api.openweathermap.org/" +
+ "data/2.5/weather?q=Singapore"
+
+ Ajax.get(url).onSuccess{ case xhr =>
+ target.appendChild(
+ pre(
+ js.JSON.stringify(
+ js.JSON.parse(xhr.responseText),
+ space=4
+ )
+ ).render
+ )
+ }
+ }
+} \ No newline at end of file
diff --git a/examples/src/main/scala/webpage/Weather3.scala b/examples/src/main/scala/webpage/Weather3.scala
new file mode 100644
index 0000000..4dadf94
--- /dev/null
+++ b/examples/src/main/scala/webpage/Weather3.scala
@@ -0,0 +1,55 @@
+package webpage
+
+import org.scalajs.dom
+import org.scalajs.dom.{Node, Element}
+import scala.scalajs.js
+import scala.scalajs.js.annotation.JSExport
+import scalatags.JsDom.all._
+
+@JSExport
+object Weather3 extends{
+ @JSExport
+ def main(target: dom.HTMLDivElement) = {
+ import dom.extensions._
+ import scala.scalajs
+ .concurrent
+ .JSExecutionContext
+ .Implicits
+ .runNow
+
+ val url =
+ "http://api.openweathermap.org/" +
+ "data/2.5/weather?q=Singapore"
+
+ Ajax.get(url).onSuccess{ case xhr =>
+ if (xhr.status == 200) {
+ val json = js.JSON.parse(
+ xhr.responseText
+ )
+ val name = json.name.toString
+ val weather = json.weather
+ .pop()
+ .main
+ .toString
+
+ def celsius(kelvins: js.Dynamic) = {
+ kelvins.asInstanceOf[Double] - 273.15
+ }.toInt
+ val min = celsius(json.main.temp_min)
+ val max = celsius(json.main.temp_max)
+ val humid = json.main.humidity.toString
+ target.appendChild(
+ div(
+ b("Weather in Singapore:"),
+ ul(
+ li(b("Country "), name),
+ li(b("Weather "), weather),
+ li(b("Temp "), min, " - ", max),
+ li(b("Humidity "), humid, "%")
+ )
+ ).render
+ )
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/examples/src/main/scala/webpage/WeatherSearch.scala b/examples/src/main/scala/webpage/WeatherSearch.scala
new file mode 100644
index 0000000..0c8acc9
--- /dev/null
+++ b/examples/src/main/scala/webpage/WeatherSearch.scala
@@ -0,0 +1,90 @@
+package webpage
+
+import org.scalajs.dom
+import dom.extensions._
+import scala.scalajs.concurrent.JSExecutionContext.Implicits.runNow
+import scala.scalajs.js
+import scala.scalajs.js.annotation.JSExport
+import scalatags.JsDom.all._
+
+@JSExport
+object WeatherSearch extends{
+ @JSExport
+ def main(target: dom.HTMLDivElement) = {
+
+ lazy val box = input(
+ `type`:="text",
+ placeholder:="Type here!"
+ ).render
+
+ lazy val output = div(
+ height:="400px",
+ overflowY:="scroll"
+ ).render
+
+ box.onkeyup = (e: dom.Event) => {
+ output.innerHTML = "Loading..."
+ fetchWeather(box.value)
+ }
+
+ target.appendChild(
+ div(
+ h1("Weather Search"),
+ p(
+ "Enter the name of a city to pull the ",
+ "latest weather data from api.openweathermap.com!"
+ ),
+ p(box),
+ hr, output, hr
+ ).render
+ )
+
+ def fetchWeather(query: String) = {
+ val searchUrl =
+ "http://api.openweathermap.org/data/" +
+ "2.5/find?type=like&mode=json&q=" +
+ query
+
+ for{
+ xhr <- Ajax.get(searchUrl)
+ if query == box.value
+ } js.JSON.parse(xhr.responseText).list match{
+ case jsonlist: js.Array[js.Dynamic] =>
+ output.innerHTML = ""
+ showResults(jsonlist, query)
+ case _ =>
+ output.innerHTML = "No Results"
+ }
+ }
+
+ def showResults(jsonlist: js.Array[js.Dynamic], query: String) = {
+ for (json <- jsonlist) {
+ val name = json.name.toString
+ val country = json.sys.country.toString
+ val weather = json.weather.pop().main.toString
+
+ def celsius(kelvins: js.Dynamic) = {
+ kelvins.asInstanceOf[Double] - 273.15
+ }.toInt
+
+ val min = celsius(json.main.temp_min)
+ val max = celsius(json.main.temp_max)
+ val humid = json.main.humidity.toString
+ val (first, last) = name.splitAt(query.length)
+ output.appendChild(
+ div(
+ b(span(first, backgroundColor:="yellow"), last, ", ", country),
+ ul(
+ li(b("Weather "), weather),
+ li(b("Temp "), min, " - ", max),
+ li(b("Humidity "), humid, "%")
+ )
+ ).render
+ )
+ }
+
+ }
+
+
+ }
+} \ No newline at end of file