Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Merge branch 'master' of git@github.com:tjweir/liftbook

Conflicts:

	chap-JPA.lyx
  • Loading branch information...
commit 0c43d0017d928f23b3c8fee2402888c0204b35c5 2 parents 1b925ab + 314e0c2
@dchenbecker dchenbecker authored
View
23 chap-JPA.lyx
@@ -47,6 +47,29 @@ JPA Integration
\end_layout
\begin_layout Standard
+\begin_inset Box Framed
+position "t"
+hor_pos "c"
+has_inner_box 0
+inner_pos "t"
+use_parbox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+status collapsed
+
+\begin_layout Plain Layout
+This chapter is still under active development.
+ The contents will change.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
The Java Persistence API
\begin_inset Foot
status collapsed
View
45 chap-actors.lyx
@@ -1,8 +1,9 @@
-#LyX 1.5.6 created this file. For more info see http://www.lyx.org/
-\lyxformat 276
+#LyX 1.6.0 created this file. For more info see http://www.lyx.org/
+\lyxformat 345
\begin_document
\begin_header
\textclass book
+\use_default_options false
\language english
\inputencoding auto
\font_roman default
@@ -13,9 +14,11 @@
\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
@@ -43,6 +46,37 @@
Using Scala Actors
\end_layout
+\begin_layout Standard
+\begin_inset Box Framed
+position "t"
+hor_pos "c"
+has_inner_box 0
+inner_pos "t"
+use_parbox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+status collapsed
+
+\begin_layout Plain Layout
+This chapter is still under active development.
+ The contents will change.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Note Note
+status open
+
\begin_layout Itemize
Intro to Concurrency
\end_layout
@@ -69,7 +103,7 @@ Complex: Pulling RSS feeds?
\begin_inset Note Note
status open
-\begin_layout Standard
+\begin_layout Plain Layout
We need a better example.
-Ty
\end_layout
@@ -80,6 +114,11 @@ We need a better example.
\end_layout
\end_deeper
+\end_inset
+
+
+\end_layout
+
\begin_layout Standard
\end_layout
View
709 chap-advanced.lyx
@@ -1,4 +1,4 @@
-#LyX 1.6.1 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.0 created this file. For more info see http://www.lyx.org/
\lyxformat 345
\begin_document
\begin_header
@@ -54,6 +54,29 @@ name "cha:Advanced-Lift-Guts"
\end_layout
\begin_layout Standard
+\begin_inset Box Framed
+position "t"
+hor_pos "c"
+has_inner_box 0
+inner_pos "t"
+use_parbox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+status collapsed
+
+\begin_layout Plain Layout
+This chapter is still under active development.
+ The contents will change.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
Congratulations! You've either made it through the whole first section of
the book, or you feel adventurous enough to skip right by some (or all)
of it.
@@ -705,7 +728,7 @@ We won't get into details right now oh what exactly each and every class/object
It is important to know that whenever you need to return a LiftResponse
reference from one of your functions, for example LiftRules.dispatch you
can you can use one of these classes.
- So ultimatelly Lift doesn;t really provide you the HttpServletResponse
+ So ultimatelly Lift doesn't really provide you the HttpServletResponse
object instead all Lift responses are impersonated by a LiftResponse instance
and it content (the actual payload, http headers, content-type, cookies
etc.) is written internally by Lift to the container's output stream.
@@ -953,22 +976,692 @@ sticky session
consuming.
\end_layout
+\begin_layout Section
+Wrapping Lift's processing logic
+\end_layout
+
+\begin_layout Standard
+Lift provides so much fexibility to your application by allowing user's
+ functions to be part of processing lifecycle.
+ In this cases Lift allows you to provide your own function(s) and the actual
+ Lift's processing function is passed to you.
+ This means that calling Lift's logic is your responsability to call the
+ function provided by Lift and of course you can have code before and after
+ calling Lift's function.
+\end_layout
+
+\begin_layout Standard
+But let's see how exactly you can do this and we do that by starting with
+ a code snippet:
+\end_layout
+
+\begin_layout Standard
+\begin_inset listings
+inline false
+status open
+
+\begin_layout Plain Layout
+
+\begin_inset Caption
+
+\begin_layout Plain Layout
+LoanWrapper example
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+ class Boot {
+\end_layout
+
+\begin_layout Plain Layout
+
+ def boot {
+\end_layout
+
+\begin_layout Plain Layout
+
+ ...
+
+\end_layout
+
+\begin_layout Plain Layout
+
+ S.addAround(new LoanWrapper { // Y
+\end_layout
+
+\begin_layout Plain Layout
+
+ def apply[T](f: => T): T = {
+\end_layout
+
+\begin_layout Plain Layout
+
+ println("Y -> hello to the request!")
+\end_layout
+
+\begin_layout Plain Layout
+
+ val result = f // Let lift do normal request processing.
+
+\end_layout
+
+\begin_layout Plain Layout
+
+ println("Y -> goodbye!")
+\end_layout
+
+\begin_layout Plain Layout
+
+ result
+\end_layout
+
+\begin_layout Plain Layout
+
+ }
+\end_layout
+
+\begin_layout Plain Layout
+
+ })
+\end_layout
+
+\begin_layout Plain Layout
+
+ S.addAround(new LoanWrapper { // X
+\end_layout
+
+\begin_layout Plain Layout
+
+ def apply[T](f: => T): T = {
+\end_layout
+
+\begin_layout Plain Layout
+
+ println("X -> hello to the request!")
+\end_layout
+
+\begin_layout Plain Layout
+
+ val result = f // Let lift do normal request processing.
+
+\end_layout
+
+\begin_layout Plain Layout
+
+ println("X -> goodbye!")
+\end_layout
+
+\begin_layout Plain Layout
+
+ result
+\end_layout
+
+\begin_layout Plain Layout
+
+ }
+\end_layout
+
+\begin_layout Plain Layout
+
+ })
+\end_layout
+
+\begin_layout Plain Layout
+
+ }
+\end_layout
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Actually the code looks pretty straight forward in the sense that we add
+ two LoanWrapper instances to the S object.
+ Note that we're using S object not LiftRules meaning that LoanWrapper-s
+ are applicable only for stateful processing.
+ See at
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sec:Request/Response-Lifecycle"
+
+\end_inset
+
+ when exactly LoanWrapper-s are invoked.
+ But so far we added our code so what will happen when a request is sent
+ from clinet? In a glance the invocation sequence will be X(Y(f)) where
+ f is the Lift's function that actually impersonates the core processing.
+ Therefore you'll see in the console the following output:
+\end_layout
+
+\begin_layout Standard
+\begin_inset listings
+inline false
+status open
+
+\begin_layout Plain Layout
+
+X -> hello to the request!
+\end_layout
+
+\begin_layout Plain Layout
+
+Y -> hello to the request!
+\end_layout
+
+\begin_layout Plain Layout
+
+<Lift's logic ...
+ whatever is printed here>
+\end_layout
+
+\begin_layout Plain Layout
+
+Y -> goodbye!
+\end_layout
+
+\begin_layout Plain Layout
+
+X -> goodbye!
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+The utility of this feature is when you want to open/acquire some resources
+ before Lift does its job and release them after Lift processed the stateful
+ request and LiftResponse object is constructed.
+\end_layout
+
+\begin_layout Section
+More on snippets
+\end_layout
+
\begin_layout Standard
-* Additional topics
+By now you already have a fairly good idea how snippets work, how you can
+ use them etc.
+ There are a few things that were not revealed yet to you, such as:
+\end_layout
+
+\begin_layout Enumerate
+Ability to pass parameters to snippets
\end_layout
+\begin_deeper
\begin_layout Standard
-* S.addAround and LoanWrapper
+\begin_inset listings
+inline false
+status open
+
+\begin_layout Plain Layout
+
+\begin_inset Caption
+
+\begin_layout Plain Layout
+Snippet attributes
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+<lift:Ledger.balance default=
+\begin_inset Quotes erd
+\end_inset
+
+10
+\begin_inset Quotes erd
+\end_inset
+
+>
+\end_layout
+
+\begin_layout Plain Layout
+
+ <ledger:balance/> as of <ledger:time />
+\end_layout
+
+\begin_layout Plain Layout
+
+</lift:Ledger.balance>
+\end_layout
+
+\end_inset
+
+
\end_layout
\begin_layout Standard
-* How S.attr works in conjunction with XML attributes on snippets, etc and
- with Rewriting
+How do we read the
+\emph on
+default
+\emph default
+ attribute from the snippet code? Actualy it is only about calling S.attr
+ function.
\end_layout
\begin_layout Standard
-This is going to be super-helpful for the later chapters, like WebServices
- and Rewriting.
+\begin_inset listings
+inline false
+status open
+
+\begin_layout Plain Layout
+
+\begin_inset Caption
+
+\begin_layout Plain Layout
+Snippet attributes
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+class Ledger {
+\end_layout
+
+\begin_layout Plain Layout
+
+ def balance (content : NodeSeq ) : NodeSeq = {
+\end_layout
+
+\begin_layout Plain Layout
+
+ val dflt = S.attr(
+\begin_inset Quotes eld
+\end_inset
+
+default
+\begin_inset Quotes erd
+\end_inset
+
+) openOr
+\begin_inset Quotes eld
+\end_inset
+
+0
+\begin_inset Quotes erd
+\end_inset
+
+;
+\end_layout
+
+\begin_layout Plain Layout
+
+ bind (
+\begin_inset Quotes eld
+\end_inset
+
+ledger
+\begin_inset Quotes erd
+\end_inset
+
+, content,
+\end_layout
+
+\begin_layout Plain Layout
+
+
+\begin_inset Quotes eld
+\end_inset
+
+balance
+\begin_inset Quotes erd
+\end_inset
+
+ -> Text(currentLegdger.formattedBalance),
+\end_layout
+
+\begin_layout Plain Layout
+
+
+\begin_inset Quotes eld
+\end_inset
+
+time
+\begin_inset Quotes erd
+\end_inset
+
+ -> Text((new java.util.Date).toString))
+\end_layout
+
+\begin_layout Plain Layout
+
+ }
+\end_layout
+
+\begin_layout Plain Layout
+
+}
+\end_layout
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_deeper
+\begin_layout Enumerate
+Use snippets for tag attributes
+\end_layout
+
+\begin_deeper
+\begin_layout Standard
+\begin_inset listings
+inline false
+status open
+
+\begin_layout Plain Layout
+
+\begin_inset Caption
+
+\begin_layout Plain Layout
+Attribute snippet
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+// In your page you can have
+\end_layout
+
+\begin_layout Plain Layout
+
+<div lift:snippet="MyDivThing:calcDir"> ...
+ </div>
+\end_layout
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\begin_layout Plain Layout
+
+...
+\end_layout
+
+\begin_layout Plain Layout
+
+// Your snippet
+\end_layout
+
+\begin_layout Plain Layout
+
+class MyDivThing {
+\end_layout
+
+\begin_layout Plain Layout
+
+ def calcDir = new UnprefixedAttribute("dir", "rtl", Null)
+\end_layout
+
+\begin_layout Plain Layout
+
+}
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_deeper
+\begin_layout Standard
+The utility of this support is quite obvious in so many situations.
+ For instance when supporting right-to-left languages you can add the direction
+ of the page to be rtl quite easily.
+\end_layout
+
+\begin_layout Section
+Lift JavaScript support
+\end_layout
+
+\begin_layout Standard
+You may already noticed Lift comes with a rich client side functionality.
+ By default it uses JQuery (http://jquery.com/) javascript framework.
+ So a lot of JavaScript artifacts are there for you to use them from Scala
+ code.
+ For instance Lift is adding the JavaScript code for Ajax/Comet support.
+ When you're using Ajax for example many times you want to return a little
+ JavaScript code to be executed on client side.
+ So instead of rturning from your Ajax function a String containing the
+ JavaScript code you can return a Lift object ...
+ in essence a JsExp.
+ So yes Lift abstract away a JavaScript expression (JsExp) and JavaScript
+ command (JsCmd) etc.
+ But let's dig a bit deeper in this Lift JS API.
+\end_layout
+
+\begin_layout Standard
+
+\family typewriter
+net.liftweb.http.js.JsExp
+\family default
+is a trait that abstracts a JavaScript expression.
+ For instance JE.ValById(
+\begin_inset Quotes eld
+\end_inset
+
+sometextfield
+\begin_inset Quotes erd
+\end_inset
+
+) which will render the JavaScript code document.getElementById('sometextfield').v
+alue.
+ The next important class is
+\family typewriter
+net.liftweb.http.js.JsCmd
+\family default
+which impersonated a JavaScript command.
+ For instance a call to a function.
+ Here is an example:
+\end_layout
+
+\begin_layout Standard
+\begin_inset listings
+inline false
+status open
+
+\begin_layout Plain Layout
+
+\begin_inset Caption
+
+\begin_layout Plain Layout
+Calling an anonymous function
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+import JE._
+\end_layout
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\begin_layout Plain Layout
+
+AnonFunc(ValById(
+\begin_inset Quotes eld
+\end_inset
+
+sometextfield
+\begin_inset Quotes erd
+\end_inset
+
+))).applied
+\end_layout
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\begin_layout Plain Layout
+
+//which will render the following JavaScript code:
+\end_layout
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\begin_layout Plain Layout
+
+function(){document.getElementById('sometextfield').value}()
+\end_layout
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+If you dig into code you'll see that apply function of the AnonFunc object
+ takes a JsCmd parameter but here we passed a JsExp.
+ This is ok because there is an implicit conversion from JsExp to JsCmd.
+ Please see the Lift API for JsCmd and JsExp subclasses.
+ You may find some plain Scala objects that do not extends JsExp or JsCmd
+ and yet they are used in JsExp.
+ That's becasue their apply functions return a JsExp or JsCmd.
+ There are other implicit functions defined to convert from String, Int,
+ Long etc.
+ to JsExp instances to ese up the code writing.
+\end_layout
+
+\begin_layout Standard
+Another important class is JsCommands.
+ It is actually used to chain JsCmd instances and construct a JavaScript
+ LiftResponse.
+ For example we can have:
+\end_layout
+
+\begin_layout Standard
+\begin_inset listings
+inline false
+status open
+
+\begin_layout Plain Layout
+
+\begin_inset Caption
+
+\begin_layout Plain Layout
+
+JsCommands example
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\begin_layout Plain Layout
+
+(JsCommands.create & Alert(
+\begin_inset Quotes eld
+\end_inset
+
+Hello
+\begin_inset Quotes erd
+\end_inset
+
+) & Alert(
+\begin_inset Quotes eld
+\end_inset
+
+Lift
+\begin_inset Quotes erd
+\end_inset
+
+)).toResponse
+\end_layout
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+The above will create the LiftResponse having text/javascript content-type
+ and calls subsequently JavaScript alert(
+\begin_inset Quotes eld
+\end_inset
+
+Hello
+\begin_inset Quotes erd
+\end_inset
+
+) and then alert(
+\begin_inset Quotes eld
+\end_inset
+
+Lift
+\begin_inset Quotes erd
+\end_inset
+
+).
+\end_layout
+
+\begin_layout Standard
+We barely scratched th surface of the JavaScript Scala API that Lift offers
+ and presented the fundamental classes.
+ It is not the scope of this book to discuss each ad every class but to
+ provide an understanding of the API.
+ If you have a large JavaScript code to build using Lift abstractions would
+ lead to more code to type so we recommend putting your code into a .js file
+ and include it in your page.
+ But for simple things Lift JS abstractions can be very useful.
+\end_layout
+
+\begin_layout Subsection
+JQuery and other JavaScript frameworks
+\end_layout
+
+\begin_layout Standard
+
\end_layout
\end_body
View
25 chap-ajax_comet.lyx
@@ -1,4 +1,4 @@
-#LyX 1.6.1 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.0 created this file. For more info see http://www.lyx.org/
\lyxformat 345
\begin_document
\begin_header
@@ -53,6 +53,29 @@ name "cha:AJAX-and-COMET"
\end_layout
+\begin_layout Standard
+\begin_inset Box Framed
+position "t"
+hor_pos "c"
+has_inner_box 0
+inner_pos "t"
+use_parbox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+status collapsed
+
+\begin_layout Plain Layout
+This chapter is still under active development.
+ The contents will change.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
\begin_layout Itemize
This is probably the place for the Spreadsheet example
\end_layout
View
28 chap-js_commands.lyx
@@ -1,4 +1,4 @@
-#LyX 1.6.1 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.0 created this file. For more info see http://www.lyx.org/
\lyxformat 345
\begin_document
\begin_header
@@ -54,8 +54,30 @@ name "cha:Lift-and-Javascript"
\end_layout
\begin_layout Standard
-11.
- JsCommands
+\begin_inset Box Framed
+position "t"
+hor_pos "c"
+has_inner_box 0
+inner_pos "t"
+use_parbox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+status collapsed
+
+\begin_layout Plain Layout
+This chapter is still under active development.
+ The contents will change.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+JsCommands
\end_layout
\begin_layout Itemize
View
28 chap-json.lyx
@@ -1,4 +1,4 @@
-#LyX 1.6.1 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.0 created this file. For more info see http://www.lyx.org/
\lyxformat 345
\begin_document
\begin_header
@@ -54,8 +54,30 @@ name "cha:JSON-Handling"
\end_layout
\begin_layout Standard
-10.
- JSON handling
+\begin_inset Box Framed
+position "t"
+hor_pos "c"
+has_inner_box 0
+inner_pos "t"
+use_parbox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+status collapsed
+
+\begin_layout Plain Layout
+This chapter is still under active development.
+ The contents will change.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+JSON handling
\end_layout
\begin_layout Standard
View
47 chap-lift_architecture.lyx
@@ -1,4 +1,4 @@
-#LyX 1.6.1 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.0 created this file. For more info see http://www.lyx.org/
\lyxformat 345
\begin_document
\begin_header
@@ -3770,6 +3770,51 @@ height
).map(_.toInt) openOr 300
\end_layout
+\begin_layout LyX-Code
+
+\end_layout
+
+\begin_layout LyX-Code
+Or you can use a slightly different approach:
+\end_layout
+
+\begin_layout LyX-Code
+
+\end_layout
+
+\begin_layout LyX-Code
+val width = S.param(
+\begin_inset Quotes eld
+\end_inset
+
+width
+\begin_inset Quotes erd
+\end_inset
+
+).dmap(400)(_.toInt)
+\end_layout
+
+\begin_layout LyX-Code
+val height = S.param(
+\begin_inset Quotes eld
+\end_inset
+
+height
+\begin_inset Quotes erd
+\end_inset
+
+).dmap(300)(_.toInt)
+\end_layout
+
+\begin_layout LyX-Code
+
+\end_layout
+
+\begin_layout LyX-Code
+Where dmap is identical with map function except the first argument is the
+ default value applicable in case that the Can is Empty.
+\end_layout
+
\begin_layout Standard
There are a number of other ListResponse subclasses to cover your needs,
including responses for XHTML, XML, Atom, Javascript, CSS, and JSON.
View
45 chap-lucene_compass.lyx
@@ -1,8 +1,9 @@
-#LyX 1.5.6 created this file. For more info see http://www.lyx.org/
-\lyxformat 276
+#LyX 1.6.0 created this file. For more info see http://www.lyx.org/
+\lyxformat 345
\begin_document
\begin_header
\textclass book
+\use_default_options false
\language english
\inputencoding auto
\font_roman default
@@ -13,9 +14,11 @@
\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
@@ -44,13 +47,49 @@ Lucene/Compass Integration
\end_layout
\begin_layout Standard
-Search is a requirement for any app
+\begin_inset Box Framed
+position "t"
+hor_pos "c"
+has_inner_box 0
+inner_pos "t"
+use_parbox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+status collapsed
+
+\begin_layout Plain Layout
+This chapter is still under active development.
+ The contents will change.
+\end_layout
+
+\end_inset
+
+
\end_layout
\begin_layout Standard
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Note Note
+status open
+
+\begin_layout Plain Layout
+Search is a requirement for any app
+\end_layout
+
+\begin_layout Plain Layout
Dave has some code in ESME for this, I'll ask if we can pinch it as a starting
point.
\end_layout
+\end_inset
+
+
+\end_layout
+
\end_body
\end_document
View
54 chap-openid.lyx
@@ -1,8 +1,9 @@
-#LyX 1.5.6 created this file. For more info see http://www.lyx.org/
-\lyxformat 276
+#LyX 1.6.0 created this file. For more info see http://www.lyx.org/
+\lyxformat 345
\begin_document
\begin_header
\textclass book
+\use_default_options false
\language english
\inputencoding auto
\font_roman default
@@ -13,9 +14,11 @@
\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
@@ -43,15 +46,42 @@
OpenID Integration
\end_layout
+\begin_layout Standard
+\begin_inset Box Framed
+position "t"
+hor_pos "c"
+has_inner_box 0
+inner_pos "t"
+use_parbox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+status collapsed
+
+\begin_layout Plain Layout
+This chapter is still under active development.
+ The contents will change.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+\begin_inset Note Note
+status open
+
\begin_layout Itemize
OpenID
\end_layout
-\begin_deeper
\begin_layout Itemize
Rolled into lift-proper a while ago
\end_layout
+\begin_deeper
\begin_layout Itemize
Overview of OpenID, no politics :)
\end_layout
@@ -87,6 +117,11 @@ How?
\end_layout
\end_deeper
+\end_inset
+
+
+\end_layout
+
\begin_layout Section
What is OpenID?
\end_layout
@@ -96,9 +131,14 @@ The OpenID Foundation
\begin_inset Foot
status open
-\begin_layout Standard
-\begin_inset LatexCommand htmlurl
-target "http://openid.net/"
+\begin_layout Plain Layout
+\begin_inset Flex URL
+status collapsed
+
+\begin_layout Plain Layout
+
+http://openid.net/
+\end_layout
\end_inset
@@ -107,7 +147,7 @@ target "http://openid.net/"
\end_inset
- as:
+ explain OpenID as:
\end_layout
\begin_layout Quotation
View
51 chap-tagging.lyx
@@ -1,8 +1,9 @@
-#LyX 1.5.6 created this file. For more info see http://www.lyx.org/
-\lyxformat 276
+#LyX 1.6.0 created this file. For more info see http://www.lyx.org/
+\lyxformat 345
\begin_document
\begin_header
\textclass book
+\use_default_options false
\language english
\inputencoding auto
\font_roman default
@@ -13,9 +14,11 @@
\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
@@ -44,22 +47,53 @@ Tagging Support
\end_layout
\begin_layout Standard
-Planning:
+\begin_inset Box Framed
+position "t"
+hor_pos "c"
+has_inner_box 0
+inner_pos "t"
+use_parbox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+status collapsed
+
+\begin_layout Plain Layout
+This chapter is still under active development.
+ The contents will change.
+\end_layout
+
+\end_inset
+
+
\end_layout
\begin_layout Standard
-- What are tags?
+
\end_layout
\begin_layout Standard
+\begin_inset Note Note
+status open
+
+\begin_layout Plain Layout
+Planning:
+\end_layout
+
+\begin_layout Plain Layout
+- What are tags?
+\end_layout
+
+\begin_layout Plain Layout
- Why Tags?
\end_layout
-\begin_layout Standard
+\begin_layout Plain Layout
- Go other the tag architecture
\end_layout
-\begin_layout Standard
+\begin_layout Plain Layout
- Add Tagging to PocketChange
\end_layout
@@ -98,5 +132,10 @@ AfterSave
\end_layout
+\end_inset
+
+
+\end_layout
+
\end_body
\end_document
View
39 chap-url_rewrite.lyx
@@ -1,8 +1,9 @@
-#LyX 1.5.6 created this file. For more info see http://www.lyx.org/
-\lyxformat 276
+#LyX 1.6.0 created this file. For more info see http://www.lyx.org/
+\lyxformat 345
\begin_document
\begin_header
\textclass book
+\use_default_options false
\language english
\inputencoding auto
\font_roman default
@@ -13,9 +14,11 @@
\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
@@ -44,6 +47,33 @@ URL Rewriting
\end_layout
\begin_layout Standard
+\begin_inset Box Framed
+position "t"
+hor_pos "c"
+has_inner_box 0
+inner_pos "t"
+use_parbox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+status open
+
+\begin_layout Plain Layout
+This chapter is still under active development.
+ The contents will change.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Note Note
+status open
+
+\begin_layout Plain Layout
What is URL rewriting
\end_layout
@@ -68,5 +98,10 @@ Example: user-friendly URLs
Example: REST API pattern
\end_layout
+\end_inset
+
+
+\end_layout
+
\end_body
\end_document
View
43 chap-web_services.lyx
@@ -1,8 +1,9 @@
-#LyX 1.5.6 created this file. For more info see http://www.lyx.org/
-\lyxformat 276
+#LyX 1.6.0 created this file. For more info see http://www.lyx.org/
+\lyxformat 345
\begin_document
\begin_header
\textclass book
+\use_default_options false
\language english
\inputencoding auto
\font_roman default
@@ -13,9 +14,11 @@
\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
@@ -44,6 +47,37 @@ Web Services
\end_layout
\begin_layout Standard
+\begin_inset Box Framed
+position "t"
+hor_pos "c"
+has_inner_box 0
+inner_pos "t"
+use_parbox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+status collapsed
+
+\begin_layout Plain Layout
+This chapter is still under active development.
+ The contents will change.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Note Note
+status open
+
+\begin_layout Plain Layout
Planning:
\end_layout
@@ -83,5 +117,10 @@ SteveJ gave us the go-ahead to use his stuff.
It will have to be updated to the latest.
\end_layout
+\end_inset
+
+
+\end_layout
+
\end_body
\end_document
View
44 chap-widgets.lyx
@@ -1,8 +1,9 @@
-#LyX 1.5.6 created this file. For more info see http://www.lyx.org/
-\lyxformat 276
+#LyX 1.6.0 created this file. For more info see http://www.lyx.org/
+\lyxformat 345
\begin_document
\begin_header
\textclass book
+\use_default_options false
\language english
\inputencoding auto
\font_roman default
@@ -13,9 +14,11 @@
\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
@@ -44,6 +47,37 @@ Lift Widgets
\end_layout
\begin_layout Standard
+\begin_inset Box Framed
+position "t"
+hor_pos "c"
+has_inner_box 0
+inner_pos "t"
+use_parbox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+status collapsed
+
+\begin_layout Plain Layout
+This chapter is still under active development.
+ The contents will change.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Note Note
+status open
+
+\begin_layout Plain Layout
Planning:
\end_layout
@@ -65,5 +99,11 @@ Figure out how to get your data in there and what you can about controlling
and wrap it the loving embrace of lift.
\end_layout
+\end_deeper
+\end_inset
+
+
+\end_layout
+
\end_body
\end_document
Please sign in to comment.
Something went wrong with that request. Please try again.