Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Some document cleanup. Added skel of forms chapter

  • Loading branch information...
commit dac88056c71750803b96bf795a26a105014c5415 1 parent 211f3e8
@dpp authored
Showing with 609 additions and 7 deletions.
  1. +3 −1 .gitignore
  2. +10 −0 Simply_Lift.lyx
  3. +55 −0 samples/forms/forms.lyx
  4. +9 −0 samples/forms/project/build.properties
  5. +20 −0 samples/forms/project/build/LiftProject.scala
  6. +1 −0  samples/forms/sbt
  7. BIN  samples/forms/sbt-launcher.jar
  8. +2 −0  samples/forms/sbt.bat
  9. 0  samples/forms/src/main/resources/.keep
  10. 0  samples/forms/src/main/resources/props/default.props
  11. +52 −0 samples/forms/src/main/scala/bootstrap/liftweb/Boot.scala
  12. 0  samples/forms/src/main/scala/code/comet/.keep
  13. 0  samples/forms/src/main/scala/code/lib/.keep
  14. 0  samples/forms/src/main/scala/code/model/.keep
  15. 0  samples/forms/src/main/scala/code/snippet/.keep
  16. 0  samples/forms/src/main/scala/code/view/.keep
  17. +21 −0 samples/forms/src/main/webapp/WEB-INF/web.xml
  18. BIN  samples/forms/src/main/webapp/images/ajax-loader.gif
  19. +13 −0 samples/forms/src/main/webapp/index.html
  20. +6 −0 samples/forms/src/main/webapp/static/index.html
  21. +4 −0 samples/forms/src/main/webapp/static/sample.html
  22. +85 −0 samples/forms/src/main/webapp/templates-hidden/default.html
  23. +57 −0 samples/forms/src/main/webapp/templates-hidden/wizard-all.html
  24. 0  samples/forms/src/test/resources/.keep
  25. +15 −0 samples/forms/src/test/scala/LiftConsole.scala
  26. +33 −0 samples/forms/src/test/scala/RunWebApp.scala
  27. +76 −0 samples/forms/src/test/scala/code/AppTest.scala
  28. +64 −0 samples/forms/src/test/scala/code/XmlSourceSpecs.scala
  29. +44 −0 samples/forms/src/test/scala/code/snippet/HelloWorldTest.scala
  30. +39 −6 samples/snippet_and_sitemap/snippet_and_sitemap.lyx
View
4 .gitignore
@@ -67,4 +67,6 @@ runner
*.tex
*.toc
Simply_Lift/
-Simply_Lift.html.tgz
+Simply_Lift.html.tgz
+
+*#
View
10 Simply_Lift.lyx
@@ -1011,6 +1011,16 @@ filename "samples/snippet_and_sitemap/snippet_and_sitemap.lyx"
\begin_layout Standard
\begin_inset CommandInset include
LatexCommand include
+filename "samples/forms/forms.lyx"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset CommandInset include
+LatexCommand include
filename "samples/http_rest/http_rest.lyx"
\end_inset
View
55 samples/forms/forms.lyx
@@ -0,0 +1,55 @@
+#LyX 1.6.7 created this file. For more info see http://www.lyx.org/
+\lyxformat 345
+\begin_document
+\begin_header
+\textclass book
+\use_default_options true
+\begin_modules
+eqs-within-sections
+figs-within-sections
+theorems-ams
+\end_modules
+\language english
+\inputencoding auto
+\font_roman default
+\font_sans default
+\font_typewriter default
+\font_default_family default
+\font_sc false
+\font_osf false
+\font_sf_scale 100
+\font_tt_scale 100
+
+\graphics default
+\paperfontsize default
+\spacing single
+\use_hyperref false
+\papersize default
+\use_geometry false
+\use_amsmath 1
+\use_esint 1
+\cite_engine basic
+\use_bibtopic false
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation skip
+\defskip medskip
+\quotes_language english
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+\tracking_changes false
+\output_changes false
+\author ""
+\author ""
+\end_header
+
+\begin_body
+
+\begin_layout Chapter
+Forms
+\end_layout
+
+\end_body
+\end_document
View
9 samples/forms/project/build.properties
@@ -0,0 +1,9 @@
+#Project properties
+#Fri Apr 23 11:24:20 PDT 2010
+project.organization=Lift
+project.name=Lift SBT Template
+sbt.version=0.7.4
+project.version=0.1
+def.scala.version=2.7.7
+build.scala.versions=2.8.1
+project.initialize=false
View
20 samples/forms/project/build/LiftProject.scala
@@ -0,0 +1,20 @@
+import sbt._
+
+class LiftProject(info: ProjectInfo) extends DefaultWebProject(info) {
+ val liftVersion = "2.2-RC5"
+
+ // uncomment the following if you want to use the snapshot repo
+ // val scalatoolsSnapshot = ScalaToolsSnapshots
+
+ // If you're using JRebel for Lift development, uncomment
+ // this line
+ override def scanDirectories = Nil
+
+ override def libraryDependencies = Set(
+ "net.liftweb" %% "lift-webkit" % liftVersion % "compile->default",
+ "org.mortbay.jetty" % "jetty" % "6.1.22" % "test->default",
+ "junit" % "junit" % "4.5" % "test->default",
+ "ch.qos.logback" % "logback-classic" % "0.9.26",
+ "org.scala-tools.testing" %% "specs" % "1.6.6" % "test->default"
+ ) ++ super.libraryDependencies
+}
View
1  samples/forms/sbt
@@ -0,0 +1 @@
+java -Xmx512M -Xss2M -XX:+CMSClassUnloadingEnabled -jar `dirname $0`/sbt-launcher.jar "$@"
View
BIN  samples/forms/sbt-launcher.jar
Binary file not shown
View
2  samples/forms/sbt.bat
@@ -0,0 +1,2 @@
+set SCRIPT_DIR=%~dp0
+java -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256m -Xmx512M -Xss2M -jar "%SCRIPT_DIR%\sbt-launcher.jar" %*
View
0  samples/forms/src/main/resources/.keep
No changes.
View
0  samples/forms/src/main/resources/props/default.props
No changes.
View
52 samples/forms/src/main/scala/bootstrap/liftweb/Boot.scala
@@ -0,0 +1,52 @@
+package bootstrap.liftweb
+
+import net.liftweb._
+import util._
+import Helpers._
+
+import common._
+import http._
+import sitemap._
+import Loc._
+
+/**
+ * A class that's instantiated early and run. It allows the application
+ * to modify lift's environment
+ */
+class Boot {
+ /**
+ * Calculate if the page should be displayed.
+ * In this case, it will be visible every other minute
+ */
+ def displaySometimes_? : Boolean =
+ (millis / 1000L / 60L) % 2 == 0
+
+ def boot {
+ // where to search snippet
+ LiftRules.addToPackages("code")
+
+ // Build SiteMap
+ def sitemap(): SiteMap = SiteMap(
+ Menu.i("Home") / "index" // the simple way to declare a menu
+ )
+
+ // set the sitemap. Note if you don't want access control for
+ // each page, just comment this line out.
+ LiftRules.setSiteMapFunc(() => sitemap())
+
+ //Show the spinny image when an Ajax call starts
+ LiftRules.ajaxStart =
+ Full(() => LiftRules.jsArtifacts.show("ajax-loader").cmd)
+
+ // Make the spinny image go away when it ends
+ LiftRules.ajaxEnd =
+ Full(() => LiftRules.jsArtifacts.hide("ajax-loader").cmd)
+
+ // Force the request to be UTF-8
+ LiftRules.early.append(_.setCharacterEncoding("UTF-8"))
+
+ // Use HTML5 for rendering
+ LiftRules.htmlProperties.default.set((r: Req) =>
+ new Html5Properties(r.userAgent))
+ }
+}
View
0  samples/forms/src/main/scala/code/comet/.keep
No changes.
View
0  samples/forms/src/main/scala/code/lib/.keep
No changes.
View
0  samples/forms/src/main/scala/code/model/.keep
No changes.
View
0  samples/forms/src/main/scala/code/snippet/.keep
No changes.
View
0  samples/forms/src/main/scala/code/view/.keep
No changes.
View
21 samples/forms/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!DOCTYPE web-app
+PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
+"http://java.sun.com/dtd/web-app_2_3.dtd">
+
+<web-app>
+<filter>
+ <filter-name>LiftFilter</filter-name>
+ <display-name>Lift Filter</display-name>
+ <description>The Filter that intercepts lift calls</description>
+ <filter-class>net.liftweb.http.LiftFilter</filter-class>
+</filter>
+
+
+<filter-mapping>
+ <filter-name>LiftFilter</filter-name>
+ <url-pattern>/*</url-pattern>
+</filter-mapping>
+
+</web-app>
View
BIN  samples/forms/src/main/webapp/images/ajax-loader.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
13 samples/forms/src/main/webapp/index.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+ <title>Home</title>
+ </head>
+ <body class="lift:content_id=main">
+ <div id="main" class="lift:surround?with=default&at=content">
+
+ </div>
+ </body>
+</html>
+
View
6 samples/forms/src/main/webapp/static/index.html
@@ -0,0 +1,6 @@
+<div id="main" class="lift:surround?with=default;at=content">
+ Static content... everything you put in the /static
+ directory will be served without additions to SiteMap.
+ <a href="/static/sample">Sample</a> page.
+</div>
+
View
4 samples/forms/src/main/webapp/static/sample.html
@@ -0,0 +1,4 @@
+<div id="main" class="lift:surround?with=default;at=content">
+ This is the sample page. <a href="/static/index">Back to index</a>
+</div>
+
View
85 samples/forms/src/main/webapp/templates-hidden/default.html
@@ -0,0 +1,85 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:lift="http://liftweb.net/">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+ <meta name="description" content="" />
+ <meta name="keywords" content="" />
+ <title class="lift:Menu.title">App: </title>
+ <style class="lift:CSS.blueprint"></style>
+ <style class="lift:CSS.fancyType"></style>
+ <script id="jquery" src="/classpath/jquery.js" type="text/javascript"></script>
+ <script id="json" src="/classpath/json.js" type="text/javascript"></script>
+ <style type="text/css">
+/* <![CDATA[ */
+.edit_error_class {
+ display: block;
+ color: red;
+}
+
+.sidebar ul {
+ margin:0;
+ padding:0;
+ border-bottom:1px solid #ccc;
+}
+
+
+.sidebar ul li {
+ margin:0;
+ padding:0;
+ list-style:none;
+ border:1px solid #ccc;
+ border-bottom:none;
+}
+
+.sidebar ul li a {
+ display:block;
+ padding:3px;
+ text-indent:30px;
+ text-decoration:none;
+}
+
+.sidebar ul li span {
+ display:block;
+ padding:3px;
+ text-indent:30px;
+ text-decoration:none;
+}
+
+.sidebar ul li a:hover {
+ background-color: #eee;
+}
+
+
+ /* ]]> */
+ </style>
+ </head>
+ <body>
+ <div class="container">
+ <div class="column span-12 last" style="text-align: right">
+ <h1 class="alt">app<img alt="" id="ajax-loader" style="display:none; margin-bottom: 0px; margin-left: 5px" src="/images/ajax-loader.gif"></h1>
+ </div>
+
+ <hr>
+
+ <div class="column span-6 colborder sidebar">
+ <hr class="space" >
+
+ <span class="lift:Menu.builder"></span>
+
+ <div class="lift:Msgs?showAll=true"></div>
+ <hr class="space" />
+ </div>
+
+ <div class="column span-17 last">
+ <div id="content">The main content will get bound here</div>
+ </div>
+
+ <hr />
+ <div class="column span-23 last" style="text-align: center">
+ <h4 class="alt">
+ <a href="http://www.liftweb.net"><i>Lift</i></a>
+ is Copyright 2007-2010 WorldWide Conferencing, LLC.
+ Distributed under an Apache 2.0 License.</h4>
+ </div>
+ </div>
+ </body>
+</html>
View
57 samples/forms/src/main/webapp/templates-hidden/wizard-all.html
@@ -0,0 +1,57 @@
+<div>
+ <wizard:screen_info><div>Page <wizard:screen_number></wizard:screen_number> of <wizard:total_screens></wizard:total_screens></div></wizard:screen_info>
+ <wizard:wizard_top> <div> <wizard:bind></wizard:bind> </div> </wizard:wizard_top>
+ <wizard:screen_top> <div> <wizard:bind></wizard:bind> </div> </wizard:screen_top>
+ <wizard:errors> <div> <ul> <wizard:item> <li> <wizard:bind></wizard:bind> </li> </wizard:item> </ul> </div> </wizard:errors>
+ <div>
+ <wizard:fields>
+ <table>
+ <tbody>
+ <tr lift:bind="wizard:line">
+ <td>
+ <wizard:label>
+ <label wizard:for="">
+ <wizard:bind></wizard:bind>
+ </label>
+ </wizard:label>
+ <wizard:help>
+ <span>
+ <wizard:bind></wizard:bind>
+ </span>
+ </wizard:help>
+ <wizard:field_errors>
+ <ul>
+ <wizard:error>
+ <li>
+ <wizard:bind></wizard:bind>
+ </li>
+ </wizard:error>
+ </ul>
+ </wizard:field_errors>
+ </td>
+ <td>
+ <wizard:form></wizard:form>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </wizard:fields>
+ </div>
+ <div>
+ <table>
+ <tr>
+ <td>
+ <wizard:prev></wizard:prev>
+ </td>
+ <td>
+ <wizard:cancel></wizard:cancel>
+ </td>
+ <td>
+ <wizard:next></wizard:next>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <wizard:screen_bottom> <div> <wizard:bind></wizard:bind> </div> </wizard:screen_bottom>
+ <wizard:wizard_bottom> <div> <wizard:bind></wizard:bind> </div> </wizard:wizard_bottom>
+</div>
View
0  samples/forms/src/test/resources/.keep
No changes.
View
15 samples/forms/src/test/scala/LiftConsole.scala
@@ -0,0 +1,15 @@
+import _root_.bootstrap.liftweb.Boot
+import _root_.scala.tools.nsc.MainGenericRunner
+
+object LiftConsole {
+ def main(args : Array[String]) {
+ // Instantiate your project's Boot file
+ val b = new Boot()
+ // Boot your project
+ b.boot
+ // Now run the MainGenericRunner to get your repl
+ MainGenericRunner.main(args)
+ // After the repl exits, then exit the scala script
+ exit(0)
+ }
+}
View
33 samples/forms/src/test/scala/RunWebApp.scala
@@ -0,0 +1,33 @@
+import _root_.org.mortbay.jetty.Connector
+import _root_.org.mortbay.jetty.Server
+import _root_.org.mortbay.jetty.webapp.WebAppContext
+import org.mortbay.jetty.nio._
+
+object RunWebApp extends Application {
+ val server = new Server
+ val scc = new SelectChannelConnector
+ scc.setPort(8080)
+ server.setConnectors(Array(scc))
+
+ val context = new WebAppContext()
+ context.setServer(server)
+ context.setContextPath("/")
+ context.setWar("src/main/webapp")
+
+ server.addHandler(context)
+
+ try {
+ println(">>> STARTING EMBEDDED JETTY SERVER, PRESS ANY KEY TO STOP")
+ server.start()
+ while (System.in.available() == 0) {
+ Thread.sleep(5000)
+ }
+ server.stop()
+ server.join()
+ } catch {
+ case exc : Exception => {
+ exc.printStackTrace()
+ System.exit(100)
+ }
+ }
+}
View
76 samples/forms/src/test/scala/code/AppTest.scala
@@ -0,0 +1,76 @@
+package code
+
+import _root_.java.io.File
+import _root_.junit.framework._
+import Assert._
+import _root_.scala.xml.XML
+import _root_.net.liftweb.util._
+import _root_.net.liftweb.common._
+
+object AppTest {
+ def suite: Test = {
+ val suite = new TestSuite(classOf[AppTest])
+ suite
+ }
+
+ def main(args : Array[String]) {
+ _root_.junit.textui.TestRunner.run(suite)
+ }
+}
+
+/**
+ * Unit test for simple App.
+ */
+class AppTest extends TestCase("app") {
+
+ /**
+ * Rigourous Tests :-)
+ */
+ def testOK() = assertTrue(true)
+ // def testKO() = assertTrue(false);
+
+ /**
+ * Tests to make sure the project's XML files are well-formed.
+ *
+ * Finds every *.html and *.xml file in src/main/webapp (and its
+ * subdirectories) and tests to make sure they are well-formed.
+ */
+ def testXml() = {
+ var failed: List[File] = Nil
+
+ def handledXml(file: String) =
+ file.endsWith(".xml")
+
+ def handledXHtml(file: String) =
+ file.endsWith(".html") || file.endsWith(".htm") || file.endsWith(".xhtml")
+
+ def wellFormed(file: File) {
+ if (file.isDirectory)
+ for (f <- file.listFiles) wellFormed(f)
+
+ if (file.isFile && handledXml(file.getName)) {
+ try {
+ XML.loadFile(file)
+ } catch {
+ case e: _root_.org.xml.sax.SAXParseException => failed = file :: failed
+ }
+ }
+ if (file.isFile && handledXHtml(file.getName)) {
+ PCDataXmlParser(new _root_.java.io.FileInputStream(file.getAbsolutePath)) match {
+ case Full(_) => // file is ok
+ case _ => failed = file :: failed
+ }
+ }
+ }
+
+ wellFormed(new File("src/main/webapp"))
+
+ val numFails = failed.size
+ if (numFails > 0) {
+ val fileStr = if (numFails == 1) "file" else "files"
+ val msg = "Malformed XML in " + numFails + " " + fileStr + ": " + failed.mkString(", ")
+ println(msg)
+ fail(msg)
+ }
+ }
+}
View
64 samples/forms/src/test/scala/code/XmlSourceSpecs.scala
@@ -0,0 +1,64 @@
+package code
+
+import java.io.File
+
+import scala.xml.XML
+
+import org.specs.Specification
+import org.specs.runner.JUnit4
+
+import net.liftweb.common.Full
+import net.liftweb.util.PCDataXmlParser
+
+class XmlSourceSpecsTest extends JUnit4(XmlSourceSpecs)
+
+object XmlSourceSpecs extends Specification {
+
+ "XML Sources" should {
+ "be well-formed" in {
+ /**
+ * Tests to make sure the project's XML files are well-formed.
+ *
+ * Finds every *.html and *.xml file in src/main/webapp (and its
+ * subdirectories) and tests to make sure they are well-formed.
+ */
+ var failed: List[File] = Nil
+
+ def handledXml(file: String) =
+ file.endsWith(".xml")
+
+ def handledXHtml(file: String) =
+ file.endsWith(".html") || file.endsWith(".htm") || file.endsWith(".xhtml")
+
+ def wellFormed(file: File) {
+ if (file.isDirectory)
+ for (f <- file.listFiles) wellFormed(f)
+
+ if (file.isFile && handledXml(file.getName)) {
+ try {
+ XML.loadFile(file)
+ } catch {
+ case e: _root_.org.xml.sax.SAXParseException => failed = file :: failed
+ }
+ }
+ if (file.isFile && handledXHtml(file.getName)) {
+ PCDataXmlParser(new java.io.FileInputStream(file.getAbsolutePath)) match {
+ case Full(_) => // file is ok
+ case _ => failed = file :: failed
+ }
+ }
+ }
+
+ wellFormed(new File("src/main/webapp"))
+
+ val numFails = failed.size
+ if (numFails > 0) {
+ val fileStr = if (numFails == 1) "file" else "files"
+ val msg = "Malformed XML in " + numFails + " " + fileStr + ": " + failed.mkString(", ")
+ fail(msg)
+ }
+
+ numFails must_== 0
+ }
+ }
+}
View
44 samples/forms/src/test/scala/code/snippet/HelloWorldTest.scala
@@ -0,0 +1,44 @@
+package code
+package snippet
+
+import org.specs._
+import org.specs.runner.JUnit4
+import org.specs.runner.ConsoleRunner
+import net.liftweb._
+import http._
+import net.liftweb.util._
+import net.liftweb.common._
+import org.specs.matcher._
+import org.specs.specification._
+import Helpers._
+import lib._
+
+
+class HelloWorldTestSpecsAsTest extends JUnit4(HelloWorldTestSpecs)
+object HelloWorldTestSpecsRunner extends ConsoleRunner(HelloWorldTestSpecs)
+
+object HelloWorldTestSpecs extends Specification {
+ val session = new LiftSession("", randomString(20), Empty)
+ val stableTime = now
+
+ override def executeExpectations(ex: Examples, t: =>Any): Any = {
+ S.initIfUninitted(session) {
+ DependencyFactory.time.doWith(stableTime) {
+ super.executeExpectations(ex, t)
+ }
+ }
+ }
+
+ "HelloWorld Snippet" should {
+ "Put the time in the node" in {
+ val hello = new HelloWorld
+ Thread.sleep(1000) // make sure the time changes
+
+ val str = hello.howdy(<span>Welcome to your Lift app at <span id="time">Time goes here</span></span>).toString
+
+ str.indexOf(stableTime.toString) must be >= 0
+ str.indexOf("Hello at") must be >= 0
+ }
+ }
+}
+
View
45 samples/snippet_and_sitemap/snippet_and_sitemap.lyx
@@ -110,6 +110,7 @@ When your Lift application first starts up, it executes the code in Boot.scala:
\begin_inset CommandInset include
LatexCommand lstinputlisting
filename "src/main/scala/bootstrap/liftweb/Boot.scala"
+lstparams "caption={Boot.scala}"
\end_inset
@@ -1060,7 +1061,23 @@ currentValue
\end_layout
\begin_layout Standard
-It's possible to hand-write Loc implementation that will match
+It's possible to hand-write Loc implementation that will match many URL
+ parameters.
+\end_layout
+
+\begin_layout Standard
+For information on accessing the captured parameters (in this case the
+\family typewriter
+ParamInfo
+\family default
+), see
+\begin_inset CommandInset ref
+LatexCommand vref
+reference "sub:Param-Example"
+
+\end_inset
+
+.
\end_layout
\begin_layout Subsection
@@ -1190,7 +1207,7 @@ Let's look at the page source:
\begin_inset CommandInset include
LatexCommand lstinputlisting
filename "src/main/webapp/index.html"
-lstparams "language=xml"
+lstparams "caption={index.html},language=xml"
\end_inset
@@ -1617,7 +1634,7 @@ dynamic.html
\begin_inset CommandInset include
LatexCommand lstinputlisting
filename "src/main/webapp/dynamic.html"
-lstparams "language=xml"
+lstparams "caption={dynamic.html},language=xml"
\end_inset
@@ -1640,6 +1657,7 @@ HelloWorld.scala
\begin_inset CommandInset include
LatexCommand lstinputlisting
filename "src/main/scala/code/snippet/HelloWorld.scala"
+lstparams "caption={HelloWorld.scala}"
\end_inset
@@ -1789,6 +1807,7 @@ Embedded.scala
\begin_inset CommandInset include
LatexCommand lstinputlisting
filename "src/main/scala/code/snippet/Embedded.scala"
+lstparams "caption={Embedded.scala}"
\end_inset
@@ -1849,6 +1868,12 @@ location
\end_layout
\begin_layout Subsection
+\begin_inset CommandInset label
+LatexCommand label
+name "sub:Param-Example"
+
+\end_inset
+
Param Example
\end_layout
@@ -1869,7 +1894,7 @@ Loc[ParamInfo]
\begin_inset CommandInset include
LatexCommand lstinputlisting
filename "src/main/webapp/param.html"
-lstparams "language=xml"
+lstparams "caption={param.html},language=xml"
\end_inset
@@ -1888,6 +1913,7 @@ ParamInfo
\begin_inset CommandInset include
LatexCommand lstinputlisting
filename "src/main/scala/code/snippet/Param.scala"
+lstparams "caption={Param.scala}"
\end_inset
@@ -1979,6 +2005,14 @@ currentValue
\end_layout
\begin_layout Subsection
+Recursive
+\end_layout
+
+\begin_layout Standard
+FIXME example and discussion of recursive snippets
+\end_layout
+
+\begin_layout Subsection
Summary
\end_layout
@@ -2016,8 +2050,7 @@ SiteMap
\end_layout
\begin_layout Standard
-In the next chapter, we'll take a dive into Lift's low-level support for
- HTTP.
+In the next chapter, we'll take a dive into Lift's form handling.
\end_layout
\end_body
Please sign in to comment.
Something went wrong with that request. Please try again.