diff options
Diffstat (limited to 'examples/demos/src/main/scala/scrollmenu/Controller.scala')
-rw-r--r-- | examples/demos/src/main/scala/scrollmenu/Controller.scala | 80 |
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) + } +} |