[Bese-devel] Patches for ucw_ajax to reduce javascript size

Denys Rtveliashvili rtvd at mail.ru
Sat Jul 29 18:30:47 UTC 2006


Hi Attila,

I made two patches for ucw_ajax that reduce the javascript size on
pages. When applied together, they reduce the "Form example" page size
from approximately 38 000 to 18 000 bytes. And there are some
optimizations which can be additionally made, but I did not do them yet.

One of the patches extracts and simplifies much of javascript code for
registering fields, creating validators and so on. Another one makes it
possible to collect javascript code within an HTML form or another
region of a page and then write it as a single piece, thus removing a
lot of <script> </script> tags.

Could you, please, take a look at the patches attached to this email and
include them into ucw_ajax if it is appropriate? I suppose I may not
push the patches to the ucw_ajax repository myself.

Thank you,
Denys R

P.S. I am leaving for vacations, so I will be unavailable for 7-10 days.
-------------- next part --------------

New patches:

[Added a special marco that collects JavaScript code and emits it only at the end. Wrapped <ucw:forms with it.
Denys Rtveliashvili <rtvd at mac.com>**20060728050347] {
hunk ./src/packages.lisp 384
-   #:script))
+   #:script
+   #:collect-scripts))
hunk ./src/yaclml/ucw-tags.lisp 76
+(defvar *javascript-collector* nil)
+
+; set *collect-javascript* to T if you want <ucw:collect-scrpits to collect
+; JavaScript code and emit it only at the end. Nil value disables this behavior.
+(defconstant *collect-javascript* t)
+
+(deftag-macro <ucw:collect-scripts (&body body)
+  (let ((collected-value-name (gensym)))
+	`(progn (let ((*javascript-collector*
+				   (if *collect-javascript* "" nil)))
+			  , at body
+			  (setf ,collected-value-name *javascript-collector*))
+			  (if (and ,collected-value-name (> (length ,collected-value-name) 0))
+				  (if *javascript-collector*
+					  (setf *javascript-collector*
+							(concatenate 'string *javascript-collector* ,collected-value-name))
+					  (<:script :type "text/javascript"
+								(<:as-is :quotedp t ,collected-value-name)))))))
+
hunk ./src/yaclml/ucw-tags.lisp 130
-  `(<:script :type "text/javascript"
-             (<:as-is :quotedp t
-                      ,(if compile-time-p
-                           (iter (for expr in body)
-                                 (collect (js:js* (eval expr)) :into result)
-                                 (finally (return (apply #'concatenate 'string result))))
-                           `(js:js* , at body)))))
+  `(let ((javascript-code
+		  ,(if compile-time-p
+			   (iter (for expr in body)
+					 (collect (js:js* (eval expr)) :into result)
+					 (finally (return (apply #'concatenate 'string result))))
+			   `(js:js* , at body))))
+	(if *javascript-collector*
+		(setf *javascript-collector*
+			  (concatenate 'string *javascript-collector* javascript-code))
+		(<:script :type "text/javascript"
+				  (<:as-is :quotedp t javascript-code)))))
hunk ./src/yaclml/ucw-tags.lisp 342
+		  (<ucw:collect-scripts
hunk ./src/yaclml/ucw-tags.lisp 376
-                     `(setf form.ucw-approve-abandoning ,,abandon-handler))))))))))
+                     `(setf form.ucw-approve-abandoning ,,abandon-handler)))))))))))
}

Context:

[Hrm, update dojo again and do not include Firebug
attila.lendvai at gmail.com**20060717110404] 
[Added a dojo-split-container to the examples
attila.lendvai at gmail.com**20060716183944] 
[Added with-this js macro
attila.lendvai at gmail.com**20060716183516] 
[Added dojo-split-container, and some dojo-widget features
attila.lendvai at gmail.com**20060716183326] 
[Updated dojo, added SplitContainer
attila.lendvai at gmail.com**20060716182825] 
[Introduce an 'orientation' slot on list-container, needed by dojo-split-container
attila.lendvai at gmail.com**20060716165935] 
[Added the dojo-tab-example to itself recursively
attila.lendvai at gmail.com**20060716084118] 
[Some more AJAX rendering infrastructure for later patches
attila.lendvai at gmail.com**20060715194350] 
[Added a dojo-tab-container example
attila.lendvai at gmail.com**20060715170118] 
[Added dojo-widgets.lisp
attila.lendvai at gmail.com**20060715165946] 
[Updated dojo.js, included TabContainer templates
attila.lendvai at gmail.com**20060715165750] 
[It's not a smart idea to isolate entry point actions...
attila.lendvai at gmail.com**20060715115353] 
[Better error reporting in the client side JS
attila.lendvai at gmail.com**20060715115308] 
[Added render-widget-wrapper
attila.lendvai at gmail.com**20060715113927
 
 widget-component renders its wrapper tag in :wrap-around. this is the first method that
 is called and in least-specific-first order, so it was not possible to further
 wrap a widget.
 
 the upcoming dojo-widgets need finer control on this wrapping, therefore this
 method was introduced. i'm not too happy with this change, but i can't think of any other
 solution. the dojo widgets render two levels of wrapping, one for the dojo widget and
 most of the time when the dojo widget is also a simple widget then another level for
 the simple widget. the problem comes with ajax, because it's not allowed to replace
 the dom node of the dojo widget, so we must render a dojo widget so that the widget
 div is not rendered when ajax rendering is in progress, so the client side will replace
 the inner wrapper rendered by the simple widget. ehh, long story...
] 
[Added basic-window-features-mixin and smartened up simple-window
attila.lendvai at gmail.com**20060714103437
 
 The new mixin provides all the features simple-window used to provide without the
 default JS includes that UCW requires.
 
 simple-window adds the JS includes that are needed for UCW to function properly.
 
 window title may be a lambda with one arg, the window object
 
 :js scripts are now xml-quoted
] 
[Various smallies, mostly cosmetic changes
attila.lendvai at gmail.com**20060710194738] 
[Use dojo.event.connect to register handlers in <ucw: tags
attila.lendvai at gmail.com**20060710192901] 
[Use defucwlogger also in l10n-application
attila.lendvai at gmail.com**20060710113427] 
[Added new-callback-id to get a unique callback id in a given frame
attila.lendvai at gmail.com**20060711080127] 
[Integrated modular-application into standard-application (WARNING: api)
attila.lendvai at gmail.com**20060710111828
 
 The changes are:
 - modular-application and modular-application-mixin are gone
 - *-module -> *-mixin
 - effective-context-definition -> request-context-class
] 
[parenscript-handler updated to reflect new js:compile-parenscript-file-to-string changes.
evrim at core.gen.tr*-20060709102712
 (parenscript-dispatcher) function is updated to reflect changes. *Warning* API changed.
] 
[keyword definitions of session,frame,action parameters added to std-vars.
evrim at core.gen.tr**20060704144237] 
[Introducing a new generic method for std-component: 
evrim at core.gen.tr**20060709144801
 
 (defgeneric descendant-p (parent child &optional recursive-p)
   (:documentation "Predicate to use whether child is a child of parent."))
] 
[parenscript-handler updated to reflect new js:compile-parenscript-file-to-string changes.
evrim at core.gen.tr**20060709102712
 (parenscript-dispatcher) function is updated to reflect changes. *Warning* API changed.
] 
[Fix some indentations
attila.lendvai at gmail.com**20060710000755] 
[Made the AJAX stuff work on ie 6.0.2900 (ie sp2)
attila.lendvai at gmail.com**20060710000415] 
[Added default onbeforeunload event handler that checks for dirty forms when leaving the page
attila.lendvai at gmail.com**20060708144206] 
[Do not intern gensymed stuff at compile time in parenscript-utils.lisp
attila.lendvai at gmail.com**20060708144115] 
[Pulled missing patches from _dev and undo'd them by hand
attila.lendvai at gmail.com**20060707215004] 
[Added a with-url-prefix keyword param to :src javascript entries
attila.lendvai at gmail.com*-20060626220600] 
[Added a with-url-prefix keyword param to :src javascript entries
attila.lendvai at gmail.com**20060626220600] 
[TAG 2006-06-23
attila.lendvai at gmail.com**20060623091256] 
[Merge dev/ajax conflict in l10n example
attila.lendvai at gmail.com**20060618154956] 
[Backport examples to the dev branch (fix it :)
attila.lendvai at gmail.com**20060618142159] 
[- :initarg :dispatchers added std-application.
evrim at core.gen.tr**20060612171540] 
[- std-application default dispatchers are now provided from via initform.
evrim at core.gen.tr**20060607125015] 
[- removed shared-init :after method of std-application, default dispathers are now in :initform
evrim at core.gen.tr**20060607124939] 
[Support abandon-handlers in simple-form
attila.lendvai at gmail.com**20060707173329] 
[Support various form abandon handlers
attila.lendvai at gmail.com**20060707173319
 
 When the page will be abandoned UCW checks the pendings forms. Each modified form
 is asked for approval. There are three standard policies for <ucw:form
 
 1) :ask-user (the default) Pop up a dialog for user confirmation
 2) :auto-submit Silently submit the form without an action
 3) nil Do nothing
] 
[Demonstrate form abandon policies in the examples
attila.lendvai at gmail.com**20060707173312] 
[Rethrow errors in with-ucw-error-handler but only show them once
attila.lendvai at gmail.com**20060707172432] 
[Support action-href calls with nil action
attila.lendvai at gmail.com**20060707172045] 
[Various small fixes
attila.lendvai at gmail.com**20060707171937] 
[Follow parenscript changes
attila.lendvai at gmail.com**20060707171855] 
[Added :toplevel and :compile-time parameters to <ucw:script
attila.lendvai at gmail.com**20060707151211
 
 See docstring for details.
] 
[Fix AJAX form submission not to ask the form being submitted for approval
attila.lendvai at gmail.com**20060705183741] 
[Smartened up <ucw:form and form-fields
attila.lendvai at gmail.com**20060705180957
 
 <ucw:form generated forms register themselves in a page-global form registry
 and form-fields are also connected to forms. This was needed for the next patch
 that makes it possible for forms to interact with page reloading either to
 autosubmit or to let the user cancel the page reload. 
] 
[AJAXified the form example demonstrating form dirtyness checking
attila.lendvai at gmail.com**20060705180417] 
[Updated dojo, included Dictionary
attila.lendvai at gmail.com**20060705174338] 
[Simplified/unified client side js action/form submission
attila.lendvai at gmail.com**20060705111227] 
[Refactored dispatchers so that it's possible to submit a form without an action
attila.lendvai at gmail.com**20060704234351] 
[Add invocation id also when actions are invocated with AJAX
attila.lendvai at gmail.com**20060704161103] 
[Disable <:html's :prologue, UCW renders its own DOCTYPE line
attila.lendvai at gmail.com**20060704160101] 
[Added a allow-ajax-rendering-restart to ajax-component-mixin, see docstring for details
attila.lendvai at gmail.com**20060704155859] 
[Added some TODO entries
attila.lendvai at gmail.com**20060704113407] 
[Some fixups for the AJAX version of the dispatchers
attila.lendvai at gmail.com**20060704105850] 
[Fix: silly js needs explicit returns...
attila.lendvai at gmail.com**20060703215952] 
[Fix <ucw:form with isolated actions, evaluation time thinko
attila.lendvai at gmail.com**20060703195722] 
[removed dependency on cl-l10n for allegro and openmcl
Henrik Hjelte <henrik at evahjelte.com>**20060703112938] 
[Support invocation-isolated actions when submitted through forms
attila.lendvai at gmail.com**20060703185825] 
[Added missing load-op of :ucw in start.lisp
attila.lendvai at gmail.com**20060703134948] 
[Alter example loading description in the README
attila.lendvai at gmail.com**20060703132401] 
[Follow compile-time-level logger changes in Arnesi
attila.lendvai at gmail.com**20060703172328] 
[Only load the l10n examples on clisp and sbcl
attila.lendvai at gmail.com**20060703131652] 
[Export config variables in the ucw.system package
attila.lendvai at gmail.com**20060703124921
 
 Which makes it possible to set the variables between (asdf:find-system :ucw)
 and (asdf:oos 'asdf:load-op :ucw) when loading UCW programmatically in a
 customized way.
] 
[Clear some config vars, so asdf-loading :ucw has no other side effects
attila.lendvai at gmail.com**20060703122907] 
[Added a *ucw-compile-time-log-level*, see docstring for details
attila.lendvai at gmail.com**20060702221950] 
[Minor indentation fix
attila.lendvai at gmail.com**20060702221910] 
[Fix loading the l10n example so that cl-l10n doesn't warn
attila.lendvai at gmail.com**20060702120642] 
[Fix flush-request-response call in tal-handler
attila.lendvai at gmail.com**20060702003000] 
[Moved back debug-on-error into protocol.lisp
attila.lendvai at gmail.com**20060702000159] 
[Added extensive examples describing action isolation and backtracking with and without ajax
attila.lendvai at gmail.com**20060701233329] 
[Do not render <:html and <:body in info-message if there's a parent
attila.lendvai at gmail.com**20060701233210] 
[Fix cache examples
attila.lendvai at gmail.com**20060701233138] 
[Issue an (in-package :ucw-user) after loading the example system
attila.lendvai at gmail.com**20060701225123] 
[Implemented invocation-isolated actions
attila.lendvai at gmail.com**20060701224642
 
 These actions are guaranteed to be executed once per user action. For details
 see next patch that adds examples with extensive descriptions.
] 
[removing now unused default.lisp
Nathan Bird <nathan at acceleration.net>**20060630194342] 
[moving configuration into :ucw package, merging default.lisp into vars.lisp
Nathan Bird <nathan at acceleration.net>**20060630193756] 
[use the *ucw-swank-port* as default swank port
Nathan Bird <nathan at acceleration.net>**20060630184217] 
[eval-when goodness to facilitate ucwctl loading
Nathan Bird <nathan at acceleration.net>**20060630184157] 
[Merge conflicts with start refactor in ucw_dev
attila.lendvai at gmail.com**20060630175241] 
[Further simplify loading mostly based on Nathan Bird's ideas
attila.lendvai at gmail.com**20060630165226] 
[make-displaced-array has been moved to arnesi
attila.lendvai at gmail.com**20060630081327] 
[Use iter in split-on-space and avoid an nreverse
attila.lendvai at gmail.com**20060629234204] 
[Only start swank from the asd when *ucw-swank-port* is not nil
attila.lendvai at gmail.com**20060630001834] 
[Fix read-line-from-network in httpd backend
attila.lendvai at gmail.com**20060629231051] 
[Resolve conflicts with the dev branch with find-action
attila.lendvai at gmail.com**20060629221634] 
[- fixed %100 cpu utilization when action-id is not specified in the URL.
evrim at core.gen.tr**20060628205417] 
[- effective-context-definition exported for external app-module definitions.
evrim at core.gen.tr**20060627150948] 
[Added missing parenscript-utils dependency to components in the asd
attila.lendvai at gmail.com**20060629220033] 
[Fix isolated action handling
attila.lendvai at gmail.com**20060629215837] 
[Move some stuff from start.lisp into ucw.asd
attila.lendvai at gmail.com**20060628084944] 
[Convert external-format-for into a defun
attila.lendvai at gmail.com**20060627141634] 
[Fix application-directory handling in config.lisp
attila.lendvai at gmail.com**20060626075804] 
[exports for modular-application
aycan.irican at core.gen.tr**20060625164051] 
[Added a :with-url-prefix keyword param to javascript entries in window.lisp
attila.lendvai at gmail.com**20060626231522] 
[Call threaded-lisp-p at load-time to avoid a warning
attila.lendvai at gmail.com**20060625130223] 
[Get rid of the eval defclass in modular-application
attila.lendvai at gmail.com**20060625124728] 
[Merge dispatcher and application refactor with the dev branch
attila.lendvai at gmail.com**20060625122021] 
[Make sure context.locale is always a list
attila.lendvai at gmail.com**20060625105538] 
[fixed asd file for modular-applications.
evrim at core.gen.tr**20060624092237] 
[added security-module.lisp
evrim at core.gen.tr**20060624092227] 
[added modular-application.lisp which specifies modular applications.
evrim at core.gen.tr**20060624092154] 
[added l10n-module.lisp
evrim at core.gen.tr**20060624092113] 
[cookie-module.lisp added.
evrim at core.gen.tr**20060624092045] 
[added LICENCE file.
evrim at core.gen.tr**20060624092032] 
[fixed type in l10n-example -> *l10n-example-appication*
evrim at core.gen.tr**20060624083531] 
[added src/rerl/modular-application direcorty.
evrim at core.gen.tr**20060624083452] 
[l10n.lisp removed. moved to modular-applications.
evrim at core.gen.tr**20060623201634] 
[secure-application.lisp removed. moved to modular-applications.
evrim at core.gen.tr**20060623201102] 
[cookie-session.lisp removed. moved to modular-applications.
evrim at core.gen.tr**20060623200752] 
[Define shared-initialize :after, not a shared-initialize whose first form in (call-next-method)
Marco Baringer <mb at bese.it>**20060622121056] 
[Fix the fix for dispatcher priority
attila.lendvai at gmail.com**20060619095536] 
[action-dispatcher created with nil priority
Alexey Antipov <door at lcpi.ru>**20060619073557] 
[- merged conflicts with current dev-branch. tal-matcher updated according to marcos's ends-width patch.
evrim at core.gen.tr**20060618232521] 
[- Introducing the new dispatcher implementation. now we have reusable
evrim at core.gen.tr**20060618201426
   matchers and handlers. API didn't change a lot for now. Only change
   is two arg'ed handler lambda()'s are replaced with zero arg-ed one's
   to form up a standard. Old arguments like application and context
   can be reached via special *context*. Please see also previous patch
   comments for more info about what may have changed.
] 
[- ucw example application fixed to reflect changes in new dispacther
evrim at core.gen.tr**20060618174543
   api.
] 
[- ucw admin application dispatchers fixed to reflect new dispatcher
evrim at core.gen.tr**20060618174507
   api.
] 
[- ensure-session moved to std-application class.
evrim at core.gen.tr**20060618174430] 
[- defentry-point fixed accoring to new disaptcher implementation. It
evrim at core.gen.tr**20060618174311
   now creates a zero-arged lambda function for action handling.
] 
[- fixed exports for new dispatcher implementaion. exported dispatchers:
evrim at core.gen.tr**20060618174208
 * action-dispatcher
 * minimal-dispatcher
 * simple-dispatcher
 * parenscript-dispatcher
 * url-dispatcher
 * regexp-dispatcher
 * tal-dispatcher
 - *dispatcher-registers* is un-exported since it does not exists anymore.
] 
[- flush-request-response() moved to object std-request-context.
evrim at core.gen.tr**20060618173902] 
[Render custom checkbox images so that the page is not scrolled when they are clicked
attila.lendvai at gmail.com**20060623214228] 
[Merge conflicts with dev branch in forms.lisp
attila.lendvai at gmail.com**20060623083756] 
[Merge conflicts with Pupeno's last patch
Marco Baringer <mb at bese.it>**20060622123735] 
[Be able to define accesskey in other input fields than text.
Jos?? Pablo Ezequiel "Pupeno" Fern??ndez Silva <pupeno at pupeno.com>**20060621132840] 
[Be able to specify accesskey for input elemnts.
Jos?? Pablo Ezequiel "Pupeno" Fern??ndez Silva <pupeno at pupeno.com>**20060621131657] 
[Re-place comments (email and regexp validator).
Jos?? Pablo Ezequiel "Pupeno" Fern??ndez Silva <pupeno at pupeno.com>**20060621124750] 
[Export min and max -length for the length-validator.
Jos?? Pablo Ezequiel "Pupeno" Fern??ndez Silva <pupeno at pupeno.com>**20060621122848] 
[Err, really fix the content-length header this time
attila.lendvai at gmail.com**20060620193145] 
[Fix content-length header in serv-* backend methods
attila.lendvai at gmail.com**20060620134510] 
[Esperanto translation.
Jos?? Pablo Ezequiel "Pupeno" Fern??ndez Silva <pupeno at pupeno.com>**20060619101131] 
[Spanish translation.
Jos?? Pablo Ezequiel "Pupeno" Fern??ndez Silva <pupeno at pupeno.com>**20060619095043] 
[Display the locale preference list in the l10n example
attila.lendvai at gmail.com**20060618211355] 
[Make the l10n tal example an embeddable non-window component
attila.lendvai at gmail.com**20060618153512] 
[Better way to load the examples in the README
attila.lendvai at gmail.com**20060618142128] 
[Fix last patch (by Alberto Santini <albertosantini at gmail.com>)
Maciek Pasternacki <maciekp at japhy.fnord.org>**20060617173114] 
[Fix an IE date header problem (by Lou Vanek <vanek at acd.net>)
Maciek Pasternacki <maciekp at japhy.fnord.org>**20060617134808] 
[Use indefinit articles in l10n example
attila.lendvai at gmail.com**20060618143451] 
[Fix simple-form and simple-submit
attila.lendvai at gmail.com**20060618135049] 
[New l10n and i18n example
attila.lendvai at gmail.com**20060618134812] 
[Add :www-roots default initarg
attila.lendvai at gmail.com**20060618134443] 
[Fixed some glitches to make (progn (require :ucw) (load "ucw/etc/start.lisp")) work out of the box
attila.lendvai at gmail.com**20060618114506] 
[Get rid of accidental listify, use ensure-list
attila.lendvai at gmail.com**20060618114006] 
[Added with-ucw-error-handler js macro
attila.lendvai at gmail.com**20060617175926] 
[Some more l10n work
attila.lendvai at gmail.com**20060617175729] 
[Merge ajax/dev branch conflicts
attila.lendvai at gmail.com**20060617143355] 
[Export make-request-context and cookie-session-request-context
attila.lendvai at gmail.com**20060617132000] 
[Rename i18n to l10n. restructure files. move cl-l10n dependncy to ucw.l10n system (off of ucw)
Marco Baringer <mb at bese.it>**20060617123925] 
[Added :initarg to extension slot of tal-dispatcher
Marco Baringer <mb at bese.it>**20060616153433] 
[Use IF instead of AIF since the it binding is nevere referenced.
Marco Baringer <mb at bese.it>**20060616153418] 
[Remover spurious cons in read-from-client-string
Marco Baringer <mb at bese.it>**20060616153209] 
[Update (setf container.current-component)'s docstring
Marco Baringer <mb at bese.it>**20060616153139] 
[set arnesi:*warn-undefined* to NIL to avoid problems with asdf+sbcl
Marco Baringer <mb at bese.it>**20060616152852] 
[Adds a class html-element and makes it superclass of the widgets and form inputs. Also fixes some inconsistencies in 
marijn at haverbeke.nl**20060613220202
 components/form.lisp.
] 
[Minor indentation fix
Marco Baringer <mb at bese.it>**20060607120319] 
[Changed the tal-dispatcher to only look for tals files for specific urls (defaults to those ending in .ucw)
Marco Baringer <mb at bese.it>**20060607120228] 
[Lazy create the isolate-hash hashtable
attila.lendvai at gmail.com**20060616150043] 
[Use the $ js macro in form.lisp
attila.lendvai at gmail.com**20060616140112] 
[Since we're alread using dojo we might as well use all the shortcuts it provides
Marco Baringer <mb at bese.it>**20060607120422] 
[Small i18n fix and comment
attila.lendvai at gmail.com**20060616123417] 
[Added enabled/disabled image/tooltip support to checkbox
attila.lendvai at gmail.com**20060614152854] 
[Add cl-l10n dependency to the docs
attila.lendvai at gmail.com**20060616115153] 
[cl-l10n integration (WARNING: i18n api change)
attila.lendvai at gmail.com**20060616111739
 
 The stuff in i18n.lisp has been revisited. Most of the locale values are
 cl-l10n locale instances or locale names that the cl-l10n locale function
 understands.
 
 If you subclass i18n-application then each request will bind *locale* according
 to the client's browser settings. Most of the time it's a list in which case *locale*
 will be bound to this list and resource lookups will try each locale in this list
 until the resource is found. The application's default locale is always appended
 to the end of this list when it's not already in it. 
] 
[Only return the (absolute) path in map-query-path-to-file when it has a filename part
attila.lendvai at gmail.com**20060616110635] 
[Cache the cl-ppcre:scanner for the url-string in a regexp dispatcher.
Nathan Bird <nathan at acceleration.net>**20060613151409
 
 Profiling showed that a LOT of time and memory was spent creating scanners.
 Do the regexp compilation once, and reuse the scanner for all requests.
 
 If the url-string on the regexp-dispatcher is changed then the scanner
 will be recreated.
] 
[Fix call-callbacks dependencies
attila.lendvai at gmail.com**20060613161714] 
[Smarten up callbacks (WARNING: api change)
attila.lendvai at gmail.com**20060613155947
 
 With this patch callbacks are stored in a defstruct. 
 
 (defstruct (callback-entry (:conc-name callback-) (:constructor %make-callback-entry))
   (lambda nil :type function)
   (dependencies '() :type list) ; a list of callbacks that should be run before this one
   (executed nil :type boolean)  ; while callbacks are processed this flag is used to mark execution
   (priority 0 :type fixnum)     ; callbacks will be called in the order determined by this priority
   (id nil :type string))
 
 Also fixed submit-callbacks, they are now garanteed to be called after normal callbacks (their priority
 is -100)
 
 The API change is that make-new-callback became register-callback, and its :name parameter is renamed to :id.
 
] 
[httpd now skips empry request params in map-parameters
attila.lendvai at gmail.com**20060613152005] 
[Added build-dojo.sh and updated dojo.js as a binary file
attila.lendvai at gmail.com**20060612104009
 
 When updating dojo.js _darcs/prefs/bianries should have a line at the end like this:
 dojo\.js
 so that it's updated as a binary file when someone updates dojo.js.
 
 The iuncluded build-dojo.sh builds a cvs dojo and copies the src dir into the ucw
 wwwroot. In the ucw repo only debug.js is included. If you build your own dojo
 then you can use the dojo include facility to include stuff that is now in the
 dojo.js.
] 
[Got rid of regex matching in parenscript dispatcher
attila.lendvai at gmail.com**20060612091130] 
[Added comments to the cache examples
attila.lendvai at gmail.com**20060610114956] 
[- resolved conflicts for previous parenscript-dispatcher patch.
evrim at core.gen.tr**20060611151202] 
[- parenscript-dispatcher: no need for a dynamic handler function since
evrim at core.gen.tr**20060611145936
   it's static.  
   
   Parenscript disptacher was using function-dispatcher and a (lambda
   (app context)) to dispatch. I've implemented a usual dispatch method
   to dispatch paresncript js files. 
 
   The reason is, it's easier to debug now since handler lambda's are
   not instantiated across applications.
] 
[Use both ajax and non-ajax submitting in the add numbers example
attila.lendvai at gmail.com**20060610112733] 
[Added :focused support to some <ucw: tags, button is now ajax ready
attila.lendvai at gmail.com**20060610004025] 
[Fix <ucw:input's id generation
attila.lendvai at gmail.com**20060609210314] 
[Ajaxified the add some numbers example
attila.lendvai at gmail.com**20060610002634] 
[Fix config.lisp dependency in ucw.asd
attila.lendvai at gmail.com**20060609213216] 
[Tiny doc fix
attila.lendvai at gmail.com**20060609205951] 
[Remove extra progn's, set ajax form submit default to "post"
attila.lendvai at gmail.com**20060609205153] 
[Fix dispatcher creation in the examples
attila.lendvai at gmail.com**20060609163501] 
[Added tooltip support to form fields
attila.lendvai at gmail.com**20060609151248] 
[Resolve conflicts in form.lisp
attila.lendvai at gmail.com**20060604202644] 
[Export get-paremeter and map-parameters
Marco Baringer <mb at bese.it>**20060604171847] 
[When adding the ucw-form-field-invalid class remeber to remove the ucw-form-field-valid class (Patch by: Marijn Haverbeke <marijnh at gmail.com>)
Marco Baringer <mb at bese.it>**20060604171146] 
[- secure-application#exit-user is broken due to removal of find-entry-point.
evrim at core.gen.tr**20060531115550] 
[Silly typos in previous patch
Marco Baringer <mb at bese.it>**20060604141410] 
[Added :class attributes to all the form elements
Marco Baringer <mb at bese.it>**20060604140146] 
[Allow for component-slot definition with :component nil
Nathan Bird <nathan at acceleration.net>**20060508155758
 This patch changes the way the component-class.component-sltos 
 list is built. It should now be in the same order as the class-slots
 which is hopefully the same order they were defined in.
 
 Additionally (the bigger reason) is so that slots that were 
 declared with ':component nil' are marked as being component-slots
 but are left unbound.
] 
[Fix form default action stuff in per-application js
attila.lendvai at gmail.com**20060609150905] 
[Export collapsedp, other stylistic changes
attila.lendvai at gmail.com**20060608123140] 
[Support <form rendering detection for ajac-component-mixin
attila.lendvai at gmail.com**20060608100303
 
 The problem at hand: an ajax components under another component that rendered a form. When the
 sub-component was rendered due to an ajax request the form tag's stuff is not on the stack, but
 the rendering of the sub-component depends on this information.
 
 Current answer: <ucw:form tag checks *current-component* and in case it's an ajax-component-mixin
 sets the rendered-a-form-p slot. The defun render-nearest-ajax-component looks for the first
 ajax-component-mixin and then further if it finds another one with rendered-a-form-p. In case
 one was found then that will be the winner, meaning that ajax rendering will start at <ucw:form
 boundaries.
] 
[Fix return value of remove-component switching-container
attila.lendvai at gmail.com**20060607145208] 
[Modify setf component.current-component to return (values new-value happened)
attila.lendvai at gmail.com**20060607134355] 
[- export #:window-component.content-type
evrim at core.gen.tr**20060608112655] 
[Get rid of shared-init :after for dispatcher initialization
attila.lendvai at gmail.com**20060606211800
 
 Added a make-standard-ucw-dispatchers that return a list of dispatcher instances
 crutial for UCW's operation. Bring back :dispatchers initarg and set the default
 in :default-initargs
] 
[Fix dom replacing for Opera by Alexander Kjeldaas, also smarten up server answers
attila.lendvai at gmail.com**20060606211745] 
[(setf container.current-component) returns t when the set actually happened
attila.lendvai at gmail.com**20060606195958] 
[Delete accidentally committed js stuff
attila.lendvai at gmail.com**20060604201801] 
[Added collapsible-pane component
attila.lendvai at gmail.com**20060604201629] 
[Save backtracked even when no new frame is created
attila.lendvai at gmail.com**20060604201405] 
[Fix dynamic forms example delete
attila.lendvai at gmail.com**20060604201256] 
[Split ucw.css and examples.css
attila.lendvai at gmail.com**20060604200705] 
[Added child-components to container, WARNING: small api change
attila.lendvai at gmail.com**20060604185229
 
 In the process renamed the :pred kayword argument to :predicate
] 
[Doc/comment fixes
attila.lendvai at gmail.com**20060604185138] 
[Add typecheck to s-c s-v-u-c and also set the parent slot
attila.lendvai at gmail.com**20060604172617] 
[Some work on js generation, fix form submission encoding with ajax
attila.lendvai at gmail.com**20060603150919] 
[Bind swank::*sldb-quit-restart* to 'fail-miserably
Nathan Bird <nathan at acceleration.net>**20060531193531
 
 Now when the slime debug buffer pops up while handling a web request,
 'q' (sldb-quit) will cause the 'fail-miserably restart to be invoked.
] 
[fixing logging message typo
Nathan Bird <nathan at acceleration.net>**20060531155026] 
[made the remove component :after be correctly specialized
Russ Tyndall <russ at acceleration.net>**20060529222215] 
[added pass through for optional args in read client string
Russ Tyndall <russ at acceleration.net>**20060525223940] 
[made it correctly out put human number strings rather than lisp number strings (aka no more 1.23d0)
Russ Tyndall <russ at acceleration.net>**20060517164149] 
[provide #'meta-refresh
Nathan Bird <nathan at acceleration.net>**20060529215502
 Cause a meta-refresh (a freshly got (GET) url) at this point.
 This is useful in order to have a GET url after a form POST's
 actions have completed running. The user can then refresh to his
 heart's content.
] 
[Adding child-components export
Nathan Bird <nathan at acceleration.net>**20060508161431] 
[Add a child-components function
Nathan Bird <nathan at acceleration.net>**20060508160149] 
[Export ucw::get-header
Marco Baringer <mb at bese.it>**20060530233436] 
[Added render-option specialized on nil
attila.lendvai at gmail.com**20060530213435] 
[Merge conflicts with Added logging statements which report the action being...
attila.lendvai at gmail.com**20060530142740] 
[Added logging statements which report the action being evaluated.
Marco Baringer <mb at bese.it>**20060529080637] 
[Don't specialize slot-value-using-class on the value parameter
Marco Baringer <mb at bese.it>**20060530105600] 
[write-uri-sans-query needs to deal with 'special' characters in the query-part
Marco Baringer <mb at bese.it>**20060529182043] 
[Add "_" prefix to all ucw defined query parameters.
Marco Baringer <mb at bese.it>**20060529072846
 
 This helps aliviate (but does not completly remove) the probablitily
 of a ucw defined parameter conflicting with a user defined
 parameter. I'll admit that the odds of one of ucw's randomly defined
 parameter names being the same as a user defined parameter name are
 slim, but when it does happen it's a
 once-every-1000-totally-unreproducable-100%untractable error :(
] 
[Implement radio-button widget
Marco Baringer <mb at bese.it>**20060529072632] 
[Added load-relative-url and absolute-url-from
attila.lendvai at gmail.com**20060528111238] 
[Some more work on with-action-args macro
attila.lendvai at gmail.com**20060528000045] 
[Added debug support for parenscript stuff
attila.lendvai at gmail.com**20060527235747] 
[Merge conflict in ucw-tags
attila.lendvai at gmail.com**20060527123809] 
[Set arnesi:*warn-undefined* to T in the start.lisp script
Marco Baringer <mb at bese.it>**20060526192721] 
[Fix erroneous evaluation bug in ucw-tags.lisp
Marco Baringer <mb at bese.it>**20060526192234
 
 the code which checked for the precesne of an action parameter in a
 <ucw:form was calling the action at runtime, instead of checking for
 the precense of an action parameter at compile time.
] 
[Ajaxified the option-dialog
attila.lendvai at gmail.com**20060526094248] 
[<ucw: tag refactoring, WARNING: incompatible changes
attila.lendvai at gmail.com**20060526090311
 
 The :action <ucw: tag parameter has been renamed to :action-body. The old :action
 from now on expects an action registered with register-action. Actions that were
 created with :ajax t will get the special client side script that handles their
 ajax answers.
] 
[Tiny doc fix
attila.lendvai at gmail.com**20060525225601] 
[Added remove-component to container
attila.lendvai at gmail.com**20060523154055] 
[Added (setf container.current-component)
attila.lendvai at gmail.com**20060519175132] 
[Got rid of *-ajax-* variants, and put in the ajax mixin at appropiate places
attila.lendvai at gmail.com**20060519112018] 
[POST is post in the standard
attila.lendvai at gmail.com**20060518220542] 
[Made ajax js more customizable
attila.lendvai at gmail.com**20060518214527] 
[Make per-application.js matching regex strict
attila.lendvai at gmail.com**20060518214310] 
[Some small ajax related changes
attila.lendvai at gmail.com**20060518201940] 
[Khm, further fix link tag
attila.lendvai at gmail.com**20060518201840] 
[Fix link tags when using with ajax
attila.lendvai at gmail.com**20060518190246] 
[Made <ucw:select's on-change ajax ready
attila.lendvai at gmail.com**20060516171549] 
[Added register-ajax-action
attila.lendvai at gmail.com**20060516171341
 
 which is basically a
 
 (register-action (:raw [defaults to t])
   (handle-ajax-request ()
     , at body))
 
] 
[Enable :make-new-frame by default when :with-call/cc is enabled in make-action-body
attila.lendvai at gmail.com**20060516150704] 
[fixes several buglike things in forms:
cjstuij at gmail.com**20060516123951
 
 - the javascript number validator now accepts fractions
 - the javascript integer validator now disallows floating points
 - fixed the email validator
 - allows <ucw:month-select to have other attributes than just accessor
 - in month-select changed Dicember to December
 
] 
[Changed widget-component's render from :wrapping to :wrap-around
attila.lendvai at gmail.com**20060516144443] 
[Move binding of *current-component* into render :wrap-around
attila.lendvai at gmail.com**20060516112354] 
[Follow arnesi's enable-bracket-reader change
attila.lendvai at gmail.com**20060515173147] 
[merge the `:ucw.default' and `:ucw.config' systems into the `:ucw' one
Luca Capello <luca at pca.it>**20060514233614
 
 To simplify things, the two systems used by bin/ucwctl are merged into
 the general `:ucw' one.  As a side-effect, etc/start.lisp now loads
 the `*ucw-config-file*' when present or set the `*ucw-systems*' and
 `*ucw-applications*' variables.
 
   http://common-lisp.net/pipermail/bese-devel/2006-May/002122.html
] 
[Export ucw:is-an-integer-validator.
Maciek Pasternacki <maciekp at japhy.fnord.org>**20060514232653] 
[Add message slot to validator class to contain an error message.
Maciek Pasternacki <maciekp at japhy.fnord.org>**20060514232631] 
[ucw:ajax-action now understands :invalidate which is a component to be rendered and pushed to the client
attila.lendvai at gmail.com**20060515094744] 
[Added AJAX increment/decrement buttons to the counter example
attila.lendvai at gmail.com**20060515091412] 
[Some more stuff for AJAX
attila.lendvai at gmail.com**20060515091346
 
 Most <ucw: tags where they previously needed an action, now they understand also an action-id variant, where
 you can pass in action ids created with make-action(-body). This way you can have full control
 on how the action is handled (see make-action and action-dispatcher for details).
 
 The ucw:action tal tag is now an implicit progn.
 
 There's a new tal tag called ucw:ajax-action, see counter.tal in the following patch for an example.
 
 And probably some more. See the examples changes in the following patches...
] 
[Alter form submission to play better with ajax
attila.lendvai**20060512151613] 
[Fix screwed up paren
attila.lendvai**20060511173636] 
[Made action options publically available through the API
attila.lendvai at gmail.com**20060511161856
 
 WARNING: incompatible API changes
 
 Methods in question:
     action-href       - accepts strings (action-id), functions and action-entries made with make-action
     action-href-body  - accepts all key args that make-action does and delegates them
     make-new-action   - deleted
     register-action   - created an action-entry with make-action and register is returning the action id
     make-action       - public factory for action-entry's
] 
[Tiny doc fix
attila.lendvai at gmail.com**20060511145417] 
[Make <ucw:form a little smarter
attila.lendvai at gmail.com**20060508201605
 
 The new stuff is:
  - inside-a-form-p
  - current-form-id
  - register-submit-callback
  - submit-callbacks: they are callbacks that are executed whenever the current form is submitted
                      before any actions (TODO: this relies on the parameter order in the request
                      which may be undefined in the standard?)
 
 Also use the ucw per-application-parenscript file for js-side scripts of these changes.
] 
[switch from bare-bones dojo to ajax edition. To fix dependency errors where ucw expects the dojo.html namespace or whatever you want to call it to be present.
cjstuij at gmail.com**20060510220528] 
[Read-from-client-string
Nathan Bird <nathan at acceleration.net>**20060430215547
 Useful for reading data from questionable origins where *read-eval* needs to be false.
] 
[Indentation fixup in tabbed-pane.lisp
Marco Baringer <mb at bese.it>**20060509102104] 
[Minor refactoring in container.lisp
Marco Baringer <mb at bese.it>**20060509102050] 
[Mention the difference between (setf application.dispathers) and (setf (slot-value app 'dispatchers)) in the docstring
Marco Baringer <mb at bese.it>**20060509101051] 
[Some more changes to action handling
attila.lendvai at gmail.com**20060508201646
 
 Introduced the following parameters for actions:
   :call-render-loop - you can turn off ralling render loop after the action returns
   :make-new-frame - you can turn off backtracking, the same frame remains after the action
   :manage-response - when nil it's up to the action to manage response sending
 
 action-href now works with a lambda or a string action id
 
 Also make sure frame and session is only set when they would change the value. Think of
 users overriding teh protocol like cookie-session-application setting the session cookie, etc...
] 
[Store an action-struct instead of a simple lambda when making actions
attila.lendvai at gmail.com**20060504151455
 
 The new action-entry struct looks like this:
 
 (defstruct (action-entry (:conc-name action-))
   (lambda nil :type function)
   (valid-p t :type boolean)
   (isolated-p nil :type boolean)
   (ajax-p nil :type boolean)
   (id nil :type (or nil string)))
 
 make-new-action returns an instance of this, register-action returns only the action-id.
 
 Both of them accept the :isolate and :ajax parameters. :ajax means that the action will
 be processed much simpler then normal actions. For example the render-loop will not be
 called after the action returned.
 
 Some other code that I use and is still waiting to get mature:
 
 (defmacro handle-ajax-request ((&key (content-type "text/xml") (raw nil)) &body body)
   (with-unique-names (yaclml-stream request response)
     `(let* ((,request (ucw:context.request *context*))
             (,response (ucw:context.response *context*))
             ,@(unless raw
                       `((,yaclml-stream (make-string-output-stream)))))
       (setf (ucw::get-header ,response "Status") "200 OK"
        (ucw::get-header ,response "Content-Type") ,content-type)
       (send-headers ,response)
       ,@(if raw
             body
             `((yaclml::with-yaclml-stream ,yaclml-stream
                 ,(when (string= content-type "text/xml")
                        `(<:as-is "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"))
                 , at body)
               (write-sequence (string-to-octets (get-output-stream-string ,yaclml-stream) :utf-8)
                (ucw::network-stream ,request))))
       (close-request ,request))))
 
 ;; this is rendered with (action-href ... :ajax t)
 (<dwim:option :ajax-action (handle-ajax-request ()
                               (setf (current-view-of entity-rr) 'standard-instance-reference-view)
                               (render-nearest-ajax-component entity-rr))
               :icon icon::zoom-out)
 
 (defun render-nearest-ajax-component (component)
   (bind ((ajax-component (iter (for current first component then (slot-value current 'ucw::parent))
                                (while (slot-boundp current 'ucw:parent))
                                (when (typep current 'ajax-component-mixin)
                                  (leave current)))))
     (assert ajax-component)
     ;; TODO use xml reader syntax
     (princ "<data xmlns=\"http://www.w3.org/1999/xhtml\">" yaclml:*yaclml-stream*)
     (render ajax-component)
     (princ "</data>" yaclml:*yaclml-stream*)))
] 
[Add a <ucw:simple-submit and <ucw:simple-form that do not require javascript.
Drew Crampsie <drewc at tech.coop>**20060506233602
 
 <ucw:simple-submit uses a BUTTON tag to render a submit button that does not require javascript
 
 To make this happen, i added a method to find-action that operates on a list, 
 grabbing the car and using it as the action id. When a form is submitted with an extra action parameter, 
 the last one submitted (first in the list) is taken to be the action-id.
 
 This allows forms without javascript!! SIMPLE-SUBMIT will work in the standard UCW:FORM, 
 SIMPLE-FORM is a form without the JS cruft, but will not work with standard <UCW:* submit buttons.
 
 
 
] 
[Fix serve-file
attila.lendvai at gmail.com**20060509132443] 
[Added serve-sequence next to serve file with a defserve macrolet
attila.lendvai at gmail.com**20060508220833] 
[Resolve conflicts with "Don't send headers set to NIL (especially Content-Length:) in response."
attila.lendvai at gmail.com**20060508203035] 
[Add dojo.js to standard-window to avoid user surprises
attila.lendvai at gmail.com**20060508202328] 
[Ensure in shared-initialize of standard-application that the required dispatchers exists
attila.lendvai at gmail.com**20060508202029
 
 action dispatcher and a parenscript-dispatcher is crucial for UCW to function properly.
 To make sure things work fine in the normal situations add them in shared-initialize.
 For full control one can still use the application.dispatchers accessor...
] 
[Use context.cookie-value to acces session cookie, also rename the cookie constant to +ucw-session-cookie-name+
attila.lendvai at gmail.com**20060508190228] 
[Added parenscript-dispatcher
attila.lendvai at gmail.com**20060508185842
 
 It lazily compiles a parenscript file at the first request and tehn serves it.
] 
[Added a per-application parenscript file
attila.lendvai at gmail.com**20060506225010] 
[Added encoding method to response
attila.lendvai at gmail.com**20060506174248] 
[Added context.cookies and context.cookie-value
attila.lendvai at gmail.com**20060505223724] 
[Use widget-component.css-* accessors when rendering, so that it can be overridden
attila.lendvai at gmail.com**20060504151409] 
[Do not render the ol/li elements when the container has only one member
attila.lendvai at gmail.com**20060504120248] 
[Resolve conflicts
attila.lendvai at gmail.com**20060423184525] 
[Added tabindex support for form-fields
attila.lendvai at gmail.com**20060414130400] 
[Docfix for net-telent-date dependency.
Maciek Pasternacki <maciekp at japhy.fnord.org>**20060504233324] 
[INCOMPATIBLE CHANGE: add NET-TELENT-DATE dependency, send out Date: header, make SERVE-FILE cache-friendly (use Date:, Last-Modified:, Expires: and If-Modified-Since: headers).
Maciek Pasternacki <maciekp at japhy.fnord.org>**20060503013844] 
[Don't send headers set to NIL (especially Content-Length:) in response.
Maciek Pasternacki <maciekp at japhy.fnord.org>**20060503013648] 
[New function (delete-header message header-name).
Maciek Pasternacki <maciekp at japhy.fnord.org>**20060503011904] 
[Don't send body if HTTP method is HEAD.
Maciek Pasternacki <maciekp at japhy.fnord.org>**20060502222010] 
[Save HTTP method of request as string.
Maciek Pasternacki <maciekp at japhy.fnord.org>**20060502221955] 
[Initform for (request response).
Maciek Pasternacki <maciekp at japhy.fnord.org>**20060502221939] 
[Include in httpd response a request associated with it.
Maciek Pasternacki <maciekp at japhy.fnord.org>**20060502221158] 
[changed docs to get up to date and add some info
cjstuij at gmail.com**20060503094055] 
[Added send-redirect function.
Marco Baringer <mb at bese.it>**20060501154250
 
 send-redirect does what redirect-component's render method did but
 it's usable from a simple-dispatcher (or anywhere else we don't have
 ucw's component context machinery).
] 
[Use dolist*, not dolist, in tabbed-pane's render method.
Marco Baringer <mb at bese.it>**20060501135314] 
[Using (when (whatever) T) is weird, use (whatever) instead
Marco Baringer <mb at bese.it>**20060501135000] 
[Minor indentation/whitespace fixups in src/components/form.lisp
Marco Baringer <mb at bese.it>**20060501134849] 
[make-with-dummy-request-nicer
cjstuij at gmail.com**20060501001756] 
[tabbed-pane-makeover - tabbed panes are now wrapped in divs in stead of a table, for more design flexibility. Is no longer tied to a tal file.
cjstuij at gmail.com**20060430233920] 
[Removing integer-range-validator, use number-range-validator instead.
Nathan Bird <nathan at acceleration.net>**20060428165829] 
[the value of a number-field should be nil, not 0, if nothing was entered.
Nathan Bird <nathan at acceleration.net>**20060428164949] 
[bin/ucwctl: allow a custom ucwctl.conf via -u|--ucwctl-file
Luca Capello <luca at pca.it>**20060501110031
 
 This adds the possibility to specify a different ucwctl.conf file
 instead of the default /etc/ucw/ucwctl.conf.  Moreover, by default
 ucwctl now reads ~/.ucw/ucwctl.conf it it exists, overriding the
 values in the general /etc/ucw/ucwctl.conf, and the same happens if
 the ucwctl.conf is specified via the command line option.  All command
 line options override the values present in any ucwctl.conf files.
 The order is the following:
 
   1) /etc/ucw/ucwctl.conf (if it exists)
   2) ~/.ucw/ucwctl.conf (if it exists)
   3) -u|--ucwctl-file (if specified, exit if it cannot be read)
   4) command line options
 
 A deeper discussion is available at:
 
   http://common-lisp.net/pipermail/bese-devel/2006-April/001932.html
   http://common-lisp.net/pipermail/bese-devel/2006-April/001961.html
] 
[In the phone and email validators instead of defining a new slot we just use the :default-initargs class option
Marco Baringer <mb at bese.it>**20060428103114] 
[Adding documentation to form.lisp
Nathan Bird <nathan at acceleration.net>**20060428023256] 
[Rearranging file contents to reduce style-warnings
Nathan Bird <nathan at acceleration.net>**20060428022511] 
[Implementing value-validators
Nathan Bird <nathan at acceleration.net>**20060428020403
 Value-validators are a category of validators that are only applied if there 
 is actually a value. This was done to provide a more systematic scheme since
 there were several different ways it was being handled previously.
 Javascript validation in this patch is untested.
] 
[Expanded the forms example to include a number-field and number-range-validated field.
Nathan Bird <nathan at acceleration.net>**20060428014551] 
[added a standard regular exprexpression validator then made e-mail-validator use it.  E-mail-validator IS NO LONGER INVALID IF EMPTY. Adde d an international phonenumber validator
russ at acceleration.net**20060425154947] 
[added regex exports
russ at acceleration.net**20060424225714] 
[Comment fixup
Nathan Bird <nathan at acceleration.net>**20060427173259] 
[Added missing id param that got lost in my <ucw:form changes
attila.lendvai at gmail.com**20060424150549] 
[TAG 2006-04-25
Marco Baringer <mb at bese.it>**20060425145623] 
Patch bundle hash:
d25d6e0fe005e09638aac49ec019a2b895c1a1be
-------------- next part --------------

New patches:

[Extracted a lot of form-related javascript from dynamic HTML pages into static per-application javascript file.
Denys Rtveliashvili <rtvd at mac.com>**20060729181037] {
hunk ./src/components/form.lisp 40
-(defgeneric generate-javascript (field validator)
-  (:documentation "Generate all the javascript for a given field and validator"))
hunk ./src/components/form.lisp 56
-    (flet ((connect (events handler)
-             (iter (for event in (ensure-list events))
-                   (collect `(dojo.event.connect ($ ,id) ,event ,handler)))))
-      (<ucw:script
-       `(progn
-         (setf (slot-value ($ ,id) 'ucw-dirty) false)
-         (setf (slot-value ($ ,id) 'ucw-dirty-p)
-          (lambda ()
-            (return (slot-value ($ ,id) 'ucw-dirty))))
-         ,@(connect (list "onchange" "onkeyup")
-                    `(lambda (event)
-                      (setf (slot-value ($ ,id) 'ucw-dirty) true)))))
-      (when (validators field)
-        (<ucw:script
-         `(progn
-           (setf (slot-value ($ ,id) 'ucw-validate)
-            (lambda ()
-              ,@(loop
-                 for validator in (validators field)
-                 collect (generate-javascript field validator))))
-           ,@(connect (list "onchange" "onkeyup")
-                      `(lambda (event)
-                        ((slot-value ($ ,id) 'ucw-validate))
-                        (return true))))
-         (when (initially-validate field)
-           `((slot-value ($ ,id) 'ucw-validate))))))))
+      (<ucw:script :toplevelp t
+	   `(ucw.field.register ,id
+		 ,(if (validators field)
+			  `(lambda ('value)
+				(return (and
+				 ,@(loop
+					for validator in (validators field)
+					collect (javascript-check field validator)))))
+				nil)
+			  ,(initially-validate field)))))
hunk ./src/components/form.lisp 136
-(defgeneric generate-javascript-check (field validator)
-  (:documentation "Generates the javascript code to check the
-validity of FIELD. Methods defined on this generic funcition must
-return a one argument javascript lambda. The returned lambda must
-return true if the value passed is valid, false otherwise.
-
-This method is built upon JAVASCRIPT-CHECK, which is what you'll
-use 90% of the time."))
-
-(defmethod generate-javascript-check ((field t) (validator t))
-  `(lambda ()
-     (let ((value (slot-value ($ ,(dom-id field)) 'value)))
-       (return ,(javascript-check field validator)))))
-
hunk ./src/components/form.lisp 139
-;;;; *** javascript-invalid-handler
-
-(defgeneric generate-javascript-invalid-handler (field validator)
-  (:documentation "Generate the javascript for when the field is invalid.
-This should return in a javascript function of one argument (the element) ."))
-
-(defmethod generate-javascript-invalid-handler ((field t) (validator validator))
-  `(lambda (element)
-     ,(javascript-invalid-handler field validator)))
-
-(defgeneric javascript-invalid-handler (field validator)
-  (:documentation "The javascript code body for when a field is invalid."))
-
-(defmethod javascript-invalid-handler ((field t) (validator validator))
-  `(let ((element ($ ,(dom-id field))))
-     (unless (dojo.html.has-class element "ucw-form-field-invalid")
-       (dojo.html.remove-class element "ucw-form-field-valid")
-       (dojo.html.add-class element "ucw-form-field-invalid"))))
-
-;;;; *** javascript-valid-handler
-
-(defgeneric generate-javascript-valid-handler (field validator)
-  (:documentation "Generate the javascript for when a field is valid.
-This should be a javascript function of one argument (the element)."))
-
-(defmethod generate-javascript-valid-handler ((field t) (validator validator))
-  `(lambda (element)
-     ,(javascript-valid-handler field validator)))
-
-(defgeneric javascript-valid-handler (field validator)
-  (:documentation "Generate the javascript body for when a field is valid."))
-
-(defmethod javascript-valid-handler ((field t) (validator validator))
-  `(progn
-     (let ((node ($ ,(dom-id field))))
-       (dojo.html.remove-class node "ucw-form-field-invalid")
-       (dojo.html.add-class node "ucw-form-field-valid"))))
-
-(defmethod generate-javascript ((field generic-html-input) (validator validator))
-  `(if (,(generate-javascript-check field validator))
-       (,(generate-javascript-valid-handler field validator)
-         ($ ,(dom-id field)))
-       (progn
-         (,(generate-javascript-invalid-handler field validator)
-           ($ ,(dom-id field)))
-         (return nil))))
hunk ./src/components/form.lisp 377
-  `(or
-    (not (is-na-n value))
-    (and (= (slot-value (.split value "/") 'length) 2)
-         (not (is-na-n (aref (.split value "/") 0)))
-         (not (is-na-n (aref (.split value "/") 1)))
-         (not (= 0 (aref (.split value "/") 0)))
-         (not (= 0 (aref (.split value "/") 1))))))
+  `(ucw.field.is-number value))
hunk ./src/per-application-parenscript.lisp 86
+`(into-namespace ucw.field
+  (defun connect (e events handler)
+	(dolist (event events)
+	  (dojo.event.connect e event handler)))
+
+  (defun register ((id :by-id) validator validate-initially)
+	(progn
+	  (setf (slot-value id 'ucw-dirty) false)
+	  (setf (slot-value id 'ucw-dirty-p)
+			(lambda ()
+			  (return (slot-value id 'ucw-dirty))))
+	  (ucw.field.connect id (list "onchange" "onkeyup")
+			   (lambda (e)
+				 (setf (slot-value e 'ucw-dirty) true)))
+	  (if validator (ucw.field.register-validators id validator validate-initially))))
+
+  (defun register-validators (field validator validate-initially)
+	(progn
+	  (setf full-validator (lambda ()
+							 (ucw.field.set-valid field (validator (slot-value field 'value)))))
+	  (setf (slot-value field 'ucw-validate)
+			full-validator)
+	  (ucw.field.connect field (list "onchange" "onkeyup")
+						 (lambda (e)
+						   ((slot-value field 'ucw-validate))
+						   (return true)))
+	  ((slot-value field 'ucw-validate))))
+
+  (defun set-valid (field valid)
+	(if valid
+		(progn
+		  (dojo.html.remove-class field "ucw-form-field-invalid")
+		  (dojo.html.add-class field "ucw-form-field-valid"))
+		(progn
+		  (dojo.html.remove-class field "ucw-form-field-valid")
+		  (dojo.html.add-class field "ucw-form-field-invalid")
+		  (return nil))))
+
+  (defun is-number (value)
+	(or
+	 (not (is-na-n value))
+	 (and (= (slot-value (.split value "/") 'length) 2)
+		  (not (is-na-n (aref (.split value "/") 0)))
+		  (not (is-na-n (aref (.split value "/") 1)))
+		  (not (= 0 (aref (.split value "/") 0)))
+		  (not (= 0 (aref (.split value "/") 1))))))
+)
}

Context:

[Hrm, update dojo again and do not include Firebug
attila.lendvai at gmail.com**20060717110404] 
[Added a dojo-split-container to the examples
attila.lendvai at gmail.com**20060716183944] 
[Added with-this js macro
attila.lendvai at gmail.com**20060716183516] 
[Added dojo-split-container, and some dojo-widget features
attila.lendvai at gmail.com**20060716183326] 
[Updated dojo, added SplitContainer
attila.lendvai at gmail.com**20060716182825] 
[Introduce an 'orientation' slot on list-container, needed by dojo-split-container
attila.lendvai at gmail.com**20060716165935] 
[Added the dojo-tab-example to itself recursively
attila.lendvai at gmail.com**20060716084118] 
[Some more AJAX rendering infrastructure for later patches
attila.lendvai at gmail.com**20060715194350] 
[Added a dojo-tab-container example
attila.lendvai at gmail.com**20060715170118] 
[Added dojo-widgets.lisp
attila.lendvai at gmail.com**20060715165946] 
[Updated dojo.js, included TabContainer templates
attila.lendvai at gmail.com**20060715165750] 
[It's not a smart idea to isolate entry point actions...
attila.lendvai at gmail.com**20060715115353] 
[Better error reporting in the client side JS
attila.lendvai at gmail.com**20060715115308] 
[Added render-widget-wrapper
attila.lendvai at gmail.com**20060715113927
 
 widget-component renders its wrapper tag in :wrap-around. this is the first method that
 is called and in least-specific-first order, so it was not possible to further
 wrap a widget.
 
 the upcoming dojo-widgets need finer control on this wrapping, therefore this
 method was introduced. i'm not too happy with this change, but i can't think of any other
 solution. the dojo widgets render two levels of wrapping, one for the dojo widget and
 most of the time when the dojo widget is also a simple widget then another level for
 the simple widget. the problem comes with ajax, because it's not allowed to replace
 the dom node of the dojo widget, so we must render a dojo widget so that the widget
 div is not rendered when ajax rendering is in progress, so the client side will replace
 the inner wrapper rendered by the simple widget. ehh, long story...
] 
[Added basic-window-features-mixin and smartened up simple-window
attila.lendvai at gmail.com**20060714103437
 
 The new mixin provides all the features simple-window used to provide without the
 default JS includes that UCW requires.
 
 simple-window adds the JS includes that are needed for UCW to function properly.
 
 window title may be a lambda with one arg, the window object
 
 :js scripts are now xml-quoted
] 
[Various smallies, mostly cosmetic changes
attila.lendvai at gmail.com**20060710194738] 
[Use dojo.event.connect to register handlers in <ucw: tags
attila.lendvai at gmail.com**20060710192901] 
[Use defucwlogger also in l10n-application
attila.lendvai at gmail.com**20060710113427] 
[Added new-callback-id to get a unique callback id in a given frame
attila.lendvai at gmail.com**20060711080127] 
[Integrated modular-application into standard-application (WARNING: api)
attila.lendvai at gmail.com**20060710111828
 
 The changes are:
 - modular-application and modular-application-mixin are gone
 - *-module -> *-mixin
 - effective-context-definition -> request-context-class
] 
[parenscript-handler updated to reflect new js:compile-parenscript-file-to-string changes.
evrim at core.gen.tr*-20060709102712
 (parenscript-dispatcher) function is updated to reflect changes. *Warning* API changed.
] 
[keyword definitions of session,frame,action parameters added to std-vars.
evrim at core.gen.tr**20060704144237] 
[Introducing a new generic method for std-component: 
evrim at core.gen.tr**20060709144801
 
 (defgeneric descendant-p (parent child &optional recursive-p)
   (:documentation "Predicate to use whether child is a child of parent."))
] 
[parenscript-handler updated to reflect new js:compile-parenscript-file-to-string changes.
evrim at core.gen.tr**20060709102712
 (parenscript-dispatcher) function is updated to reflect changes. *Warning* API changed.
] 
[Fix some indentations
attila.lendvai at gmail.com**20060710000755] 
[Made the AJAX stuff work on ie 6.0.2900 (ie sp2)
attila.lendvai at gmail.com**20060710000415] 
[Added default onbeforeunload event handler that checks for dirty forms when leaving the page
attila.lendvai at gmail.com**20060708144206] 
[Do not intern gensymed stuff at compile time in parenscript-utils.lisp
attila.lendvai at gmail.com**20060708144115] 
[Pulled missing patches from _dev and undo'd them by hand
attila.lendvai at gmail.com**20060707215004] 
[Added a with-url-prefix keyword param to :src javascript entries
attila.lendvai at gmail.com*-20060626220600] 
[Added a with-url-prefix keyword param to :src javascript entries
attila.lendvai at gmail.com**20060626220600] 
[TAG 2006-06-23
attila.lendvai at gmail.com**20060623091256] 
[Merge dev/ajax conflict in l10n example
attila.lendvai at gmail.com**20060618154956] 
[Backport examples to the dev branch (fix it :)
attila.lendvai at gmail.com**20060618142159] 
[- :initarg :dispatchers added std-application.
evrim at core.gen.tr**20060612171540] 
[- std-application default dispatchers are now provided from via initform.
evrim at core.gen.tr**20060607125015] 
[- removed shared-init :after method of std-application, default dispathers are now in :initform
evrim at core.gen.tr**20060607124939] 
[Support abandon-handlers in simple-form
attila.lendvai at gmail.com**20060707173329] 
[Support various form abandon handlers
attila.lendvai at gmail.com**20060707173319
 
 When the page will be abandoned UCW checks the pendings forms. Each modified form
 is asked for approval. There are three standard policies for <ucw:form
 
 1) :ask-user (the default) Pop up a dialog for user confirmation
 2) :auto-submit Silently submit the form without an action
 3) nil Do nothing
] 
[Demonstrate form abandon policies in the examples
attila.lendvai at gmail.com**20060707173312] 
[Rethrow errors in with-ucw-error-handler but only show them once
attila.lendvai at gmail.com**20060707172432] 
[Support action-href calls with nil action
attila.lendvai at gmail.com**20060707172045] 
[Various small fixes
attila.lendvai at gmail.com**20060707171937] 
[Follow parenscript changes
attila.lendvai at gmail.com**20060707171855] 
[Added :toplevel and :compile-time parameters to <ucw:script
attila.lendvai at gmail.com**20060707151211
 
 See docstring for details.
] 
[Fix AJAX form submission not to ask the form being submitted for approval
attila.lendvai at gmail.com**20060705183741] 
[Smartened up <ucw:form and form-fields
attila.lendvai at gmail.com**20060705180957
 
 <ucw:form generated forms register themselves in a page-global form registry
 and form-fields are also connected to forms. This was needed for the next patch
 that makes it possible for forms to interact with page reloading either to
 autosubmit or to let the user cancel the page reload. 
] 
[AJAXified the form example demonstrating form dirtyness checking
attila.lendvai at gmail.com**20060705180417] 
[Updated dojo, included Dictionary
attila.lendvai at gmail.com**20060705174338] 
[Simplified/unified client side js action/form submission
attila.lendvai at gmail.com**20060705111227] 
[Refactored dispatchers so that it's possible to submit a form without an action
attila.lendvai at gmail.com**20060704234351] 
[Add invocation id also when actions are invocated with AJAX
attila.lendvai at gmail.com**20060704161103] 
[Disable <:html's :prologue, UCW renders its own DOCTYPE line
attila.lendvai at gmail.com**20060704160101] 
[Added a allow-ajax-rendering-restart to ajax-component-mixin, see docstring for details
attila.lendvai at gmail.com**20060704155859] 
[Added some TODO entries
attila.lendvai at gmail.com**20060704113407] 
[Some fixups for the AJAX version of the dispatchers
attila.lendvai at gmail.com**20060704105850] 
[Fix: silly js needs explicit returns...
attila.lendvai at gmail.com**20060703215952] 
[Fix <ucw:form with isolated actions, evaluation time thinko
attila.lendvai at gmail.com**20060703195722] 
[removed dependency on cl-l10n for allegro and openmcl
Henrik Hjelte <henrik at evahjelte.com>**20060703112938] 
[Support invocation-isolated actions when submitted through forms
attila.lendvai at gmail.com**20060703185825] 
[Added missing load-op of :ucw in start.lisp
attila.lendvai at gmail.com**20060703134948] 
[Alter example loading description in the README
attila.lendvai at gmail.com**20060703132401] 
[Follow compile-time-level logger changes in Arnesi
attila.lendvai at gmail.com**20060703172328] 
[Only load the l10n examples on clisp and sbcl
attila.lendvai at gmail.com**20060703131652] 
[Export config variables in the ucw.system package
attila.lendvai at gmail.com**20060703124921
 
 Which makes it possible to set the variables between (asdf:find-system :ucw)
 and (asdf:oos 'asdf:load-op :ucw) when loading UCW programmatically in a
 customized way.
] 
[Clear some config vars, so asdf-loading :ucw has no other side effects
attila.lendvai at gmail.com**20060703122907] 
[Added a *ucw-compile-time-log-level*, see docstring for details
attila.lendvai at gmail.com**20060702221950] 
[Minor indentation fix
attila.lendvai at gmail.com**20060702221910] 
[Fix loading the l10n example so that cl-l10n doesn't warn
attila.lendvai at gmail.com**20060702120642] 
[Fix flush-request-response call in tal-handler
attila.lendvai at gmail.com**20060702003000] 
[Moved back debug-on-error into protocol.lisp
attila.lendvai at gmail.com**20060702000159] 
[Added extensive examples describing action isolation and backtracking with and without ajax
attila.lendvai at gmail.com**20060701233329] 
[Do not render <:html and <:body in info-message if there's a parent
attila.lendvai at gmail.com**20060701233210] 
[Fix cache examples
attila.lendvai at gmail.com**20060701233138] 
[Issue an (in-package :ucw-user) after loading the example system
attila.lendvai at gmail.com**20060701225123] 
[Implemented invocation-isolated actions
attila.lendvai at gmail.com**20060701224642
 
 These actions are guaranteed to be executed once per user action. For details
 see next patch that adds examples with extensive descriptions.
] 
[removing now unused default.lisp
Nathan Bird <nathan at acceleration.net>**20060630194342] 
[moving configuration into :ucw package, merging default.lisp into vars.lisp
Nathan Bird <nathan at acceleration.net>**20060630193756] 
[use the *ucw-swank-port* as default swank port
Nathan Bird <nathan at acceleration.net>**20060630184217] 
[eval-when goodness to facilitate ucwctl loading
Nathan Bird <nathan at acceleration.net>**20060630184157] 
[Merge conflicts with start refactor in ucw_dev
attila.lendvai at gmail.com**20060630175241] 
[Further simplify loading mostly based on Nathan Bird's ideas
attila.lendvai at gmail.com**20060630165226] 
[make-displaced-array has been moved to arnesi
attila.lendvai at gmail.com**20060630081327] 
[Use iter in split-on-space and avoid an nreverse
attila.lendvai at gmail.com**20060629234204] 
[Only start swank from the asd when *ucw-swank-port* is not nil
attila.lendvai at gmail.com**20060630001834] 
[Fix read-line-from-network in httpd backend
attila.lendvai at gmail.com**20060629231051] 
[Resolve conflicts with the dev branch with find-action
attila.lendvai at gmail.com**20060629221634] 
[- fixed %100 cpu utilization when action-id is not specified in the URL.
evrim at core.gen.tr**20060628205417] 
[- effective-context-definition exported for external app-module definitions.
evrim at core.gen.tr**20060627150948] 
[Added missing parenscript-utils dependency to components in the asd
attila.lendvai at gmail.com**20060629220033] 
[Fix isolated action handling
attila.lendvai at gmail.com**20060629215837] 
[Move some stuff from start.lisp into ucw.asd
attila.lendvai at gmail.com**20060628084944] 
[Convert external-format-for into a defun
attila.lendvai at gmail.com**20060627141634] 
[Fix application-directory handling in config.lisp
attila.lendvai at gmail.com**20060626075804] 
[exports for modular-application
aycan.irican at core.gen.tr**20060625164051] 
[Added a :with-url-prefix keyword param to javascript entries in window.lisp
attila.lendvai at gmail.com**20060626231522] 
[Call threaded-lisp-p at load-time to avoid a warning
attila.lendvai at gmail.com**20060625130223] 
[Get rid of the eval defclass in modular-application
attila.lendvai at gmail.com**20060625124728] 
[Merge dispatcher and application refactor with the dev branch
attila.lendvai at gmail.com**20060625122021] 
[Make sure context.locale is always a list
attila.lendvai at gmail.com**20060625105538] 
[fixed asd file for modular-applications.
evrim at core.gen.tr**20060624092237] 
[added security-module.lisp
evrim at core.gen.tr**20060624092227] 
[added modular-application.lisp which specifies modular applications.
evrim at core.gen.tr**20060624092154] 
[added l10n-module.lisp
evrim at core.gen.tr**20060624092113] 
[cookie-module.lisp added.
evrim at core.gen.tr**20060624092045] 
[added LICENCE file.
evrim at core.gen.tr**20060624092032] 
[fixed type in l10n-example -> *l10n-example-appication*
evrim at core.gen.tr**20060624083531] 
[added src/rerl/modular-application direcorty.
evrim at core.gen.tr**20060624083452] 
[l10n.lisp removed. moved to modular-applications.
evrim at core.gen.tr**20060623201634] 
[secure-application.lisp removed. moved to modular-applications.
evrim at core.gen.tr**20060623201102] 
[cookie-session.lisp removed. moved to modular-applications.
evrim at core.gen.tr**20060623200752] 
[Define shared-initialize :after, not a shared-initialize whose first form in (call-next-method)
Marco Baringer <mb at bese.it>**20060622121056] 
[Fix the fix for dispatcher priority
attila.lendvai at gmail.com**20060619095536] 
[action-dispatcher created with nil priority
Alexey Antipov <door at lcpi.ru>**20060619073557] 
[- merged conflicts with current dev-branch. tal-matcher updated according to marcos's ends-width patch.
evrim at core.gen.tr**20060618232521] 
[- Introducing the new dispatcher implementation. now we have reusable
evrim at core.gen.tr**20060618201426
   matchers and handlers. API didn't change a lot for now. Only change
   is two arg'ed handler lambda()'s are replaced with zero arg-ed one's
   to form up a standard. Old arguments like application and context
   can be reached via special *context*. Please see also previous patch
   comments for more info about what may have changed.
] 
[- ucw example application fixed to reflect changes in new dispacther
evrim at core.gen.tr**20060618174543
   api.
] 
[- ucw admin application dispatchers fixed to reflect new dispatcher
evrim at core.gen.tr**20060618174507
   api.
] 
[- ensure-session moved to std-application class.
evrim at core.gen.tr**20060618174430] 
[- defentry-point fixed accoring to new disaptcher implementation. It
evrim at core.gen.tr**20060618174311
   now creates a zero-arged lambda function for action handling.
] 
[- fixed exports for new dispatcher implementaion. exported dispatchers:
evrim at core.gen.tr**20060618174208
 * action-dispatcher
 * minimal-dispatcher
 * simple-dispatcher
 * parenscript-dispatcher
 * url-dispatcher
 * regexp-dispatcher
 * tal-dispatcher
 - *dispatcher-registers* is un-exported since it does not exists anymore.
] 
[- flush-request-response() moved to object std-request-context.
evrim at core.gen.tr**20060618173902] 
[Render custom checkbox images so that the page is not scrolled when they are clicked
attila.lendvai at gmail.com**20060623214228] 
[Merge conflicts with dev branch in forms.lisp
attila.lendvai at gmail.com**20060623083756] 
[Merge conflicts with Pupeno's last patch
Marco Baringer <mb at bese.it>**20060622123735] 
[Be able to define accesskey in other input fields than text.
Jos?? Pablo Ezequiel "Pupeno" Fern??ndez Silva <pupeno at pupeno.com>**20060621132840] 
[Be able to specify accesskey for input elemnts.
Jos?? Pablo Ezequiel "Pupeno" Fern??ndez Silva <pupeno at pupeno.com>**20060621131657] 
[Re-place comments (email and regexp validator).
Jos?? Pablo Ezequiel "Pupeno" Fern??ndez Silva <pupeno at pupeno.com>**20060621124750] 
[Export min and max -length for the length-validator.
Jos?? Pablo Ezequiel "Pupeno" Fern??ndez Silva <pupeno at pupeno.com>**20060621122848] 
[Err, really fix the content-length header this time
attila.lendvai at gmail.com**20060620193145] 
[Fix content-length header in serv-* backend methods
attila.lendvai at gmail.com**20060620134510] 
[Esperanto translation.
Jos?? Pablo Ezequiel "Pupeno" Fern??ndez Silva <pupeno at pupeno.com>**20060619101131] 
[Spanish translation.
Jos?? Pablo Ezequiel "Pupeno" Fern??ndez Silva <pupeno at pupeno.com>**20060619095043] 
[Display the locale preference list in the l10n example
attila.lendvai at gmail.com**20060618211355] 
[Make the l10n tal example an embeddable non-window component
attila.lendvai at gmail.com**20060618153512] 
[Better way to load the examples in the README
attila.lendvai at gmail.com**20060618142128] 
[Fix last patch (by Alberto Santini <albertosantini at gmail.com>)
Maciek Pasternacki <maciekp at japhy.fnord.org>**20060617173114] 
[Fix an IE date header problem (by Lou Vanek <vanek at acd.net>)
Maciek Pasternacki <maciekp at japhy.fnord.org>**20060617134808] 
[Use indefinit articles in l10n example
attila.lendvai at gmail.com**20060618143451] 
[Fix simple-form and simple-submit
attila.lendvai at gmail.com**20060618135049] 
[New l10n and i18n example
attila.lendvai at gmail.com**20060618134812] 
[Add :www-roots default initarg
attila.lendvai at gmail.com**20060618134443] 
[Fixed some glitches to make (progn (require :ucw) (load "ucw/etc/start.lisp")) work out of the box
attila.lendvai at gmail.com**20060618114506] 
[Get rid of accidental listify, use ensure-list
attila.lendvai at gmail.com**20060618114006] 
[Added with-ucw-error-handler js macro
attila.lendvai at gmail.com**20060617175926] 
[Some more l10n work
attila.lendvai at gmail.com**20060617175729] 
[Merge ajax/dev branch conflicts
attila.lendvai at gmail.com**20060617143355] 
[Export make-request-context and cookie-session-request-context
attila.lendvai at gmail.com**20060617132000] 
[Rename i18n to l10n. restructure files. move cl-l10n dependncy to ucw.l10n system (off of ucw)
Marco Baringer <mb at bese.it>**20060617123925] 
[Added :initarg to extension slot of tal-dispatcher
Marco Baringer <mb at bese.it>**20060616153433] 
[Use IF instead of AIF since the it binding is nevere referenced.
Marco Baringer <mb at bese.it>**20060616153418] 
[Remover spurious cons in read-from-client-string
Marco Baringer <mb at bese.it>**20060616153209] 
[Update (setf container.current-component)'s docstring
Marco Baringer <mb at bese.it>**20060616153139] 
[set arnesi:*warn-undefined* to NIL to avoid problems with asdf+sbcl
Marco Baringer <mb at bese.it>**20060616152852] 
[Adds a class html-element and makes it superclass of the widgets and form inputs. Also fixes some inconsistencies in 
marijn at haverbeke.nl**20060613220202
 components/form.lisp.
] 
[Minor indentation fix
Marco Baringer <mb at bese.it>**20060607120319] 
[Changed the tal-dispatcher to only look for tals files for specific urls (defaults to those ending in .ucw)
Marco Baringer <mb at bese.it>**20060607120228] 
[Lazy create the isolate-hash hashtable
attila.lendvai at gmail.com**20060616150043] 
[Use the $ js macro in form.lisp
attila.lendvai at gmail.com**20060616140112] 
[Since we're alread using dojo we might as well use all the shortcuts it provides
Marco Baringer <mb at bese.it>**20060607120422] 
[Small i18n fix and comment
attila.lendvai at gmail.com**20060616123417] 
[Added enabled/disabled image/tooltip support to checkbox
attila.lendvai at gmail.com**20060614152854] 
[Add cl-l10n dependency to the docs
attila.lendvai at gmail.com**20060616115153] 
[cl-l10n integration (WARNING: i18n api change)
attila.lendvai at gmail.com**20060616111739
 
 The stuff in i18n.lisp has been revisited. Most of the locale values are
 cl-l10n locale instances or locale names that the cl-l10n locale function
 understands.
 
 If you subclass i18n-application then each request will bind *locale* according
 to the client's browser settings. Most of the time it's a list in which case *locale*
 will be bound to this list and resource lookups will try each locale in this list
 until the resource is found. The application's default locale is always appended
 to the end of this list when it's not already in it. 
] 
[Only return the (absolute) path in map-query-path-to-file when it has a filename part
attila.lendvai at gmail.com**20060616110635] 
[Cache the cl-ppcre:scanner for the url-string in a regexp dispatcher.
Nathan Bird <nathan at acceleration.net>**20060613151409
 
 Profiling showed that a LOT of time and memory was spent creating scanners.
 Do the regexp compilation once, and reuse the scanner for all requests.
 
 If the url-string on the regexp-dispatcher is changed then the scanner
 will be recreated.
] 
[Fix call-callbacks dependencies
attila.lendvai at gmail.com**20060613161714] 
[Smarten up callbacks (WARNING: api change)
attila.lendvai at gmail.com**20060613155947
 
 With this patch callbacks are stored in a defstruct. 
 
 (defstruct (callback-entry (:conc-name callback-) (:constructor %make-callback-entry))
   (lambda nil :type function)
   (dependencies '() :type list) ; a list of callbacks that should be run before this one
   (executed nil :type boolean)  ; while callbacks are processed this flag is used to mark execution
   (priority 0 :type fixnum)     ; callbacks will be called in the order determined by this priority
   (id nil :type string))
 
 Also fixed submit-callbacks, they are now garanteed to be called after normal callbacks (their priority
 is -100)
 
 The API change is that make-new-callback became register-callback, and its :name parameter is renamed to :id.
 
] 
[httpd now skips empry request params in map-parameters
attila.lendvai at gmail.com**20060613152005] 
[Added build-dojo.sh and updated dojo.js as a binary file
attila.lendvai at gmail.com**20060612104009
 
 When updating dojo.js _darcs/prefs/bianries should have a line at the end like this:
 dojo\.js
 so that it's updated as a binary file when someone updates dojo.js.
 
 The iuncluded build-dojo.sh builds a cvs dojo and copies the src dir into the ucw
 wwwroot. In the ucw repo only debug.js is included. If you build your own dojo
 then you can use the dojo include facility to include stuff that is now in the
 dojo.js.
] 
[Got rid of regex matching in parenscript dispatcher
attila.lendvai at gmail.com**20060612091130] 
[Added comments to the cache examples
attila.lendvai at gmail.com**20060610114956] 
[- resolved conflicts for previous parenscript-dispatcher patch.
evrim at core.gen.tr**20060611151202] 
[- parenscript-dispatcher: no need for a dynamic handler function since
evrim at core.gen.tr**20060611145936
   it's static.  
   
   Parenscript disptacher was using function-dispatcher and a (lambda
   (app context)) to dispatch. I've implemented a usual dispatch method
   to dispatch paresncript js files. 
 
   The reason is, it's easier to debug now since handler lambda's are
   not instantiated across applications.
] 
[Use both ajax and non-ajax submitting in the add numbers example
attila.lendvai at gmail.com**20060610112733] 
[Added :focused support to some <ucw: tags, button is now ajax ready
attila.lendvai at gmail.com**20060610004025] 
[Fix <ucw:input's id generation
attila.lendvai at gmail.com**20060609210314] 
[Ajaxified the add some numbers example
attila.lendvai at gmail.com**20060610002634] 
[Fix config.lisp dependency in ucw.asd
attila.lendvai at gmail.com**20060609213216] 
[Tiny doc fix
attila.lendvai at gmail.com**20060609205951] 
[Remove extra progn's, set ajax form submit default to "post"
attila.lendvai at gmail.com**20060609205153] 
[Fix dispatcher creation in the examples
attila.lendvai at gmail.com**20060609163501] 
[Added tooltip support to form fields
attila.lendvai at gmail.com**20060609151248] 
[Resolve conflicts in form.lisp
attila.lendvai at gmail.com**20060604202644] 
[Export get-paremeter and map-parameters
Marco Baringer <mb at bese.it>**20060604171847] 
[When adding the ucw-form-field-invalid class remeber to remove the ucw-form-field-valid class (Patch by: Marijn Haverbeke <marijnh at gmail.com>)
Marco Baringer <mb at bese.it>**20060604171146] 
[- secure-application#exit-user is broken due to removal of find-entry-point.
evrim at core.gen.tr**20060531115550] 
[Silly typos in previous patch
Marco Baringer <mb at bese.it>**20060604141410] 
[Added :class attributes to all the form elements
Marco Baringer <mb at bese.it>**20060604140146] 
[Allow for component-slot definition with :component nil
Nathan Bird <nathan at acceleration.net>**20060508155758
 This patch changes the way the component-class.component-sltos 
 list is built. It should now be in the same order as the class-slots
 which is hopefully the same order they were defined in.
 
 Additionally (the bigger reason) is so that slots that were 
 declared with ':component nil' are marked as being component-slots
 but are left unbound.
] 
[Fix form default action stuff in per-application js
attila.lendvai at gmail.com**20060609150905] 
[Export collapsedp, other stylistic changes
attila.lendvai at gmail.com**20060608123140] 
[Support <form rendering detection for ajac-component-mixin
attila.lendvai at gmail.com**20060608100303
 
 The problem at hand: an ajax components under another component that rendered a form. When the
 sub-component was rendered due to an ajax request the form tag's stuff is not on the stack, but
 the rendering of the sub-component depends on this information.
 
 Current answer: <ucw:form tag checks *current-component* and in case it's an ajax-component-mixin
 sets the rendered-a-form-p slot. The defun render-nearest-ajax-component looks for the first
 ajax-component-mixin and then further if it finds another one with rendered-a-form-p. In case
 one was found then that will be the winner, meaning that ajax rendering will start at <ucw:form
 boundaries.
] 
[Fix return value of remove-component switching-container
attila.lendvai at gmail.com**20060607145208] 
[Modify setf component.current-component to return (values new-value happened)
attila.lendvai at gmail.com**20060607134355] 
[- export #:window-component.content-type
evrim at core.gen.tr**20060608112655] 
[Get rid of shared-init :after for dispatcher initialization
attila.lendvai at gmail.com**20060606211800
 
 Added a make-standard-ucw-dispatchers that return a list of dispatcher instances
 crutial for UCW's operation. Bring back :dispatchers initarg and set the default
 in :default-initargs
] 
[Fix dom replacing for Opera by Alexander Kjeldaas, also smarten up server answers
attila.lendvai at gmail.com**20060606211745] 
[(setf container.current-component) returns t when the set actually happened
attila.lendvai at gmail.com**20060606195958] 
[Delete accidentally committed js stuff
attila.lendvai at gmail.com**20060604201801] 
[Added collapsible-pane component
attila.lendvai at gmail.com**20060604201629] 
[Save backtracked even when no new frame is created
attila.lendvai at gmail.com**20060604201405] 
[Fix dynamic forms example delete
attila.lendvai at gmail.com**20060604201256] 
[Split ucw.css and examples.css
attila.lendvai at gmail.com**20060604200705] 
[Added child-components to container, WARNING: small api change
attila.lendvai at gmail.com**20060604185229
 
 In the process renamed the :pred kayword argument to :predicate
] 
[Doc/comment fixes
attila.lendvai at gmail.com**20060604185138] 
[Add typecheck to s-c s-v-u-c and also set the parent slot
attila.lendvai at gmail.com**20060604172617] 
[Some work on js generation, fix form submission encoding with ajax
attila.lendvai at gmail.com**20060603150919] 
[Bind swank::*sldb-quit-restart* to 'fail-miserably
Nathan Bird <nathan at acceleration.net>**20060531193531
 
 Now when the slime debug buffer pops up while handling a web request,
 'q' (sldb-quit) will cause the 'fail-miserably restart to be invoked.
] 
[fixing logging message typo
Nathan Bird <nathan at acceleration.net>**20060531155026] 
[made the remove component :after be correctly specialized
Russ Tyndall <russ at acceleration.net>**20060529222215] 
[added pass through for optional args in read client string
Russ Tyndall <russ at acceleration.net>**20060525223940] 
[made it correctly out put human number strings rather than lisp number strings (aka no more 1.23d0)
Russ Tyndall <russ at acceleration.net>**20060517164149] 
[provide #'meta-refresh
Nathan Bird <nathan at acceleration.net>**20060529215502
 Cause a meta-refresh (a freshly got (GET) url) at this point.
 This is useful in order to have a GET url after a form POST's
 actions have completed running. The user can then refresh to his
 heart's content.
] 
[Adding child-components export
Nathan Bird <nathan at acceleration.net>**20060508161431] 
[Add a child-components function
Nathan Bird <nathan at acceleration.net>**20060508160149] 
[Export ucw::get-header
Marco Baringer <mb at bese.it>**20060530233436] 
[Added render-option specialized on nil
attila.lendvai at gmail.com**20060530213435] 
[Merge conflicts with Added logging statements which report the action being...
attila.lendvai at gmail.com**20060530142740] 
[Added logging statements which report the action being evaluated.
Marco Baringer <mb at bese.it>**20060529080637] 
[Don't specialize slot-value-using-class on the value parameter
Marco Baringer <mb at bese.it>**20060530105600] 
[write-uri-sans-query needs to deal with 'special' characters in the query-part
Marco Baringer <mb at bese.it>**20060529182043] 
[Add "_" prefix to all ucw defined query parameters.
Marco Baringer <mb at bese.it>**20060529072846
 
 This helps aliviate (but does not completly remove) the probablitily
 of a ucw defined parameter conflicting with a user defined
 parameter. I'll admit that the odds of one of ucw's randomly defined
 parameter names being the same as a user defined parameter name are
 slim, but when it does happen it's a
 once-every-1000-totally-unreproducable-100%untractable error :(
] 
[Implement radio-button widget
Marco Baringer <mb at bese.it>**20060529072632] 
[Added load-relative-url and absolute-url-from
attila.lendvai at gmail.com**20060528111238] 
[Some more work on with-action-args macro
attila.lendvai at gmail.com**20060528000045] 
[Added debug support for parenscript stuff
attila.lendvai at gmail.com**20060527235747] 
[Merge conflict in ucw-tags
attila.lendvai at gmail.com**20060527123809] 
[Set arnesi:*warn-undefined* to T in the start.lisp script
Marco Baringer <mb at bese.it>**20060526192721] 
[Fix erroneous evaluation bug in ucw-tags.lisp
Marco Baringer <mb at bese.it>**20060526192234
 
 the code which checked for the precesne of an action parameter in a
 <ucw:form was calling the action at runtime, instead of checking for
 the precense of an action parameter at compile time.
] 
[Ajaxified the option-dialog
attila.lendvai at gmail.com**20060526094248] 
[<ucw: tag refactoring, WARNING: incompatible changes
attila.lendvai at gmail.com**20060526090311
 
 The :action <ucw: tag parameter has been renamed to :action-body. The old :action
 from now on expects an action registered with register-action. Actions that were
 created with :ajax t will get the special client side script that handles their
 ajax answers.
] 
[Tiny doc fix
attila.lendvai at gmail.com**20060525225601] 
[Added remove-component to container
attila.lendvai at gmail.com**20060523154055] 
[Added (setf container.current-component)
attila.lendvai at gmail.com**20060519175132] 
[Got rid of *-ajax-* variants, and put in the ajax mixin at appropiate places
attila.lendvai at gmail.com**20060519112018] 
[POST is post in the standard
attila.lendvai at gmail.com**20060518220542] 
[Made ajax js more customizable
attila.lendvai at gmail.com**20060518214527] 
[Make per-application.js matching regex strict
attila.lendvai at gmail.com**20060518214310] 
[Some small ajax related changes
attila.lendvai at gmail.com**20060518201940] 
[Khm, further fix link tag
attila.lendvai at gmail.com**20060518201840] 
[Fix link tags when using with ajax
attila.lendvai at gmail.com**20060518190246] 
[Made <ucw:select's on-change ajax ready
attila.lendvai at gmail.com**20060516171549] 
[Added register-ajax-action
attila.lendvai at gmail.com**20060516171341
 
 which is basically a
 
 (register-action (:raw [defaults to t])
   (handle-ajax-request ()
     , at body))
 
] 
[Enable :make-new-frame by default when :with-call/cc is enabled in make-action-body
attila.lendvai at gmail.com**20060516150704] 
[fixes several buglike things in forms:
cjstuij at gmail.com**20060516123951
 
 - the javascript number validator now accepts fractions
 - the javascript integer validator now disallows floating points
 - fixed the email validator
 - allows <ucw:month-select to have other attributes than just accessor
 - in month-select changed Dicember to December
 
] 
[Changed widget-component's render from :wrapping to :wrap-around
attila.lendvai at gmail.com**20060516144443] 
[Move binding of *current-component* into render :wrap-around
attila.lendvai at gmail.com**20060516112354] 
[Follow arnesi's enable-bracket-reader change
attila.lendvai at gmail.com**20060515173147] 
[merge the `:ucw.default' and `:ucw.config' systems into the `:ucw' one
Luca Capello <luca at pca.it>**20060514233614
 
 To simplify things, the two systems used by bin/ucwctl are merged into
 the general `:ucw' one.  As a side-effect, etc/start.lisp now loads
 the `*ucw-config-file*' when present or set the `*ucw-systems*' and
 `*ucw-applications*' variables.
 
   http://common-lisp.net/pipermail/bese-devel/2006-May/002122.html
] 
[Export ucw:is-an-integer-validator.
Maciek Pasternacki <maciekp at japhy.fnord.org>**20060514232653] 
[Add message slot to validator class to contain an error message.
Maciek Pasternacki <maciekp at japhy.fnord.org>**20060514232631] 
[ucw:ajax-action now understands :invalidate which is a component to be rendered and pushed to the client
attila.lendvai at gmail.com**20060515094744] 
[Added AJAX increment/decrement buttons to the counter example
attila.lendvai at gmail.com**20060515091412] 
[Some more stuff for AJAX
attila.lendvai at gmail.com**20060515091346
 
 Most <ucw: tags where they previously needed an action, now they understand also an action-id variant, where
 you can pass in action ids created with make-action(-body). This way you can have full control
 on how the action is handled (see make-action and action-dispatcher for details).
 
 The ucw:action tal tag is now an implicit progn.
 
 There's a new tal tag called ucw:ajax-action, see counter.tal in the following patch for an example.
 
 And probably some more. See the examples changes in the following patches...
] 
[Alter form submission to play better with ajax
attila.lendvai**20060512151613] 
[Fix screwed up paren
attila.lendvai**20060511173636] 
[Made action options publically available through the API
attila.lendvai at gmail.com**20060511161856
 
 WARNING: incompatible API changes
 
 Methods in question:
     action-href       - accepts strings (action-id), functions and action-entries made with make-action
     action-href-body  - accepts all key args that make-action does and delegates them
     make-new-action   - deleted
     register-action   - created an action-entry with make-action and register is returning the action id
     make-action       - public factory for action-entry's
] 
[Tiny doc fix
attila.lendvai at gmail.com**20060511145417] 
[Make <ucw:form a little smarter
attila.lendvai at gmail.com**20060508201605
 
 The new stuff is:
  - inside-a-form-p
  - current-form-id
  - register-submit-callback
  - submit-callbacks: they are callbacks that are executed whenever the current form is submitted
                      before any actions (TODO: this relies on the parameter order in the request
                      which may be undefined in the standard?)
 
 Also use the ucw per-application-parenscript file for js-side scripts of these changes.
] 
[switch from bare-bones dojo to ajax edition. To fix dependency errors where ucw expects the dojo.html namespace or whatever you want to call it to be present.
cjstuij at gmail.com**20060510220528] 
[Read-from-client-string
Nathan Bird <nathan at acceleration.net>**20060430215547
 Useful for reading data from questionable origins where *read-eval* needs to be false.
] 
[Indentation fixup in tabbed-pane.lisp
Marco Baringer <mb at bese.it>**20060509102104] 
[Minor refactoring in container.lisp
Marco Baringer <mb at bese.it>**20060509102050] 
[Mention the difference between (setf application.dispathers) and (setf (slot-value app 'dispatchers)) in the docstring
Marco Baringer <mb at bese.it>**20060509101051] 
[Some more changes to action handling
attila.lendvai at gmail.com**20060508201646
 
 Introduced the following parameters for actions:
   :call-render-loop - you can turn off ralling render loop after the action returns
   :make-new-frame - you can turn off backtracking, the same frame remains after the action
   :manage-response - when nil it's up to the action to manage response sending
 
 action-href now works with a lambda or a string action id
 
 Also make sure frame and session is only set when they would change the value. Think of
 users overriding teh protocol like cookie-session-application setting the session cookie, etc...
] 
[Store an action-struct instead of a simple lambda when making actions
attila.lendvai at gmail.com**20060504151455
 
 The new action-entry struct looks like this:
 
 (defstruct (action-entry (:conc-name action-))
   (lambda nil :type function)
   (valid-p t :type boolean)
   (isolated-p nil :type boolean)
   (ajax-p nil :type boolean)
   (id nil :type (or nil string)))
 
 make-new-action returns an instance of this, register-action returns only the action-id.
 
 Both of them accept the :isolate and :ajax parameters. :ajax means that the action will
 be processed much simpler then normal actions. For example the render-loop will not be
 called after the action returned.
 
 Some other code that I use and is still waiting to get mature:
 
 (defmacro handle-ajax-request ((&key (content-type "text/xml") (raw nil)) &body body)
   (with-unique-names (yaclml-stream request response)
     `(let* ((,request (ucw:context.request *context*))
             (,response (ucw:context.response *context*))
             ,@(unless raw
                       `((,yaclml-stream (make-string-output-stream)))))
       (setf (ucw::get-header ,response "Status") "200 OK"
        (ucw::get-header ,response "Content-Type") ,content-type)
       (send-headers ,response)
       ,@(if raw
             body
             `((yaclml::with-yaclml-stream ,yaclml-stream
                 ,(when (string= content-type "text/xml")
                        `(<:as-is "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"))
                 , at body)
               (write-sequence (string-to-octets (get-output-stream-string ,yaclml-stream) :utf-8)
                (ucw::network-stream ,request))))
       (close-request ,request))))
 
 ;; this is rendered with (action-href ... :ajax t)
 (<dwim:option :ajax-action (handle-ajax-request ()
                               (setf (current-view-of entity-rr) 'standard-instance-reference-view)
                               (render-nearest-ajax-component entity-rr))
               :icon icon::zoom-out)
 
 (defun render-nearest-ajax-component (component)
   (bind ((ajax-component (iter (for current first component then (slot-value current 'ucw::parent))
                                (while (slot-boundp current 'ucw:parent))
                                (when (typep current 'ajax-component-mixin)
                                  (leave current)))))
     (assert ajax-component)
     ;; TODO use xml reader syntax
     (princ "<data xmlns=\"http://www.w3.org/1999/xhtml\">" yaclml:*yaclml-stream*)
     (render ajax-component)
     (princ "</data>" yaclml:*yaclml-stream*)))
] 
[Add a <ucw:simple-submit and <ucw:simple-form that do not require javascript.
Drew Crampsie <drewc at tech.coop>**20060506233602
 
 <ucw:simple-submit uses a BUTTON tag to render a submit button that does not require javascript
 
 To make this happen, i added a method to find-action that operates on a list, 
 grabbing the car and using it as the action id. When a form is submitted with an extra action parameter, 
 the last one submitted (first in the list) is taken to be the action-id.
 
 This allows forms without javascript!! SIMPLE-SUBMIT will work in the standard UCW:FORM, 
 SIMPLE-FORM is a form without the JS cruft, but will not work with standard <UCW:* submit buttons.
 
 
 
] 
[Fix serve-file
attila.lendvai at gmail.com**20060509132443] 
[Added serve-sequence next to serve file with a defserve macrolet
attila.lendvai at gmail.com**20060508220833] 
[Resolve conflicts with "Don't send headers set to NIL (especially Content-Length:) in response."
attila.lendvai at gmail.com**20060508203035] 
[Add dojo.js to standard-window to avoid user surprises
attila.lendvai at gmail.com**20060508202328] 
[Ensure in shared-initialize of standard-application that the required dispatchers exists
attila.lendvai at gmail.com**20060508202029
 
 action dispatcher and a parenscript-dispatcher is crucial for UCW to function properly.
 To make sure things work fine in the normal situations add them in shared-initialize.
 For full control one can still use the application.dispatchers accessor...
] 
[Use context.cookie-value to acces session cookie, also rename the cookie constant to +ucw-session-cookie-name+
attila.lendvai at gmail.com**20060508190228] 
[Added parenscript-dispatcher
attila.lendvai at gmail.com**20060508185842
 
 It lazily compiles a parenscript file at the first request and tehn serves it.
] 
[Added a per-application parenscript file
attila.lendvai at gmail.com**20060506225010] 
[Added encoding method to response
attila.lendvai at gmail.com**20060506174248] 
[Added context.cookies and context.cookie-value
attila.lendvai at gmail.com**20060505223724] 
[Use widget-component.css-* accessors when rendering, so that it can be overridden
attila.lendvai at gmail.com**20060504151409] 
[Do not render the ol/li elements when the container has only one member
attila.lendvai at gmail.com**20060504120248] 
[Resolve conflicts
attila.lendvai at gmail.com**20060423184525] 
[Added tabindex support for form-fields
attila.lendvai at gmail.com**20060414130400] 
[Docfix for net-telent-date dependency.
Maciek Pasternacki <maciekp at japhy.fnord.org>**20060504233324] 
[INCOMPATIBLE CHANGE: add NET-TELENT-DATE dependency, send out Date: header, make SERVE-FILE cache-friendly (use Date:, Last-Modified:, Expires: and If-Modified-Since: headers).
Maciek Pasternacki <maciekp at japhy.fnord.org>**20060503013844] 
[Don't send headers set to NIL (especially Content-Length:) in response.
Maciek Pasternacki <maciekp at japhy.fnord.org>**20060503013648] 
[New function (delete-header message header-name).
Maciek Pasternacki <maciekp at japhy.fnord.org>**20060503011904] 
[Don't send body if HTTP method is HEAD.
Maciek Pasternacki <maciekp at japhy.fnord.org>**20060502222010] 
[Save HTTP method of request as string.
Maciek Pasternacki <maciekp at japhy.fnord.org>**20060502221955] 
[Initform for (request response).
Maciek Pasternacki <maciekp at japhy.fnord.org>**20060502221939] 
[Include in httpd response a request associated with it.
Maciek Pasternacki <maciekp at japhy.fnord.org>**20060502221158] 
[changed docs to get up to date and add some info
cjstuij at gmail.com**20060503094055] 
[Added send-redirect function.
Marco Baringer <mb at bese.it>**20060501154250
 
 send-redirect does what redirect-component's render method did but
 it's usable from a simple-dispatcher (or anywhere else we don't have
 ucw's component context machinery).
] 
[Use dolist*, not dolist, in tabbed-pane's render method.
Marco Baringer <mb at bese.it>**20060501135314] 
[Using (when (whatever) T) is weird, use (whatever) instead
Marco Baringer <mb at bese.it>**20060501135000] 
[Minor indentation/whitespace fixups in src/components/form.lisp
Marco Baringer <mb at bese.it>**20060501134849] 
[make-with-dummy-request-nicer
cjstuij at gmail.com**20060501001756] 
[tabbed-pane-makeover - tabbed panes are now wrapped in divs in stead of a table, for more design flexibility. Is no longer tied to a tal file.
cjstuij at gmail.com**20060430233920] 
[Removing integer-range-validator, use number-range-validator instead.
Nathan Bird <nathan at acceleration.net>**20060428165829] 
[the value of a number-field should be nil, not 0, if nothing was entered.
Nathan Bird <nathan at acceleration.net>**20060428164949] 
[bin/ucwctl: allow a custom ucwctl.conf via -u|--ucwctl-file
Luca Capello <luca at pca.it>**20060501110031
 
 This adds the possibility to specify a different ucwctl.conf file
 instead of the default /etc/ucw/ucwctl.conf.  Moreover, by default
 ucwctl now reads ~/.ucw/ucwctl.conf it it exists, overriding the
 values in the general /etc/ucw/ucwctl.conf, and the same happens if
 the ucwctl.conf is specified via the command line option.  All command
 line options override the values present in any ucwctl.conf files.
 The order is the following:
 
   1) /etc/ucw/ucwctl.conf (if it exists)
   2) ~/.ucw/ucwctl.conf (if it exists)
   3) -u|--ucwctl-file (if specified, exit if it cannot be read)
   4) command line options
 
 A deeper discussion is available at:
 
   http://common-lisp.net/pipermail/bese-devel/2006-April/001932.html
   http://common-lisp.net/pipermail/bese-devel/2006-April/001961.html
] 
[In the phone and email validators instead of defining a new slot we just use the :default-initargs class option
Marco Baringer <mb at bese.it>**20060428103114] 
[Adding documentation to form.lisp
Nathan Bird <nathan at acceleration.net>**20060428023256] 
[Rearranging file contents to reduce style-warnings
Nathan Bird <nathan at acceleration.net>**20060428022511] 
[Implementing value-validators
Nathan Bird <nathan at acceleration.net>**20060428020403
 Value-validators are a category of validators that are only applied if there 
 is actually a value. This was done to provide a more systematic scheme since
 there were several different ways it was being handled previously.
 Javascript validation in this patch is untested.
] 
[Expanded the forms example to include a number-field and number-range-validated field.
Nathan Bird <nathan at acceleration.net>**20060428014551] 
[added a standard regular exprexpression validator then made e-mail-validator use it.  E-mail-validator IS NO LONGER INVALID IF EMPTY. Adde d an international phonenumber validator
russ at acceleration.net**20060425154947] 
[added regex exports
russ at acceleration.net**20060424225714] 
[Comment fixup
Nathan Bird <nathan at acceleration.net>**20060427173259] 
[Added missing id param that got lost in my <ucw:form changes
attila.lendvai at gmail.com**20060424150549] 
[TAG 2006-04-25
Marco Baringer <mb at bese.it>**20060425145623] 
Patch bundle hash:
4f6d66aa4142ecadc8657518d4c6c939573251cf


More information about the bese-devel mailing list