summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorLi Haoyi <haoyi@dropbox.com>2014-11-26 03:31:52 -0800
committerLi Haoyi <haoyi@dropbox.com>2014-11-26 03:31:52 -0800
commit0ae3b5b47a7e1a3a8ae31817bc7b10ca9c054f54 (patch)
tree8f05bf9c9be4640ec4ea005538f2340cae5ee3fc /examples
parentca124817c53d50dc81c7817d37f3c5fc08e0c565 (diff)
downloadhands-on-scala-js-0ae3b5b47a7e1a3a8ae31817bc7b10ca9c054f54.tar.gz
hands-on-scala-js-0ae3b5b47a7e1a3a8ae31817bc7b10ca9c054f54.tar.bz2
hands-on-scala-js-0ae3b5b47a7e1a3a8ae31817bc7b10ca9c054f54.zip
fix all the problems
Diffstat (limited to 'examples')
-rw-r--r--examples/demos/src/main/scala/advanced/Async.scala8
-rw-r--r--examples/demos/src/main/scala/scrollmenu/Controller.scala89
-rw-r--r--examples/demos/src/main/scala/scrollmenu/ScrollMenu.scala18
3 files changed, 59 insertions, 56 deletions
diff --git a/examples/demos/src/main/scala/advanced/Async.scala b/examples/demos/src/main/scala/advanced/Async.scala
index 481e80e..c4d7366 100644
--- a/examples/demos/src/main/scala/advanced/Async.scala
+++ b/examples/demos/src/main/scala/advanced/Async.scala
@@ -29,11 +29,11 @@ object Async {
type ME = dom.MouseEvent
val mousemove =
- Channel[ME](canvas.onmousemove = _)
+ new Channel[ME](canvas.onmousemove = _)
val mouseup =
- Channel[ME](canvas.onmouseup = _)
+ new Channel[ME](canvas.onmouseup = _)
val mousedown =
- Channel[ME](canvas.onmousedown = _)
+ new Channel[ME](canvas.onmousedown = _)
async{
while(true){
@@ -99,7 +99,7 @@ object Async {
}
}
-case class Channel[T](init: (T => Unit) => Unit){
+class Channel[T](init: (T => Unit) => Unit){
init(update)
private[this] var value: Promise[T] = null
def apply(): Future[T] = {
diff --git a/examples/demos/src/main/scala/scrollmenu/Controller.scala b/examples/demos/src/main/scala/scrollmenu/Controller.scala
index 4480445..7fd8c90 100644
--- a/examples/demos/src/main/scala/scrollmenu/Controller.scala
+++ b/examples/demos/src/main/scala/scrollmenu/Controller.scala
@@ -28,53 +28,52 @@ object Controller{
val snippets = dom.document.getElementsByClassName("highlight-me")
snippets.foreach(js.Dynamic.global.hljs.highlightBlock(_))
- def rest() = {
- val scrollSpy = new ScrollSpy(structure, main)
- val list = ul(cls := "menu-item-list collapsed")(
- scrollSpy.domTrees.map(_.value.frag)
+
+ val scrollSpy = new ScrollSpy(structure, main)
+ val list = ul(cls := "menu-item-list collapsed")(
+ scrollSpy.domTrees.map(_.value.frag)
+ ).render
+
+ def updateScroll() = scrollSpy()
+ val expandIcon = i(cls := "fa fa-caret-down").render
+ val expandLink =
+ a(
+ expandIcon,
+ href := "javascript:",
+ marginLeft := "0px",
+ paddingLeft := "15px",
+ paddingRight := "15px",
+ position.absolute,
+ top := "0px",
+ right := "0px",
+ cls := "pure-menu-selected",
+ onclick := { (e: dom.Event) =>
+ expandIcon.classList.toggle("fa-caret-down")
+ expandIcon.classList.toggle("fa-caret-up")
+ list.classList.toggle("collapsed")
+ scrollSpy.clean = !scrollSpy.clean
+ updateScroll()
+ }
+ ).render
+
+
+ menu.appendChild(
+ div(cls := "pure-menu pure-menu-open")(
+ a(cls := "pure-menu-heading")(
+ "Contents", expandLink
+ ),
+ list
).render
+ )
- def updateScroll() = scrollSpy()
- val expandIcon = i(cls := "fa fa-caret-down").render
- val expandLink =
- a(
- expandIcon,
- href := "javascript:",
- marginLeft := "0px",
- paddingLeft := "15px",
- paddingRight := "15px",
- position.absolute,
- top := "0px",
- right := "0px",
- cls := "pure-menu-selected",
- onclick := { (e: dom.Event) =>
- expandIcon.classList.toggle("fa-caret-down")
- expandIcon.classList.toggle("fa-caret-up")
- list.classList.toggle("collapsed")
- scrollSpy.clean = !scrollSpy.clean
- updateScroll()
- }
- ).render
-
-
- menu.appendChild(
- div(cls := "pure-menu pure-menu-open")(
- a(cls := "pure-menu-heading")(
- "Contents", expandLink
- ),
- list
- ).render
- )
-
- menuLink.onclick = (e: dom.MouseEvent) => {
- layout.classList.toggle("active")
- menu.classList.toggle("active")
- menuLink.classList.toggle("active")
- }
-
- main.onscroll = (e: dom.UIEvent) => updateScroll()
- updateScroll()
+ menuLink.onclick = (e: dom.MouseEvent) => {
+ layout.classList.toggle("active")
+ menu.classList.toggle("active")
+ menuLink.classList.toggle("active")
}
- dom.setTimeout(rest _, 10)
+
+ main.onscroll = (e: dom.UIEvent) => updateScroll()
+ updateScroll()
+
}
}
diff --git a/examples/demos/src/main/scala/scrollmenu/ScrollMenu.scala b/examples/demos/src/main/scala/scrollmenu/ScrollMenu.scala
index 9ce9a2b..7d718e2 100644
--- a/examples/demos/src/main/scala/scrollmenu/ScrollMenu.scala
+++ b/examples/demos/src/main/scala/scrollmenu/ScrollMenu.scala
@@ -61,13 +61,15 @@ class ScrollSpy(structure: Tree[String],
}
- private[this] var scrolling = -1
+ private[this] var scrolling = false
def apply() = {
- dom.clearTimeout(scrolling)
- scrolling = dom.setTimeout(() => start(), 200)
+ if (!scrolling) {
+ scrolling = true
+ dom.requestAnimationFrame((d: Double) => start())
+ }
}
private[this] def start() = {
-// scrolling = false
+ scrolling = false
def scroll(el: dom.Element) = {
val rect = el.getBoundingClientRect()
if (rect.top <= 0)
@@ -96,10 +98,12 @@ class ScrollSpy(structure: Tree[String],
// This means it's the leaf element, because it won but there
// aren't any children which won, so it must be the actual leaf
tree.children.foreach(_.value.frag.classList.remove("selected"))
- if (dom.location.hash != itemId)
- dom.history.pushState(null, null, "#"+itemId)
- scroll(menuItem.children(0))
+ val top = main.scrollTop
+ dom.location.hash = itemId
+ main.scrollTop = top
+
+ scroll(menuItem.children(0))
}
menuItem.children(0).classList.add("pure-menu-selected")
}else{