[parenscript-devel] best practice for developing a JS-only HTML5 webapp?
Jon Rosebaugh
chairos at gmail.com
Sat Jan 8 21:44:38 UTC 2011
As I said in the subject, I'm working on a JS-only (no server-side
code) HTML5 webapp in Parenscript with jQuery. I have extensive JS
experience, but I'm really new to Common Lisp.
I wanted a setup where I could edit a Parenscript file, hit save, then
hit refresh in my browser and immediately see the new code, just as if
I were working in Javascript. I built a little server using
Hunchentoot and cl-who that runs ps-compile-file on my parenscript
source file as needed. This works fairly well, but maybe is not the
best way to accomplish this.
However, there's a problem; I wanted to use parenscript functions
without the namespace, so I defined a package in serve.lisp that uses
parenscript, then put (in-package :innkeeper) at the top of my
parenscript file. This doesn't work properly in the 2.2 release of
Parenscript (which is what Quicklisp provides). It _does_ work in the
git repo version (as of commit
0e01e555f404a7dcb8befb7587288c38abf526c2), but it's annoying to not be
able to use Quicklisp for everything.
Once I have a release version I'll want to come up with some lisp
program that compiles the parenscript to javascript, minifies it, and
sticks it in an also-minified html file from cl-who, so the whole
thing is compiled down to a single file. I'd appreciate any
best-practice tips on that too.
Just in case my description was unclear, here's what I think are the
relevant bits. If needed, I can provide the entire files off-list.
; relevant bits of serve.lisp
(defpackage "INNKEEPER"
(:use "COMMON-LISP" "HUNCHENTOOT" "CL-WHO" "PARENSCRIPT")
(:export :start-innserver :stop-innserver))
(in-package :innkeeper)
(define-easy-handler (jsgen :uri "/innkeeper.js") ()
(setf (content-type*) "application/javascript")
(ps-compile-file "/Users/jon/code/innkeeper/innkeeper.lisp"))
; beginning (and a few representative lines) of innkeeper.lisp
(in-package :innkeeper)
(defmacro immediate (&body body)
`((lambda () , at body)))
(var *inn*
(create
setup (lambda () ((@ ($ "#top-tabs") tabs)))))
(j-query #'(@ *inn* setup))
More information about the parenscript-devel
mailing list