diff options
author | Li Haoyi <haoyi@dropbox.com> | 2014-11-11 21:32:25 -0800 |
---|---|---|
committer | Li Haoyi <haoyi@dropbox.com> | 2014-11-11 21:32:25 -0800 |
commit | dab933c342d755086253b1465a04caeeaa2af823 (patch) | |
tree | 62019986ef2becf02b9848ed983eadcd4837a5d2 /book/src | |
parent | 43795c30a7295310b47885b3eacca9fd9af33343 (diff) | |
download | hands-on-scala-js-dab933c342d755086253b1465a04caeeaa2af823.tar.gz hands-on-scala-js-dab933c342d755086253b1465a04caeeaa2af823.tar.bz2 hands-on-scala-js-dab933c342d755086253b1465a04caeeaa2af823.zip |
Pure Scala!
Diffstat (limited to 'book/src')
-rwxr-xr-x | book/src/main/resources/js/ui.js | 97 | ||||
-rw-r--r-- | book/src/main/scala/book/Book.scala | 47 |
2 files changed, 11 insertions, 133 deletions
diff --git a/book/src/main/resources/js/ui.js b/book/src/main/resources/js/ui.js deleted file mode 100755 index ba79579..0000000 --- a/book/src/main/resources/js/ui.js +++ /dev/null @@ -1,97 +0,0 @@ -document.addEventListener("DOMContentLoaded", function(){ - console.log("HIGHLIGHTING") - - var layout = document.getElementById('layout'), - menu = document.getElementById('menu'), - menuLink = document.getElementById('menuLink'); - - function toggleClass(element, className) { - var classes = element.className.split(/\s+/), - length = classes.length, - i = 0; - - for(; i < length; i++) { - if (classes[i] === className) { - classes.splice(i, 1); - break; - } - } - // The className is not found - if (length === classes.length) { - classes.push(className); - } - - element.className = classes.join(' '); - } - - menuLink.onclick = function (e) { - var active = 'active'; - - e.preventDefault(); - toggleClass(layout, active); - toggleClass(menu, active); - toggleClass(menuLink, active); - }; - - - var snippets = document.getElementsByClassName("highlight-me"); - for(var i = 0; i < snippets.length; i++){ - hljs.highlightBlock(snippets[i]) - } - - - - - // Cache selectors - var lastId = -1; - var main = document.getElementById("main"); - - scrollItems = document.getElementsByClassName("menu-item"); - - scrollHeaders = [] - - for(var i = 0; i < scrollItems.length; i++){ - scrollHeaders.push( - document.getElementById( - scrollItems[i].getAttribute("href").substring(1) - ) - ) - } - - - function isElementInViewport (el) { - var rect = el.getBoundingClientRect(); - - return ( - rect.top >= 0 && - rect.left >= 0 && - rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */ - rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */ - ); - } - main.addEventListener("scroll", function(){ - // Get container scroll position - var fromTop = main.scrollTop; - - // Get id of current scroll item - for(var i = scrollItems.length - 1; i >= 0; i--){ - if (scrollHeaders[i].offsetTop < fromTop + 100 /*fudge factor*/){ - if (lastId != i) { - if (lastId != -1) { - scrollItems[lastId].parentElement.className = scrollItems[lastId].parentElement.className.replace( - " pure-menu-selected", - "" - ); - } - scrollItems[i].parentElement.className = scrollItems[i].parentElement.className + " pure-menu-selected" - if (!isElementInViewport(scrollItems[i].parentElement)){ - scrollItems[i].parentElement.scrollIntoView(lastId > i) - } - - lastId = i - } - break; - } - } - }); -}); diff --git a/book/src/main/scala/book/Book.scala b/book/src/main/scala/book/Book.scala index c6c9c2e..ea57945 100644 --- a/book/src/main/scala/book/Book.scala +++ b/book/src/main/scala/book/Book.scala @@ -25,7 +25,6 @@ object Book { "META-INF/resources/webjars/font-awesome/4.2.0/fonts/fontawesome-webfont.ttf", "META-INF/resources/webjars/font-awesome/4.2.0/fonts/fontawesome-webfont.woff", "css/side-menu.css", - "js/ui.js", "example-fastopt.js", "webpage/weather.js", "favicon.svg", @@ -52,24 +51,8 @@ object Book { } val txt = Index() - val contentBar = { - def rec(current: Node, depth: Int): Seq[Frag] = { - println("\t"*depth + current.name) - Seq( - li( - a( - current.name, - href:="#"+sect.munge(current.name), - paddingLeft := s"${depth * 10 + 10}px", - cls := "menu-item" + (if (depth == 1) " menu-item-divided " else "") - ) - ) - ) ++ current.children.flatMap(rec(_, depth + 1)) - } + val data = upickle.write(sect.structure) - println("TABLE OF CONTENTS") - rec(sect.structure, 0) - } val site = Seq( raw("<!doctype html>"), html( @@ -80,27 +63,19 @@ object Book { tags2.title("Hands-on Scala.js"), includes ), - - div(id:="layout")( - a(href:="#menu", id:="menuLink", cls:="menu-link")( - span + body( + onload:=s"Controller().main($data)", + div(id:="layout")( + a(href:="#menu", id:="menuLink", cls:="menu-link")( + span + ), + div(id:="menu") ), - - div(id:="menu")( - div(cls:="pure-menu pure-menu-open")( - a(cls:="pure-menu-heading", href:="#")( - "Contents" - ), - ul(cls:="menu-item-list")( - contentBar - ) + div(id:="main", + div(id:="main-box")( + txt ) ) - ), - div(id:="main", - div(id:="main-box")( - txt - ) ) ) ).render |