summaryrefslogtreecommitdiff
path: root/examples/demos/src/main/scala/scrollmenu/Controller.scala
diff options
context:
space:
mode:
Diffstat (limited to 'examples/demos/src/main/scala/scrollmenu/Controller.scala')
-rw-r--r--examples/demos/src/main/scala/scrollmenu/Controller.scala80
1 files changed, 80 insertions, 0 deletions
diff --git a/examples/demos/src/main/scala/scrollmenu/Controller.scala b/examples/demos/src/main/scala/scrollmenu/Controller.scala
new file mode 100644
index 0000000..4480445
--- /dev/null
+++ b/examples/demos/src/main/scala/scrollmenu/Controller.scala
@@ -0,0 +1,80 @@
+package scrollmenu
+
+import org.scalajs.dom
+import org.scalajs.dom.extensions._
+
+import scala.scalajs.js
+import scala.scalajs.js.annotation.JSExport
+import scalatags.JsDom.all._
+
+
+
+@JSExport
+object Controller{
+
+ def munge(name: String) = {
+ name.replace(" ", "")
+ }
+
+ @JSExport
+ def main(data: scala.scalajs.js.Any) = {
+
+ val structure = upickle.readJs[Tree[String]](upickle.json.readJs(data))
+
+ val Seq(main, menu, layout, menuLink) = Seq(
+ "main", "menu", "layout", "menuLink"
+ ).map(dom.document.getElementById)
+
+ 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)
+ ).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()
+ }
+ dom.setTimeout(rest _, 10)
+ }
+}