summaryrefslogtreecommitdiff
path: root/book/src
diff options
context:
space:
mode:
authorLi Haoyi <haoyi@dropbox.com>2014-11-11 21:32:25 -0800
committerLi Haoyi <haoyi@dropbox.com>2014-11-11 21:32:25 -0800
commitdab933c342d755086253b1465a04caeeaa2af823 (patch)
tree62019986ef2becf02b9848ed983eadcd4837a5d2 /book/src
parent43795c30a7295310b47885b3eacca9fd9af33343 (diff)
downloadhands-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-xbook/src/main/resources/js/ui.js97
-rw-r--r--book/src/main/scala/book/Book.scala47
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