diff options
author | Li Haoyi <haoyi@dropbox.com> | 2014-10-28 00:11:20 -0700 |
---|---|---|
committer | Li Haoyi <haoyi@dropbox.com> | 2014-10-28 00:11:20 -0700 |
commit | 899ab6b865e4381b6f5b9b31bc662ea51604a7a5 (patch) | |
tree | 993d29801abb32acd457e98ed3f43551f0bc5195 /book/src | |
parent | 65fe456b96d81b6d166ff1a38a7c6ab529d284c2 (diff) | |
download | hands-on-scala-js-899ab6b865e4381b6f5b9b31bc662ea51604a7a5.tar.gz hands-on-scala-js-899ab6b865e4381b6f5b9b31bc662ea51604a7a5.tar.bz2 hands-on-scala-js-899ab6b865e4381b6f5b9b31bc662ea51604a7a5.zip |
lots of cleanup
Diffstat (limited to 'book/src')
-rwxr-xr-x | book/src/main/resources/js/ui.js | 2 | ||||
-rw-r--r-- | book/src/main/scala/book/Book.scala | 70 | ||||
-rw-r--r-- | book/src/main/scala/book/Main.scala | 2 | ||||
-rw-r--r-- | book/src/main/scala/book/Utils.scala | 41 |
4 files changed, 78 insertions, 37 deletions
diff --git a/book/src/main/resources/js/ui.js b/book/src/main/resources/js/ui.js index e98327a..5f144bb 100755 --- a/book/src/main/resources/js/ui.js +++ b/book/src/main/resources/js/ui.js @@ -76,7 +76,7 @@ document.addEventListener("DOMContentLoaded", function(){ // Get id of current scroll item for(var i = scrollItems.length - 1; i >= 0; i--){ - if (scrollHeaders[i].offsetTop < fromTop + 15 /*fudge factor*/){ + if (scrollHeaders[i].offsetTop < fromTop + 100 /*fudge factor*/){ if (lastId != i) { if (lastId != -1) { scrollItems[lastId].parentElement.className = scrollItems[lastId].parentElement.className.replace( diff --git a/book/src/main/scala/book/Book.scala b/book/src/main/scala/book/Book.scala index 6e4122f..4e2d015 100644 --- a/book/src/main/scala/book/Book.scala +++ b/book/src/main/scala/book/Book.scala @@ -12,27 +12,56 @@ import scalatags.Text.all._ object Book { import Utils.sect - val intro = twf("book/intro.tw") - val gettingStarted = twf("book/getting-started.tw") + lazy val intro = sect("Intro to Scala.js")(twf("book/intro.tw")) + lazy val gettingStarted = sect("Getting Started")(twf("book/getting-started.tw")) + val txt = twf("book/index.tw") val contentBar = { - def rec(current: Node, depth: Int): Seq[Frag] = Seq( - li( - a( - current.name, - href:="#"+Utils.munge(current.name), - paddingLeft := s"${depth * 10 + 10}px", - cls := "menu-item" + (if (depth == 1) " menu-item-divided " else "") + def rec(current: Node, depth: Int): Seq[Frag] = { + println("\t"*depth + current.name) + Seq( + li( + a( + current.name, + href:="#"+Utils.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)) + ) ++ current.children.flatMap(rec(_, depth + 1)) + } - // @li(cls:="menu-item-divided pure-menu-selected") + println("TABLE OF CONTENTS") rec(Utils.structure, 0) } - - - val txt = twf("book/index.tw").render - + val site = Seq( + raw("<!doctype html>"), + html( + head( + meta(charset:="utf-8"), + meta(name:="viewport", content:="width=device-width, initial-scale=1.0"), + tags2.title("Hands-on Scala.js"), + Utils.includes + ), + + div(id:="layout")( + a(href:="#menu", id:="menuLink", cls:="menu-link")( + span + ), + + 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", txt) + ) + ).render object hli{ def javascript(code: String*) = hl.highlight(code, "javascript", inline=true) def scala(code: String*) = hl.highlight(code, "scala", inline=true) @@ -47,8 +76,6 @@ object Book { if (inline){ code(cls:=lang + " highlight-me", lines(0), padding:=0, display:="inline") }else{ - println("LINES " + lines.toList) - println(snippet) val minIndent = lines.map(_.takeWhile(_ == ' ').length) .filter(_ > 0) .min @@ -114,15 +141,11 @@ object Book { firstCharIndex == -1 || firstCharIndex >= whitespace + (if (indented) 1 else 0) } - things.foreach(println) val stuff = if (!indented) { - println("NOT INDENTED " + things) things - } - else { + } else { val last = lines(firstLine + things.length + 1) -// println("LAST: " + last) if (last.trim.toSet subsetOf "}])".toSet) { lines(firstLine) +: things :+ last } else { @@ -131,7 +154,6 @@ object Book { } stuff.map(_.drop(whitespace)).mkString("\n") } - println(blob) pre(code(cls:=lang + " highlight-me", blob)) } diff --git a/book/src/main/scala/book/Main.scala b/book/src/main/scala/book/Main.scala index 89fb5e1..19b256a 100644 --- a/book/src/main/scala/book/Main.scala +++ b/book/src/main/scala/book/Main.scala @@ -32,7 +32,7 @@ object Main { // .call() - write(Book.txt, "output/index.html") + write(Book.site, "output/index.html") for(res <- Utils.autoResources ++ Utils.manualResources) { copy(getClass.getResourceAsStream("/" + res), "output/" + res) diff --git a/book/src/main/scala/book/Utils.scala b/book/src/main/scala/book/Utils.scala index df56c84..fbef8e8 100644 --- a/book/src/main/scala/book/Utils.scala +++ b/book/src/main/scala/book/Utils.scala @@ -38,27 +38,46 @@ object Utils{ raw("") } println(includes) - var indent = 1 - val headers = Seq(h1, h1, h2, h3, h4, h5, h6) - val structure = Node("Hands-on Scala.js", mutable.Buffer.empty) - var current = structure + var indent = 0 + + + val headers = Seq[(String => scalatags.Text.Tag, Option[Frag => Frag])]( + (h => div(cls:="header")( + h1(h), + h2("Writing client-side web applications in Scala") + ), Some(f => div(cls:="content", f))), + (h => div(cls:="header")( + h1(id:=Utils.munge(h), h), + br + ), None), + (h1(_), None), + (h2(_), None), + (h3(_), None), + (h4(_), None), + (h5(_), None), + (h6(_), None) + ) + + var structure: Node = null case class sect(name: String){ indent += 1 val newNode = Node(name, mutable.Buffer.empty) - current.children.append(newNode) - val prev = current - current = newNode + val (headerWrap, contentWrap) = headers(indent-1) + if (structure!= null) structure.children.append(newNode) + val prev = structure + structure = newNode def apply(args: Frag*) = { - val res = Seq( - headers(indent-1)(cls:="content-subhead", id:=munge(name), name) +: args:_* + val wrappedContents = contentWrap.getOrElse((x: Frag) => x)(args) + val res = Seq[Frag]( + headerWrap(name)(cls:="content-subhead", id:=munge(name)), + wrappedContents ) indent -= 1 - current = prev + if (prev != null) structure = prev res } } def munge(name: String) = { name.replace(" ", "") } - }
\ No newline at end of file |