LeftParen 0.3 Documentation
Website: http://leftparen.com
LeftParen is a framework for quickly creating web apps. It runs on PLT Scheme v4.1 or greater. LeftParen is released under an MIT License. The source is available on github.
1 Installing LeftParen
You’ll need PLT Scheme v4.1 or greater installed.
Make sure that mzscheme is in your path. You should be ready to go if you can do this:
% mzscheme |
Welcome to MzScheme v4.1... |
> |
Installing LeftParen is done behind the scenes with a PLaneT require. See Tutorials for an example of this. When you first issue one of these require commands, you’ll automatically download the LeftParen files to your local PLaneT cache. This can sometimes take a few moments, so be prepared to wait a bit.
2 Tutorials
2.1 Hello, World
We’re going to make a project called hello-world. Change to the directory that you’d like to make the project in. Then issue
% mzscheme -e '(require (planet "bootstrap.scm" ("vegashacker" "leftparen.plt" 2 1)))' project hello-world |
This will create a hello-world project directory for you. In this directory you’ll find the script directory, which contains some useful scripts. All paths are relative to this project directory, so when calling scripts, you always want to be at the project root.
% cd hello-world |
We need to make the scripts executable:
% chmod u+x script/* |
LeftParen has automatically generated everything we need to run our web app – we just need to start the server (again, you should be at the project root directory):
% ./script/server |
Web server started on port 8765 |
Listening on IP address: 127.0.0.1 |
Type stop to stop the server and exit |
Type restart to restart the server |
Point your browser to http://localhost:8765 and you should see a familiar greeting:
Hello, World!
2.2 Blogerton the Blog
Now let’s try implementing the true "hello world" of web apps – a blog. First, execute the following commands from the directory in which you want to create your project directory:
% mzscheme -e '(require (planet "bootstrap.scm" ("vegashacker" "leftparen.plt" 2 1)))' project blogerton |
% cd blogerton |
% chmod u+x script/* |
2.2.1 Changes to app.scm
We need to register a couple of pages in our app. The index-page was already set up for you, but you’ll need to add a page to create new posts, and one to view them. Make the define-app call look like this:
(define-app my-app |
(index-page (url "/")) |
(create-post-page (url "/post")) |
(view-post-page (url "/view/" (string-arg)))) |
2.2.2 Changes to main.scm
Now we need to define those pages that we declared in app.scm.
(define-page (index-page req) |
(** `(h1 "Blogerton") |
`(p ,(web-link "Create a new post" (page-url create-post-page))) |
`(ul ,@(map (lambda (p) `(li ,(paint-blog-post p))) |
(load-where '((type . blog-post)) |
#:sort-by 'created-at #:compare >))))) |
|
(define-page (create-post-page req) |
(form '((title "Title" text) (body "Body" long-text)) |
#:init '((type . blog-post)) |
#:on-done (lambda (post) (redirect-to-page view-post-page (rec-id post))))) |
|
(define-page (view-post-page req post-id) |
(paint-blog-post (load-rec post-id #:ensure '((type . blog-post))))) |
|
(define (paint-blog-post post) |
`(div (h2 ,(rec-prop post 'title)) |
(p ,(rec-prop post 'body)))) |
2.2.3 Launch Blogerton
You’re ready for launch. Start the server with
% ./script/server |
and you should have a basic blogging app, with persistent data, in 19 lines of code.
3 More Documentation to Come
We need to get a full LeftParen reference up (not just simple tutorials). There’s lots more cool stuff in LeftParen that this document doesn’t yet address.
4 About/Acknowledgements
LeftParen was written by Rob Hunter, but it builds heavily on (and, in fact, often directly incorporates) the work of Untyped (instaservlet and dispatch), Jens Axel Soegaard (web.plt), and of course, PLT Scheme.