Fri Jul 4 13:33:03 CEST 2008 Jan Rychter * Slava's navigation patch, merged with latest changes New patches: [Slava's navigation patch, merged with latest changes Jan Rychter **20080704113303] { hunk ./pub/stylesheets/main.css 50 -.view .empty-navigation, .view ul li, .view fieldset ul li, +.view .empty-menu, .view ul li, .view fieldset ul li, hunk ./pub/stylesheets/main.css 60 -.view .empty-navigation, .view ul li, .view fieldset ul li, +.view .empty-menu, .view ul li, .view fieldset ul li, hunk ./pub/stylesheets/main.css 70 -.view .empty-navigation, .view ul, .view fieldset ul, .table table, +.view .empty-menu, .view ul, .view fieldset ul, .table table, hunk ./pub/stylesheets/navigation.css 1 - -.menu -{ - width: 15em; - background: #d8eaf8 url(/pub/images/widget/menu/top_background.png) repeat-x; -} - -.menu h1 -{ - background: #d8eaf8; -} - -.menu .extra-top-1 -{ - background: url(/pub/images/widget/menu/top_left.png) no-repeat top left; -} - -.menu .extra-top-2 -{ - background: url(/pub/images/widget/menu/top_right.png) no-repeat top right; - border-bottom-color: #bfd9ec; -} - -.empty-navigation -{ - padding-left: 0.5em; -} - -.selected-item -{ - color: #606060; - background-color: #bfd9ec; -} - -.menu ul li -{ - padding-left: 0; -} - -.menu ul li.selected-item -{ - padding-left: 0.5em; -} - -.menu ul li.selected-item span -{ - background: url(/pub/images/widget/menu/arrow.png) no-repeat center left; - padding-left: 1em; -} - -.menu h1, .view .empty-navigation, .menu ul li -{ - border-top-color: #f6fbfd; - border-bottom-color: #bfd9ec; -} - -.menu h1, .menu .empty-navigation, .menu ul -{ - border-left-color: #bfd9ec; - border-right-color: #bfd9ec; -} - -.menu .extra-bottom-1 -{ - background: url(/pub/images/widget/menu/bottom_background.png) repeat-x top; - border-top-color: #f6fbfd; -} - -.menu .extra-bottom-2 -{ - background: url(/pub/images/widget/menu/bottom_left.png) no-repeat top left; -} - -.menu .extra-bottom-3 -{ - background: url(/pub/images/widget/menu/bottom_right.png) no-repeat top right; -} - -.menu a -{ - display: block; -} - -/* IE 6 and 7 hover hack */ -*:first-child+html {} * html {} .menu a -{ - height: 1%; -} - -.menu a:hover -{ - background-color: #bfd9ec; -} - rmfile ./pub/stylesheets/navigation.css hunk ./src/request-handler.lisp 5 - *uri-tokens* *current-page-description*)) + *uri-tokens* *current-navigation-url* *current-page-description*)) hunk ./src/request-handler.lisp 12 -action (if any), prepares the navigation controls using -'apply-uri-to-navigation', and renders the main composite wrapped in -HTML provided by 'render-page'. If the request is an AJAX request, -only the dirty widgets are rendered into a JSON data structure. It -also invokes user supplied 'init-user-session' on the first request -that has no session setup. +action (if any) and renders the main composite wrapped in HTML +provided by 'render-page'. If the request is an AJAX request, only the +dirty widgets are rendered into a JSON data structure. It also invokes +user supplied 'init-user-session' on the first request that has no +session setup. hunk ./src/request-handler.lisp 67 - *current-page-description*) + *current-page-description* *uri-tokens-fully-consumed*) hunk ./src/request-handler.lisp 69 - *on-ajax-complete-scripts* *uri-tokens* *page-dependencies* - *current-page-description*)) + *on-ajax-complete-scripts* *uri-tokens* *current-navigation-url* + *page-public-dependencies* *current-page-description* + *uri-tokens-fully-consumed*)) hunk ./src/request-handler.lisp 74 - ; a default dynamic-action hook function wraps get operations in a transaction + ;; a default dynamic-action hook function wraps get operations in a transaction hunk ./src/request-handler.lisp 86 + (render-dirty-widgets) hunk ./src/request-handler.lisp 88 - (setf *current-navigation-url* - (obtain-uri-from-navigation - (find-navigation-widget - (root-composite)))) - (render-dirty-widgets)) - (progn - (apply-uri-to-navigation *uri-tokens* - (find-navigation-widget (root-composite))) - ; we need to render widgets before the boilerplate HTML - ; that wraps them in order to collect a list of script and - ; stylesheet dependencies. + ;; we need to render widgets before the boilerplate HTML + ;; that wraps them in order to collect a list of script and + ;; stylesheet dependencies. hunk ./src/request-handler.lisp 96 - ; render page will wrap the HTML already rendered to - ; *weblocks-output-stream* with necessary boilerplate HTML - (render-page))) + ;; render page will wrap the HTML already rendered to + ;; *weblocks-output-stream* with necessary boilerplate HTML + (render-page) + ;; make sure all tokens were consumed + (when (and (not *uri-tokens-fully-consumed*) *uri-tokens*) + (setf (return-code) +http-not-found+)))) hunk ./src/request.lisp 5 - ajax-request-p pure-request-p redirect)) + ajax-request-p pure-request-p redirect + compose-uri-tokens-to-url)) hunk ./src/request.lisp 53 + +(defun compose-uri-tokens-to-url (tokens) + "Encodes and concatenates uri tokens into a url string. Note that +the string will not contain separator slashes at the beginning or +end." + (string-downcase + (apply #'concatenate 'string + (intersperse + (mapcar #'url-encode (ensure-list tokens)) "/")))) hunk ./src/snippets/html-utils.lisp 24 - (:form :id ,id :class ,class :action (string-right-trim "/" *current-navigation-url*) + (:form :id ,id :class ,class :action (request-uri-path) hunk ./src/utils/misc.lisp 16 - function-designator-p)) + function-designator-p list-starts-with safe-subseq)) hunk ./src/utils/misc.lisp 414 +(defun list-starts-with (list elements &key (test 'eq)) + "Determines if a list starts with the given elements." + (let ((elements (ensure-list elements))) + (if elements + (when (funcall test (car list) (car elements)) + (list-starts-with (cdr list) (cdr elements))) + t))) + +(defun safe-subseq (sequence start &optional end) + "A safe alternative to subseq that automatically adjust indices." + (let ((length (length sequence))) + (when (> start length) + (setf start length)) + (when (and end (> end length)) + (setf end length)) + (subseq sequence start end))) + hunk ./src/widgets/composite.lisp 36 - do (if (widget-parent i) - (error "Widget ~a already has a parent." i) - (setf (widget-parent i) widget))) + do (setf (widget-parent i) widget)) hunk ./src/widgets/navigation.lisp 4 -(export '(navigation navigation-panes navigation-on-find-pane - navigation-current-pane navigation-render-menu-p pane-name - pane-widget current-pane *current-navigation-url* - navigation-default-pane with-navigation-header - render-navigation-body current-pane-widget init-navigation - make-navigation find-pane reset-current-pane)) +(export '(navigation render-navigation-menu init-navigation make-navigation)) hunk ./src/widgets/navigation.lisp 6 -(defwidget navigation (widget) - ((panes :accessor navigation-panes - :initform nil - :initarg :panes - :documentation "An association list of names and - widgets. The names will act as menu entries and attributized - names will go into the URL. When a particular entry is - clicked, its corresponding pane will be rendered.") - (on-find-pane :accessor navigation-on-find-pane - :initform nil - :initarg :on-find-pane - :documentation "If bound to a function, and the url - does not point to one of the panes in - 'navigation-panes', the function is called with two - arguments (navigation object, and the pane name). If - the function returns a widget, uses the widget to - present the URL. If the function returns nil, - assummes the pane does not exist. This can be used - for wiki-style URLs. Note, the returned widget will - be cached in 'dynamic-pane-cache'. To turn off - caching the widget, the function should return a - second value :no-cache.") - (dynamic-pane-cache :accessor navigation-dynamic-pane-cache - :initform nil - :documentation "If a pane is generated - dynamically via 'on-find-pane', it is cached in - this slot. This is done to maintain the same - instance of the generated widget accross - non-ajax requests.") - (current-pane :accessor navigation-current-pane - :initform nil - :initarg :current-pane - :documentation "A name that identifies currently - selected entry.") - (render-menu-p :accessor navigation-render-menu-p - :initform t - :initarg :render-menu-p - :documentation "If this flag is set to - true (default), navigation will render the menu with - links to the panes. Otherwise, no menu is - rendered.")) +(defwidget navigation (selector) + () hunk ./src/widgets/navigation.lisp 9 - tabbed control, etc. It contains a list of section names and widgets - associated with those sections, and allows the user to select a - particular section which it then renders.")) + tabbed control, etc. It is a convenience combination of the selector + widget and a menu snippet.")) hunk ./src/widgets/navigation.lisp 12 -(defparameter *current-navigation-url* nil - "Always contains a navigation URL at the given point in rendering -cycle. This is a special variable modified by the navigation controls -during rendering so that inner controls can determine their location -in the application hierarchy.") - -(defun pane-name (pane) - "Given a pane, returns its name." - (car pane)) - -(defun pane-widget (pane) - "Given a pane, returns a widget it represents." - (cdr pane)) - -(defgeneric navigation-default-pane (obj) - (:documentation - "Must return the name of the default pane for the navigation -object. The default implementation returns the first pane from -'navigation-panes'. Specialize this function to specify how to pick -default panes for your navigation object.") - (:method ((obj navigation)) - (pane-name (car (navigation-panes obj))))) - -;;; During initialization, current pane will automatically be set to -;;; the first available pane in the list, unless specified otherwise. -(defmethod initialize-instance :after ((obj navigation) &rest initargs &key &allow-other-keys) - (declare (ignore initargs)) - (when (null (navigation-current-pane obj)) - (setf (navigation-current-pane obj) - (navigation-default-pane obj))) - ;; A navigation widget doesn't have a random name assigned to - ;; automatically because the name is also displayed to the user. - (unless (slot-boundp obj 'dom-id) - (setf (slot-value obj 'dom-id) nil))) - -(defgeneric with-navigation-header (obj body-fn &rest args) - (:documentation - "Renders the header of the navigation widget. Unlike -'with-widget-header', which in case of the navigation widget wraps the -current pane as well as the navigation html, 'with-navigation-header' -only wraps navigation html.") - (:method ((obj navigation) body-fn &rest args) - (when (navigation-render-menu-p obj) - (with-html - (:div :class "view menu" - (with-extra-tags - (if (null (navigation-panes obj)) - (htm - (:div :class "empty-navigation" "No navigation entries")) - (htm - (:h1 (if (widget-name obj) - (str (humanize-name (widget-name obj))) - (str "Navigation"))) - (:ul - (apply body-fn obj args)))))))))) - -(defgeneric render-navigation-body (obj &rest args) +(defgeneric render-navigation-menu (obj &rest args) hunk ./src/widgets/navigation.lisp 14 - "Renders the body of the navigation widget. Unlike -'render-widget-body', which in case of navigation renders the current -pane, as well as navigation html, 'render-navigation-body' only -renders navigation HTML. - -This method uses '*current-navigation-url*' special variable to -determine its location in order to properly render paths in links.") + "Renders HTML menu for the navigation widget.") hunk ./src/widgets/navigation.lisp 17 - (with-html - (mapc (lambda (pane) - (let* ((pane-name (pane-name pane)) - (pane-selected-p (equalp pane-name (navigation-current-pane obj))) - (pane-class (when pane-selected-p - "selected-item"))) - (htm - (:li :class pane-class - (if pane-selected-p - (htm (:span (str (humanize-name pane-name)))) - (htm (:a :href (concatenate 'string *current-navigation-url* - (unless (equalp pane-name - (navigation-default-pane obj)) - (string-downcase - (url-encode (attributize-name pane-name))))) - (str (humanize-name pane-name))))))))) - (navigation-panes obj))))) + (render-menu (mapcar (lambda (orig-pane) + (let ((pane (car (selector-mixin-canonicalize-pane orig-pane)))) + (cons (pane-info-label pane) + (if (eq (selector-mixin-default-pane obj) orig-pane) + "/" + (compose-uri-tokens-to-url (pane-info-uri-tokens pane)))))) + (selector-mixin-panes obj)) + :selected-uri "baz" + :header (if (widget-name obj) + (humanize-name (widget-name obj)) + "Navigation") + :empty-message "No navigation entries"))) hunk ./src/widgets/navigation.lisp 31 - (if (current-pane-widget obj) - (let ((*current-navigation-url* (concatenate 'string - *current-navigation-url* - (string-downcase - (url-encode (navigation-current-pane obj))) - "/"))) - (declare (special *current-navigation-url*)) - (render-widget (current-pane-widget obj))) - (setf (return-code) +http-not-found+)) - (apply #'with-navigation-header obj #'render-navigation-body args)) + (call-next-method) + (apply #'render-navigation-menu obj args)) hunk ./src/widgets/navigation.lisp 34 -(defun current-pane-widget (obj) - "Accepts a navigation object and returns the widget that represents its -currently selected pane." - (pane-widget (find-pane obj (navigation-current-pane obj)))) +(defmethod widget-public-dependencies ((obj navigation)) + (append (list (public-file-relative-path :stylesheet "menu")) + (call-next-method))) hunk ./src/widgets/navigation.lisp 46 - (loop for count from 1 - for x in args - for y in (cdr args) + (loop + for count from 1 + for x in args + for y in (cdr args) hunk ./src/widgets/navigation.lisp 51 - do (push-end `(,(attributize-name x) . ,y) (navigation-panes obj))) - (when (null (navigation-current-pane obj)) - (setf (navigation-current-pane obj) - (navigation-default-pane obj))) + do (push-end `(,(attributize-name x) . ,y) (selector-mixin-panes obj))) hunk ./src/widgets/navigation.lisp 61 -(defun find-pane (obj name) - "Returns a cons cell identifying the navigation pane if it exists, -otherwise returns nil. This function first looks through static panes, -then through the cached dynamic pane if it exists, and finally calls -'on-find-pane' if it's bound to a function." - (or (find (attributize-name name) - (navigation-panes obj) :key #'pane-name :test #'equalp) - (when (equalp (pane-name (navigation-dynamic-pane-cache obj)) - name) - (navigation-dynamic-pane-cache obj)) - (when (navigation-on-find-pane obj) - (multiple-value-bind (w caching) - (funcall (navigation-on-find-pane obj) - obj name) - (when w - (if (eq caching :no-cache) - (cons name w) - (setf (navigation-dynamic-pane-cache obj) - (cons name w)))))))) - -(defun reset-current-pane (obj) - "Sets the current pane to the first available pane in the list." - (setf (navigation-current-pane obj) - (navigation-default-pane obj))) - -(defmethod find-widget-by-path* (path (root navigation)) - (find-widget-by-path* (cdr path) - (pane-widget (find-pane root (car path))))) - -;;; Code that implements friendly URLs ;;; -(defun apply-uri-to-navigation (tokens obj) - "Takes URI tokens and applies them one by one to navigation widgets -in order to allow for friendly URLs. The URLs are basically intimately -linked to navigation controls to simulate document resources on the -server." - (when (null tokens) - (reset-navigation-widgets obj) - (return-from apply-uri-to-navigation)) - (let ((first-token (url-decode (car tokens)))) - (if (and obj (find-pane obj first-token)) - (progn - (setf (navigation-current-pane obj) first-token) - (apply-uri-to-navigation (cdr tokens) - (find-navigation-widget (current-pane-widget obj)))) - (setf (return-code) +http-not-found+)))) - -(defun obtain-uri-from-navigation (obj) - "Walks the widget tree from the given navigation widget and builds a -URI string." - (if obj - (format nil "/~A~A" - (navigation-current-pane obj) - (obtain-uri-from-navigation - (find-navigation-widget - (current-pane-widget obj)))) - "/")) - -(defun find-navigation-widget (comp) - "Given a composite 'comp', returns the first navigation widget -contained in 'comp' or its children." - (when (null comp) - (return-from find-navigation-widget)) - (when (typep comp 'navigation) - (return-from find-navigation-widget comp)) - (car (flatten (remove-if #'null - (mapcar (lambda (w) - (typecase w - (navigation w) - (composite (find-navigation-widget w)) - (otherwise nil))) - (composite-widgets comp)))))) - -(defun reset-navigation-widgets (obj) - "Resets all navigation widgets from 'obj' down, using -'reset-current-pane'." - (unless (null obj) - (reset-current-pane obj) - (reset-navigation-widgets (find-navigation-widget (current-pane-widget obj))))) - hunk ./src/widgets/widget/widget.lisp 93 +;;; Don't allow setting a parent for widget that already has one +;;; (unless it's setting parent to nil) +(defmethod (setf widget-parent) (val (obj widget)) + (if (and val (widget-parent obj)) + (error "Widget ~a already has a parent." obj) + (setf (slot-value obj 'parent) val))) hunk ./src/widgets/widget/widget.lisp 105 -(defmethod (setf widget-rendered-p) (obj val) +(defmethod (setf widget-rendered-p) (val obj) hunk ./weblocks.asd 45 - (:file "html-utils")) + (:file "html-utils") + (:file "menu")) hunk ./weblocks.asd 150 + (:file "dispatcher" + :depends-on (widget)) + (:file "selector-mixin" + :depends-on (widget dispatcher)) + (:file "selector" + :depends-on (widget dispatcher selector-mixin)) hunk ./weblocks.asd 157 - :depends-on ("composite" widget))) + :depends-on (widget selector))) } Context: [Resolve parallel proxy patch conflict eslick@media.mit.edu**20080703113754] [Set proxy-oid slot after making associated persistent object. rme@clozure.com**20080703070624] [Add dependency for proxy.lisp rme@clozure.com**20080703031709] [Fix for duplicate persist-object calls eslick@media.mit.edu**20080702135506] [Support for quickforms using the elephant proxy mechanism eslick@media.mit.edu**20080702075720] [Fixed warning in elephant store eslick@media.mit.edu**20080626094906] [introduce dom-object-mixin and a uniform dom-id generation scheme Jan Rychter **20080625173213] [fix (authenticatedp) to work according to its documentation Jan Rychter **20080529110525] [eliminate superfluous attributize-name Jan Rychter **20080517095029] [add json-function, make use of it in all places, replacing strings with parenscript as we go Jan Rychter **20080624105046] [new dependencies subsystem Jan Rychter **20080624103939] [implement view validators (:satisfies for views) Jan Rychter **20080622104507] [Predicates supplied as :satisfies parameters in views may now return error messages. Jan Rychter **20080622104550] [Kill *invalid-input-message*, make parsers generate the full error message, fix documentation and tests Jan Rychter **20080529103311] [add an :extra-submit-code parameter to with-html-form Jan Rychter **20080624100340] [CONTRIB: removed spurious notice in integer-range.lisp; added NUMBER-RANGE presentation and parser. polzer@gnu.org**20080620180620] [Match metatilities-base interface change. Stephen Compall **20080620025442] [CONTRIB: added INTEGER-RANGE presentation/parser polzer@gnu.org**20080619153857] [CONTRIB: added example for TabView, Panel, Resize. polzer@gnu.org**20080619100932] [CONTRIB: fixed dual password parser polzer@gnu.org**20080619075108] [added user contributions (YUI, lpolzer) polzer@gnu.org**20080617094946] [Making dataedit-drilldown-action a generic function coffeemug@gmail.com**20080613043156] [Export WIDGET-DOM-ID for user code. polzer@gnu.org**20080612081721] [Fixing resetting of gen-id in test suite coffeemug@gmail.com**20080612053431] [Added WIDGET-DOM-ID to generate consistent IDs across JS and CSS code. polzer@gnu.org**20080611174936] [Removed spurious (BREAK) in login widget code. polzer@gnu.org**20080611174852] [GEN-ID: accept an optional prefix akin to GENSYM's interface polzer@gnu.org**20080610112314] [Elephant efficiency improvements, support for standard classes, fix some bugs eslick@media.mit.edu**20080603085407] [Only provide a default webapp if the user hasn't installed her own, yet. polzer@gnu.org**20080528115243] [DEFPARAMETER->DEFVAR in server.lisp:*public-files-path* polzer@gnu.org**20080528114847] [Removing filter-related code from elephant store coffeemug@gmail.com**20080513161752] [Refactoring of request-handler.lisp to support dynamic hooks; chaupdated elephant store to use the facility; fixed two test setup issues eslick@media.mit.edu**20080513040153] [Add elephant test, demo and fix bugs in transaction handling (mp safe now I hope) eslick@media.mit.edu**20080512191859] [Rename slot for clairty; fix object deletion bug eslick@media.mit.edu**20080512120712] [Fix aif bug in elephant proxy eslick@media.mit.edu**20080511121207] [Elephant store with proxy support eslick@media.mit.edu**20080511120611] [Added an elephant store eslick@media.mit.edu**20080510182614] [Refactored client-side initiateAction*. Extended WITH-HTML-FORM to let the user choose the JS submission function. polzer@gnu.org**20080506155445] [Fixing find-slot-dsd to work for multiple inheritance coffeemug@gmail.com**20080505232653] [Fixing an issue with encoded titles coffeemug@gmail.com**20080504180452] [Login widget should focus on first input field by default coffeemug@gmail.com**20080501003612] [Adding support for focusing form elements coffeemug@gmail.com**20080501003145] [Replacing generate-widget-id with gen-id coffeemug@gmail.com**20080501002258] [Updating prototype bundled with weblocks to 1.6.0.2 coffeemug@gmail.com**20080501002237] [Adding support for width and height to image presentation coffeemug@gmail.com**20080430212415] [Improving datalist item styling (removing headers) coffeemug@gmail.com**20080430183639] [Fixing an item-id type descreptancy in dataseq select coffeemug@gmail.com**20080430044519] [Missing dataedit tests coffeemug@gmail.com**20080430035315] [Refactoring gridedit into dataedit-mixin, adding support for listedit coffeemug@gmail.com**20080430031445] [Removing manual from the docs (maintained on the wiki now) coffeemug@gmail.com**20080427052916] [Fixing new widget id scheme - ids are expected to be strings coffeemug@gmail.com**20080421181810] [Fixing unit tests related to gensym fix coffeemug@gmail.com**20080421061715] [OpenMCL changed gensym on us to only be unique accross threads. Implemented our own session-based version of widget numbering scheme coffeemug@gmail.com**20080421060530] [Making loop iteration CL compliant in snippets coffeemug@gmail.com**20080421052043] [Refactoring datagrid into dataseq and datagrid, and adding datalist widget coffeemug@gmail.com**20080421050614] [Fixing sequence access on postgres coffeemug@gmail.com**20080415010216] [Improving ajax errors debugging support (fixing on IE, fixing unit tests) coffeemug@gmail.com**20080411013513] [Providing much better handling of session timeouts and ajax errors coffeemug@gmail.com**20080410185507] [Adding user-management utilities to login widget coffeemug@gmail.com**20080402234506] [Adding support for *last-session* (in debug mode) and active-sessions coffeemug@gmail.com**20080402233204] [Specifying background for navigation (necessary with recent css changes) coffeemug@gmail.com**20080331051453] [Fixing function-designator-p to work on more implementations coffeemug@gmail.com**20080326061541] [Improving do-widget error message coffeemug@gmail.com**20080323195759] [Improving error reporting in do-widget coffeemug@gmail.com**20080323195107] [Adding login widget coffeemug@gmail.com**20080323170438] [Adding support for redirect on AJAX coffeemug@gmail.com**20080323164924] [Fixing a typo in quickform docs coffeemug@gmail.com**20080322232902] [Enhancing quickform widget to remove stale messages after successful submission coffeemug@gmail.com**20080321044425] [Adding quickform widget coffeemug@gmail.com**20080320203030] [Misplaces paren in call-answer coffeemug@gmail.com**20080320202648] [Explicit error on replacing a widget with no parent coffeemug@gmail.com**20080320202205] [Factoring class-from-view out of render-view coffeemug@gmail.com**20080320022511] [Adding support for non-field specific error messages in form views coffeemug@gmail.com**20080320021525] [Adding wiki-style navigation widget caching coffeemug@gmail.com**20080319032939] [Adding support for specifying where clause to grids coffeemug@gmail.com**20080319025529] [Fixing url-presentation docs coffeemug@gmail.com**20080319022456] [Adding support for wiki-style URLs to navigation widget coffeemug@gmail.com**20080318215543] [Refactoring navigation widget coffeemug@gmail.com**20080318205038] [Fixing request handler to act more sensibly when action throws with respect to db transactions coffeemug@gmail.com**20080318042626] [Fixing a css issue with forms coffeemug@gmail.com**20080317230351] [Adding render-form-and-button snippet coffeemug@gmail.com**20080317225556] [Fixing documentation typo coffeemug@gmail.com**20080317212458] [Adding support for image and url presentations coffeemug@gmail.com**20080317212410] [Fixing datagrid scratch store bug coffeemug@gmail.com**20080317200204] [Adding memory-utils-test (unused for now) coffeemug@gmail.com**20080317194255] [Adding support for scratch stores coffeemug@gmail.com**20080317194047] [Removing incorrect assumption in hash-keys test coffeemug@gmail.com**20080317052324] [Defining a default action for forms coffeemug@gmail.com**20080317052302] [Adding support for rendering views by creating objects on the fly coffeemug@gmail.com**20080317052215] [Adding support for renaming formview buttons coffeemug@gmail.com**20080316185322] [Adding support for freeform captions in the views coffeemug@gmail.com**20080315184350] [Fixing documentation for make-action coffeemug@gmail.com**20080314231638] [Fixing do-widget to mark appropriate widgets as dirty coffeemug@gmail.com**20080227205705] [Replacing defview-anon with defview () coffeemug@gmail.com**20080227191531] [Fixing an issue with do-widget that incorrectly replaces widgets in certain cases coffeemug@gmail.com**20080227184222] [Adding option not to render navigation menu coffeemug@gmail.com**20080227182826] [Prevent subclasses of parser from generating own error messages if there is a user-supplied one. Jan Rychter **20080224104234] [Fixing a typo in dropdown coffeemug@gmail.com**20080223173707] [Fixing password presentation to work on null values coffeemug@gmail.com**20080222054904] [Allowing input-presentation to be used in views other than form view coffeemug@gmail.com**20080218191350] [Adding support for ajaxless forms and form encoding type coffeemug@gmail.com**20080217201843] [Removing obsolete exports from datagrid coffeemug@gmail.com**20080217183734] [Adding support for widget-parent, making answer recursive, replacing do-place with do-widget coffeemug@gmail.com**20080216201818] [Allowing customizing data-view title coffeemug@gmail.com**20080213221243] [Adding css tyles to 'modify' and 'close' dataform links coffeemug@gmail.com**20080210064923] [Fixing outdated documentation on public paths coffeemug@gmail.com**20080209204026] [Moving do-page documentation into comments coffeemug@gmail.com**20080206222209] [Removing unnecessary initform nil that causes issues on OpenMCL coffeemug@gmail.com**20080206221959] [Cleaning up weblocks-demo snapshot coffeemug@gmail.com**20080206215248] [Adding presentation types test files coffeemug@gmail.com**20080206215025] [Specifying widget to views in dataform coffeemug@gmail.com**20080206214730] [Adding missing gridedit file coffeemug@gmail.com**20080206214522] [Replacing renderers with UI DSL, Adding CLSQL backend coffeemug@gmail.com**20080206195814] [TAG pre 0.1 coffeemug@gmail.com**20080206195804] [Changing dependency to use a keyword in new app template coffeemug@gmail.com**20080124060610] [Fixing a cmucl path issue for datagrid coffeemug@gmail.com**20080105184819] [Fixing minor issues coffeemug@gmail.com**20071230042536] [Fixing typos in stores coffeemug@gmail.com**20071229172758] [Modifying stores to ensure next-id is always greater than id of all persistent objects (to avoid objects being overwritten) coffeemug@gmail.com**20071227073709] [Modifying object-id to gracefully handle unbound id slot coffeemug@gmail.com**20071227060945] [Modifying scripts to support backend store coffeemug@gmail.com**20071227035551] [Fixing store unit tests to account for order issues without order-by coffeemug@gmail.com**20071226204340] [Adding backend store API, modifying Weblocks to use it, and providing drivers to memory and cl-prevalence stores coffeemug@gmail.com**20071226202925] [Adding support for text type coffeemug@gmail.com**20071214200829] [Adding a password type and rendering support coffeemug@gmail.com**20071212205654] [Testing, documenting and creating a new Weblocks app is now handled through asdf operations. coffeemug@gmail.com**20071212072253] [Updating client script to catch json evaluation errors (so one error doesn't prevent other functions from evaluating) coffeemug@gmail.com**20071211063629] [Fixing an issue that prevented widgets with symbol names containing dashes from updating properly on AJAX coffeemug@gmail.com**20071207184629] [Restructuring code to support CMUCL coffeemug@gmail.com**20071207060820] [Adding support for modal interaction coffeemug@gmail.com**20071119081320] [Changing location of 'root-composite' so it's accessible to everyone coffeemug@gmail.com**20071109204556] [Modifying dependencies to use symbols instead of strings coffeemug@gmail.com**20071107223222] [Adding support for CPS workflow coffeemug@gmail.com**20071107204205] [Redirecting client on non-ajax requests to hide ugly URLs coffeemug@gmail.com**20071107011732] [Adding accessor for root composite coffeemug@gmail.com**20071107011448] [Fixing a unit test due to changing css coffeemug@gmail.com**20071030052008] [Fixing search issues coffeemug@gmail.com**20071024173233] [Fixing input sizing issues on IE6 coffeemug@gmail.com**20071024165921] [Moving flash styling from gridedit to datagrid coffeemug@gmail.com**20071024163243] [Fixing mining bar and item ops related issues (IE6 rendering problems, displaying total items, showing delete when selection is off) coffeemug@gmail.com**20071024052936] [Updating default pagination items per page to 15 coffeemug@gmail.com**20071023211437] [Integrating pagination widget with datagrid/gridedit coffeemug@gmail.com**20071023205324] [Adding pagination widget coffeemug@gmail.com**20071022193124] [Updating flash widget to set visible style before rendering coffeemug@gmail.com**20071022063404] [Modifying with-request macro to be more useful coffeemug@gmail.com**20071022063325] [Adding start/stop functions to generated apps coffeemug@gmail.com**20071022033820] [Giving make-application a nicer interface coffeemug@gmail.com**20071022033747] [Adding another test case for forms and functions for actions coffeemug@gmail.com**20071015022836] [Unifying support for passing functions to render-link and with-html-form coffeemug@gmail.com**20071014190033] [Adding ability to specify class and id in 'render-link' coffeemug@gmail.com**20071014182125] [Enhancing render-link to accept functions directly coffeemug@gmail.com**20071013214607] [Adding support for keyboard navigation of data tables coffeemug@gmail.com**20071010041226] [Integrating gridedit drilldown and menu styling coffeemug@gmail.com**20071009040020] [Adding IE 6/7 hasLayout fix to navigation coffeemug@gmail.com**20071008212010] [Improving menu styling (no need for IE JS fix) coffeemug@gmail.com**20071008210057] [Flashing a message in gridedit when item is modified coffeemug@gmail.com**20071008193945] [Adding more comprehensive tests for rendering foreign values coffeemug@gmail.com**20071008190421] [Safari seems to ignore dynamically generated noscript, fix with a server check coffeemug@gmail.com**20071006222517] [Fixing drilldown css classname coffeemug@gmail.com**20071006222231] [Implementing drilldown coffeemug@gmail.com**20071006215730] [defwidget now uses widget as a default superclass coffeemug@gmail.com**20071002011640] [Fixing default port in start-weblocks coffeemug@gmail.com**20071001152356] [Improving start-weblocks documentation coffeemug@gmail.com**20071001150310] [Modifying start-weblocks to pass on arguments to start-server coffeemug@gmail.com**20071001145948] [Fixing an issue with not passing keys in data renderer coffeemug@gmail.com**20070928045226] [Improving render-dropdown to work for multiple types (used to break foreign value functionality) coffeemug@gmail.com**20070928035939] [Adding better support for sorting booleans coffeemug@gmail.com**20070927211253] [Modifying select message to 'none' for foreign keys when something is already selected coffeemug@gmail.com**20070927202818] [Adding more typespec inspection rules coffeemug@gmail.com**20070926214731] [Implementing foreign objects in forms (fixes #37) coffeemug@gmail.com**20070926212836] [Moving renderer recursion over to object-visible-slots coffeemug@gmail.com**20070924212227] [Converting rendered infrastructure to use visible-slot structure instead of cons pairs coffeemug@gmail.com**20070924013616] [Fixing a bug with international chars in links coffeemug@gmail.com**20070920183756] [Fixing documentation coffeemug@gmail.com**20070919204558] [Adding a discriminating-function lock on ACL to prevent race conditions coffeemug@gmail.com**20070918160505] [Fixing an issue with default radio-button selection coffeemug@gmail.com**20070918151806] [Updating invalid-input-error-message to be a slot management function coffeemug@gmail.com**20070918144743] [Adding assertion that *full-slot-type* is present for slot management functions coffeemug@gmail.com**20070918144526] [Adding unit tests for MCL compute-discriminating-function support coffeemug@gmail.com**20070918142413] [Adding support for MCL by hacking compute-discriminating-function coffeemug@gmail.com**20070918140900] [Setting recursion limit of parsers to a more reasonable value (50) coffeemug@gmail.com**20070917224208] [Modigyind us-state case not to depend on *gensym-counter* (caused an issue on CMUCL) coffeemug@gmail.com**20070917154629] [Removing unnecessary compute-applicable-methods-using-classes specialization coffeemug@gmail.com**20070917145037] [Fixing incorrect specializer (wasn't a problem anywhere but CMUCL, which has advanced type inference [was this removed from SBCL?]) coffeemug@gmail.com**20070917135612] [Adding typep and subtypep to shadowed symbols as part of CMUCL port coffeemug@gmail.com**20070917034357] [Modifying compute-discriminating-function for slot-management functions to work on CMUCL coffeemug@gmail.com**20070917032021] [Fixing more ACL issues coffeemug@gmail.com**20070915204957] [More ACL fixes coffeemug@gmail.com**20070915071938] [Adding do-pending as an alias for continue-testing coffeemug@gmail.com**20070915071635] [Fixing ACL discriminating functions bug coffeemug@gmail.com**20070914233027] [Fixing ACL test cases that failed because of lowercase hex output coffeemug@gmail.com**20070914222649] [Fixing formatting coffeemug@gmail.com**20070914053105] [Using normalized-type-of to get predictable behavior accross implementations coffeemug@gmail.com**20070914001803] [Fixing unit tests (and outstanding issues) for LispWorkds coffeemug@gmail.com**20070913231915] [Updating tests to work with latest cl-who coffeemug@gmail.com**20070913202859] [Fixing #26. Validation summary is no longer hidden for long forms. coffeemug@gmail.com**20070913194651] [Fixing documentation for render-slot-inline-p coffeemug@gmail.com**20070913170641] [Cannot use name rt in LispWorks, changing to rtest coffeemug@gmail.com**20070913170449] [Adding a space to the end of each radio button label to improve readability in text only browsers coffeemug@gmail.com**20070913043924] [Indefine article for words that start with 'u' is 'a' coffeemug@gmail.com**20070913035432] [Fixing order of error summary coffeemug@gmail.com**20070913033719] [Fixing ticket #27 milan.cermak@gmail.com**20070912220137] [Modifying type-prototype find-class calls to not throw errors if classes are missing coffeemug@gmail.com**20070912235509] [Explicitly converting pathnames to URIs to avoid backslashes on win32 (and potential issues on other platforms). Fixes #63. coffeemug@gmail.com**20070912225148] [Fixing typespec inheritance issues, adding member type coffeemug@gmail.com**20070912204120] [Exporting more of rt's functions coffeemug@gmail.com**20070912070240] [Turning off JSON sanitation on Safari due to Safari's regex matcher bug coffeemug@gmail.com**20070911065139] [Fixing an issue with 'member' in typespec humanization coffeemug@gmail.com**20070908052137] [Fixing an issue with outputting error messages (we shouldn't use a custom metaclass) coffeemug@gmail.com**20070908050639] [Fixing docs typo coffeemug@gmail.com**20070908043650] [Allowing specialization on slot-types (fixes #36) coffeemug@gmail.com**20070908001641] [Removing algebraic types (they deserve their own lib) coffeemug@gmail.com**20070906042350] [Defining algebraic types, pattern matching, lists and maybe coffeemug@gmail.com**20070827191654] [Adding support for rendering symbols and keywords coffeemug@gmail.com**20070822192922] [Refactoring printing of objects in renderers into a separate method coffeemug@gmail.com**20070822171115] [Adding more comparators coffeemug@gmail.com**20070822164857] [Fixing documentation typo coffeemug@gmail.com**20070822164810] [Fixing parse error signalling on OpenMCL coffeemug@gmail.com**20070821165252] [Adding us-state datatype, properly specializing form for it, modifying suggest, adding dropdown snippet coffeemug@gmail.com**20070821064203] [Adding unit tests for boolean type customizations coffeemug@gmail.com**20070819075551] [Unit testing new isearch behavior coffeemug@gmail.com**20070819071206] [Adding maxlength attribute to fields coffeemug@gmail.com**20070819070325] [Extracting common html into utilities, improving object-satisfies-search-p (it can now be specialized to support custom types) coffeemug@gmail.com**20070818192241] [Fixing unicode related issues coffeemug@gmail.com**20070817063946] [Additional unit tests for new (slot-type in renderers) functionality coffeemug@gmail.com**20070816062748] [Modifying renderers to support slot-type argument coffeemug@gmail.com**20070815203943] [Cleaning up shadowing-import-from c2mop list and adding defmethod to it coffeemug@gmail.com**20070815035036] [Adding supported for max input length (default 40 chars) coffeemug@gmail.com**20070814173028] [Modifying validators to fully depend on slot typespecs coffeemug@gmail.com**20070814030921] [Fixing unit tests, adding ability to find a parser precidence list from typespec coffeemug@gmail.com**20070810050837] [Making 'typespec-to-error' public coffeemug@gmail.com**20070810023052] [Adding a linguistic module to convert typespecs to english messages coffeemug@gmail.com**20070810022616] [Adding documentation to linguistic module coffeemug@gmail.com**20070808043030] [Ensure make-application treats target NIL as default directory coffeemug@gmail.com**20070807185007] [Improving template application code coffeemug@gmail.com**20070807183604] [Adding a script to generate new weblocks applications (fixes #17) coffeemug@gmail.com**20070807181855] [Improving scripts to load dependencies lazily and to dynamically find paths coffeemug@gmail.com**20070807025721] [Fixing gridedit issues (fixes #55) coffeemug@gmail.com**20070807002146] [Fixing extra tags to use a comment instead of   (fixes #19) coffeemug@gmail.com**20070806213528] [Fixing action paths so they work in W3M (fixes #15) coffeemug@gmail.com**20070806190511] [Fixing form snippet to work with JS turned off coffeemug@gmail.com**20070806164056] ['render-widget-body' generic function should allow other keys (fixing OpenMCL failed test) coffeemug@gmail.com**20070806073817] [Adding request-hooks dependency to widgets coffeemug@gmail.com**20070806073758] [Adding md5 to a list of dependencies coffeemug@gmail.com**20070806070405] [Modifying actions not to use gensym to avoid attacks (fixes #45) coffeemug@gmail.com**20070806052534] [Moving render-link to snippets coffeemug@gmail.com**20070806050538] [Renaming blocks to snippets (fixes #24) coffeemug@gmail.com**20070806043322] [Fixing unmatches parens coffeemug@gmail.com**20070806042724] [Refactoring form markup into snippets (fixes #29) coffeemug@gmail.com**20070806041135] [Make sure public files directory is computed from the canonical path of the '.asd' file mail@chaitanyagutpa.com**20070803203351] [Adding missing stylesheet to the repository coffeemug@gmail.com**20070803202732] [Fixing XSS volnurability in render-data with :highlight coffeemug@gmail.com**20070803182625] [Fixing unit tests coffeemug@gmail.com**20070803155707] [Removing description from default application. When user creates a new one without the description, "Placeholder Application" title is left over. We want to avoid this. coffeemug@gmail.com**20070803051334] [Changing the navigation control so that default pane link is rendered as slash (to improve the illusion of documents) coffeemug@gmail.com**20070803045928] [More refactoring code locations coffeemug@gmail.com**20070803044631] [Refactoring code (mainly changing locations, adding new files) coffeemug@gmail.com**20070803044041] [Adding support for dynamic page titles (fixes #16) coffeemug@gmail.com**20070803031436] [null is a valid type for 'data' slot of datagrid mail@chaitanyagutpa.com**20070802120838] [Modified documentation and added tests for 'data' slot for datagrid. mail@chaitanyagutpa.com**20070731070602] [symbol as valid type for datagrid-data mail@chaitanyagutpa.com**20070717070424] [Finalizing making stylesheets and scripts loading dynamic. Fixes ticket #12. coffeemug@gmail.com**20070802180030] [More changes related to dynamic stylesheets. Setting up application wide dependencies. Only left to deal with scripts and debug-mode.css coffeemug@gmail.com**20070802054040] [Initial modifications to support dynamic stylesheet and javascript dependencies. coffeemug@gmail.com**20070802032054] [Fixing an HTML validation error in datagrid filter coffeemug@gmail.com**20070801052511] [Modifying 'test-weblocks' to clean up the application environment before tests (and rollback after) coffeemug@gmail.com**20070731174405] [No need to abbreviate in 'default-app' coffeemug@gmail.com**20070731032921] [Adding a default application to weblocks (in case user doesn't create their own) with basic hints on how to proceed. Fixes #18. coffeemug@gmail.com**20070731023829] [Making directory of public files dynamic and flexible (fixes #11) coffeemug@gmail.com**20070730193424] [Removing todo list and wishlist - these are now stored in Trac coffeemug@gmail.com**20070730180843] [Updating wishlist with asdf op wishes coffeemug@gmail.com**20070729000731] [Fixing and unit testing flash, updating todo list coffeemug@gmail.com**20070728234235] [Finishing up the manual coffeemug@gmail.com**20070728184401] [Adding user manual document coffeemug@gmail.com**20070728032202] [Adding license information (LLGPL) coffeemug@gmail.com**20070727034327] [Adding ability to select port on weblocks startup coffeemug@gmail.com**20070703155331] [Making JavaScript more robust (if updating one widget fails, others are still updated) coffeemug@gmail.com**20070703155245] [Configuring ppcre to not use a lot of RAM coffeemug@gmail.com**20070702210930] [Fixing up unit tests coffeemug@gmail.com**20070702210130] [Fixing issues with refresh-request-p and related flash issues, adding initial-request-p coffeemug@gmail.com**20070702210017] [Preparing framework for initial release coffeemug@gmail.com**20070702183105] [Updating todo lists coffeemug@gmail.com**20070702065230] [Marking required fields in forms coffeemug@gmail.com**20070702065020] [Fixing styling error (error heading not hidden) coffeemug@gmail.com**20070702043813] [Adding basic user notification of AJAX failure coffeemug@gmail.com**20070702041854] [Fixing unit tests broken during porting to IE coffeemug@gmail.com**20070702030248] [Making sorting more robust for nil values coffeemug@gmail.com**20070702022905] [Finalizing port to IE (layout and other minor issues) coffeemug@gmail.com**20070702022144] [Adding IE 6 progress bar fix coffeemug@gmail.com**20070702001858] [IE specific flash and suggest fixes coffeemug@gmail.com**20070701235739] [Modifying flash styling to work around scriptaculous Safari disappearance bug coffeemug@gmail.com**20070701231709] [Fixing gridedit flash styling coffeemug@gmail.com**20070701230619] [Fixing Flash widget to work in IE 6 and 7 coffeemug@gmail.com**20070701173122] [Making IE specific hasLayout fix common to all renderers coffeemug@gmail.com**20070701073121] [Making navigation hovering work in IE and simplifying arrow (removing styling and adding transparency) coffeemug@gmail.com**20070701064934] [Fixing IE 6 isearch styling coffeemug@gmail.com**20070701064207] [Navigation related IE fixes coffeemug@gmail.com**20070701063834] [Faking position:fixed for debug toolbar in IE 6 coffeemug@gmail.com**20070630065331] [Fixing isearch not working in IE coffeemug@gmail.com**20070630054622] [Fixing IE 6 hover issue on AJAX coffeemug@gmail.com**20070630042220] [Fixing an issue with incorrectly styling forms in the datagrid coffeemug@gmail.com**20070630040444] [Fixing sort arrows styling in IE (converting png transparency to indexed, which is supported) coffeemug@gmail.com**20070630035519] [Adding IE 6 specific datagrid layout fixes coffeemug@gmail.com**20070630031951] [Making hover behavior specific to IE 6 and below coffeemug@gmail.com**20070630013209] [Adding missing table borders image coffeemug@gmail.com**20070630012041] [Fixing the table hover issue in IE using behaviors coffeemug@gmail.com**20070630010027] [Fixing all cross-browser table issues except IE specific expressions to support table row hover coffeemug@gmail.com**20070630001410] [Fixing all IE6 issues with tables except border-spacing coffeemug@gmail.com**20070629053721] [Making initial changes to port CSS to IE 6 coffeemug@gmail.com**20070629034554] [Adding documentation related to IE stylesheet bugs coffeemug@gmail.com**20070629033940] [Updating todo list coffeemug@gmail.com**20070629033911] [Making initial changes to the paging widget coffeemug@gmail.com**20070629033741] [Flashing 'item added' message upon addition coffeemug@gmail.com**20070626185056] [Removing delete button when there are no items left to delete coffeemug@gmail.com**20070626171423] [Improving styling of flash, fixing unit tests coffeemug@gmail.com**20070626063945] [Refactoring hooks, fixing flash widget bugs, modifying gridedit to use flash on deletion coffeemug@gmail.com**20070625054443] [Adding helper functions coffeemug@gmail.com**20070622224546] [Renaming make-dirty to mark-dirty coffeemug@gmail.com**20070622224350] [Updating todo list coffeemug@gmail.com**20070622224329] [Finished unit testing and refactoring datagrid coffeemug@gmail.com**20070621044156] [Finishing unit testing gridedit coffeemug@gmail.com**20070620034441] [Unit testing 'add item' gridedit functionality coffeemug@gmail.com**20070619232306] [Intermediate checkin - fixed most unit tests (more work to be done), documented gridedit, resolved the issues related to getting slot values from unbound slots in newly instantiated objects coffeemug@gmail.com**20070619225312] [Fixing some issues related to selection coffeemug@gmail.com**20070619183555] [Updating todo list coffeemug@gmail.com**20070619183524] [Untested, undocumented datagrid and gridedit controls that allow item selection, addition, and deletion coffeemug@gmail.com**20070619043314] [Adding object-id related functionality coffeemug@gmail.com**20070616044751] [Making form styling more conservative coffeemug@gmail.com**20070615191354] [Turning off isearch where there are less than two entries coffeemug@gmail.com**20070615062442] [No longer try to figure out if there are applicable functions for datagrid sorting coffeemug@gmail.com**20070615060450] [Fixing unit tests broken by datagrid refactoring coffeemug@gmail.com**20070615055425] [Refactoring to allow for full updates to datagrid coffeemug@gmail.com**20070615023200] [Fixing styling considering the widget-body removal coffeemug@gmail.com**20070614172119] [Improving styling of searchbart coffeemug@gmail.com**20070613230935] [Fixing searchbar unit test coffeemug@gmail.com**20070613224916] [Modifying the way items are added in gridedit coffeemug@gmail.com**20070613202513] [Refactoring gridedit to take advantage of data-class coffeemug@gmail.com**20070613193424] [Refactoring sorting to take advantage of data-class coffeemug@gmail.com**20070613192336] [Adding linguistics module and converting for type parsing and searchbar to use it coffeemug@gmail.com**20070613175017] [Allowing symbols to act as widgets, adding a message that shows how many datagrid items a search has hidden coffeemug@gmail.com**20070613061131] [Stabilizing grid edit, outputting class names for all derived widgets coffeemug@gmail.com**20070613011749] [Rethinking custom slots support in visible-object-slots to support new functionality in gridedit coffeemug@gmail.com**20070612230625] [Adding gridedit control (currently with ability to add items to collection) coffeemug@gmail.com**20070612015814] [Finilazing datagrid searching unit testing (and fixing sorting issues related to non-inline objects) coffeemug@gmail.com**20070608190741] [Fixing unit tests broken by datagrid isearch changes coffeemug@gmail.com**20070607193006] [Finalizing isearch styling coffeemug@gmail.com**20070607064738] [Styling incremental search bar in datagrids coffeemug@gmail.com**20070607001356] [First steps towards datagrid isearch coffeemug@gmail.com**20070606175634] [Making changes to table styling (breaking up stylesheets, highlighting hovering row) coffeemug@gmail.com**20070605051708] [Finishing isearch control and updating relevant code coffeemug@gmail.com**20070605050507] [Fixing the issue when two 'action' parameters were sent on an AJAX form request coffeemug@gmail.com**20070605032323] [Bookmarking attempt to customize postal state rendering coffeemug@gmail.com**20070604210521] [First steps towards isearch block coffeemug@gmail.com**20070604210448] [Reprioritizing todo list coffeemug@gmail.com**20070604210356] [Allow setting current value for suggest block coffeemug@gmail.com**20070604172022] [Make sure we first try to get action from request, then if it fails from all methods coffeemug@gmail.com**20070604164701] [First step towards suggest block in State slot coffeemug@gmail.com**20070604043152] [Fixing unit tests coffeemug@gmail.com**20070604042720] [Adding intersperse function to utilities coffeemug@gmail.com**20070604042117] [Fixing json issue on openmcl coffeemug@gmail.com**20070604041953] [Updating todo list coffeemug@gmail.com**20070604041720] [Adding a fix for Opera 8 bug to scripts coffeemug@gmail.com**20070602070526] [Fixing a unit test to avoid garbage output coffeemug@gmail.com**20070602070107] [Adding a google-suggest like block coffeemug@gmail.com**20070602065650] [Adding support for 'pure' actions coffeemug@gmail.com**20070602063634] [Improving local suggest, refactoring it into blocks concept coffeemug@gmail.com**20070601210246] [Fixing unit tests for table styling fixes coffeemug@gmail.com**20070601210049] [Passing http parameters to actions via keywords to simplify access coffeemug@gmail.com**20070601204754] [Reformatting make-dirty coffeemug@gmail.com**20070601042630] [First steps towards "suggest" control coffeemug@gmail.com**20070601042504] [Fixing opera 8 related form top margin issue coffeemug@gmail.com**20070531202622] [Reformatting make-dirty code coffeemug@gmail.com**20070531201922] [Adding opera 8 related table sorting styling fix coffeemug@gmail.com**20070531201807] [Improving handle-client-request documentation coffeemug@gmail.com**20070531185857] [Making a fix relating to flash control and determining whether a request is a refresh. Additionally ensuring request handler doesn't take up requests with mime types that may have slipped through apache and hunchentoot dispatch table coffeemug@gmail.com**20070531185028] [Introducing safari fixes coffeemug@gmail.com**20070531171528] [Adding defwidget macro to avoid specifying metaclass coffeemug@gmail.com**20070531020206] [Fixing dirty widgets unit test coffeemug@gmail.com**20070530225854] [Adding support for multiple messages in a single flash widget coffeemug@gmail.com**20070530225738] [Updating todo list coffeemug@gmail.com**20070530220756] [Sending widget names in proper case on AJAX calls coffeemug@gmail.com**20070530220610] [Opera 8 underlining links with block style coffeemug@gmail.com**20070530220446] [Fixing OpenMCL issue with specializing slot-value-using-class coffeemug@gmail.com**20070530215326] [Forgot to add flash.lisp coffeemug@gmail.com**20070530115230] [Updating todo list coffeemug@gmail.com**20070530045351] [Fixing a styling issue with flash widget coffeemug@gmail.com**20070530045321] [Unit testing flash widget coffeemug@gmail.com**20070530031710] [Finishing flash control and related changes coffeemug@gmail.com**20070530023149] [Adding ability to hook into request coffeemug@gmail.com**20070529124401] [Adding icon to flash control styling coffeemug@gmail.com**20070529122309] [Adding flash file to unit test framework coffeemug@gmail.com**20070529062551] [First steps towards a flash control coffeemug@gmail.com**20070529062423] [Moving images for navigation widget coffeemug@gmail.com**20070529044127] [Fixing the script issue with w3m coffeemug@gmail.com**20070529031143] [Fixing encoding descreptancy coffeemug@gmail.com**20070529031059] [Unit testing multiple components udpates coffeemug@gmail.com**20070529021739] [First step towards propagating dirty state coffeemug@gmail.com**20070528182203] [Updating todo list coffeemug@gmail.com**20070528002823] [Finishing unit testing ajax functionality coffeemug@gmail.com**20070526234335] [Unit testing AJAX functionality coffeemug@gmail.com**20070526215333] [Fixing unit tests broken with introduction of AJAX functionality coffeemug@gmail.com**20070526190322] [Fixing outstanding issues related to cookie management coffeemug@gmail.com**20070525185837] [Adding support for AJAX on clients that don't accept cookies coffeemug@gmail.com**20070525050928] [Adding AJAX progress indicator coffeemug@gmail.com**20070524205716] [Making forms submit via AJAX coffeemug@gmail.com**20070524195443] [First steps towards AJAX coffeemug@gmail.com**20070524050452] [Modifying framework to allow custom slots in :slots argument coffeemug@gmail.com**20070523170853] [Unit testing datagrid resorts coffeemug@gmail.com**20070523011117] [Resorting datagrid data on every render to ensure modified objects are shown in appropriate order coffeemug@gmail.com**20070523010424] [Reorganizing todo list coffeemug@gmail.com**20070523002945] [Removing starting points from weblocks documentation (for now) coffeemug@gmail.com**20070523002859] [Adding ability to provide widget arguments in the base 'widget' class coffeemug@gmail.com**20070522222302] [Unit testing datagrid coffeemug@gmail.com**20070522212137] [Refactoring and documenting datagrid coffeemug@gmail.com**20070521183212] [Ensure data as function works properly and is efficient coffeemug@gmail.com**20070521174258] [Changes to the project path coffeemug@gmail.com**20070521165342] [Fixing unit tests broken with slot-path functionality coffeemug@gmail.com**20070521165313] [Fixing datagrid sorting of objects rendered inline coffeemug@gmail.com**20070521055256] [Fixing unit tests to support attributized slot names in the markup coffeemug@gmail.com**20070521050400] [Adding slot names to markup for more intricate styling coffeemug@gmail.com**20070521044028] [Adding a warning to unit tests that suggests to run the tests on a clean image coffeemug@gmail.com**20070520052755] [Making sure page refreshes are idempotent with respect to datagrid sorts coffeemug@gmail.com**20070520051515] [Updating to-do list coffeemug@gmail.com**20070518174153] [Modifying todo list priorities coffeemug@gmail.com**20070518164206] [Ensuring sorting is disabled for slots that don't have applicable sorting functions coffeemug@gmail.com**20070518164107] [Updating todo list coffeemug@gmail.com**20070518155217] [Making sure the first available column is sorted coffeemug@gmail.com**20070518155121] [Improving sorting (allowing/disallowing, allowing only certain columns, etc.) coffeemug@gmail.com**20070516180911] [Styling column based on sort order and making the information accessible coffeemug@gmail.com**20070516144621] [Portability enhancements related to c2mop shadowing coffeemug@gmail.com**20070516130002] [Portability enhancements related to case sensitive readers coffeemug@gmail.com**20070516125837] [Making first steps towards datagrid widget (basic sorting) coffeemug@gmail.com**20070514015315] [Fixing up unit tests coffeemug@gmail.com**20070510051223] [Changing behavior to render control names into 'id' attribute, not 'class' coffeemug@gmail.com**20070509195829] [Adding header/footer, etc., finishing layout coffeemug@gmail.com**20070509193947] [More work on styling coffeemug@gmail.com**20070508185604] [More work towards styling coffeemug@gmail.com**20070508054700] [Fixing edge cases in find-navigation-widget coffeemug@gmail.com**20070508053845] [First steps towards layout coffeemug@gmail.com**20070508052813] [Updating stylesheets for form error messages coffeemug@gmail.com**20070508052739] [Refactoring and styling menu blue coffeemug@gmail.com**20070508043342] [Unit testing friendly URLs coffeemug@gmail.com**20070507201830] [Improving friendly URLs by resetting widgets whose path isn't specified (gives an illusion of resources) coffeemug@gmail.com**20070507183025] [Implementing hierarchical friendly URLs coffeemug@gmail.com**20070507061853] [Added a function to tokenize URIs coffeemug@gmail.com**20070505191433] [Refactoring, unit testing, and documenting the navigation widget. Modifying unit testing to work properly with multiple widgets. coffeemug@gmail.com**20070504222545] [Visually selecting current item in navigation coffeemug@gmail.com**20070503182348] [Updating todo list coffeemug@gmail.com**20070503045555] [Displaying the name of the navigation widget coffeemug@gmail.com**20070503044822] [Restructuring to-do list coffeemug@gmail.com**20070503044738] [Adding alternative text to debug bar coffeemug@gmail.com**20070503041943] [Moving the todo list to a proper file coffeemug@gmail.com**20070503022433] [Making sure widgets are wrapped in divs and unit testing coffeemug@gmail.com**20070502210426] [Refactoring request handler tests coffeemug@gmail.com**20070502020138] [First steps towards navigation widget coffeemug@gmail.com**20070502015722] [Properly styling a menu with no items coffeemug@gmail.com**20070502015649] [Adding debug toolbar coffeemug@gmail.com**20070502015418] [Updating todo list coffeemug@gmail.com**20070502015130] [Fixing unit tests coffeemug@gmail.com**20070430154933] [Reorganizing todo list coffeemug@gmail.com**20070430052202] [Making a function a 'widget', improving table renderer coffeemug@gmail.com**20070430040901] [Porting to OpenMCL coffeemug@gmail.com**20070430020048] [Shortcut to make weblocks-demo work on ppc coffeemug@gmail.com**20070430002251] [Redoing validation to support different slots with the same name coffeemug@gmail.com**20070429221304] [Improving form deserializer to work in more situations coffeemug@gmail.com**20070429202932] [Unit testing updates of inner slots coffeemug@gmail.com**20070429181255] [Made sure missing values aren't rendered as NIL coffeemug@gmail.com**20070429175900] [Updating documentation coffeemug@gmail.com**20070429175819] [Updating todo list coffeemug@gmail.com**20070427211422] [Updating object-request-mapper to deal with inner slot objects coffeemug@gmail.com**20070427211330] [Make sure slots that don't have readers but are specified are validated and updated upon for submission coffeemug@gmail.com**20070426202200] [Updating todo list coffeemug@gmail.com**20070426192245] [Adding unit tests for the form validation framework coffeemug@gmail.com**20070426190859] [Fixing handle-client-request unit test coffeemug@gmail.com**20070426150635] [Updating todo list coffeemug@gmail.com**20070425223323] [Refactoring validations and adding documentation coffeemug@gmail.com**20070425223119] [Refactoring unit tests coffeemug@gmail.com**20070425200925] [More refactoring coffeemug@gmail.com**20070425182106] [Refactoring code coffeemug@gmail.com**20070425180635] [Making form validation more accessible coffeemug@gmail.com**20070425165204] [Making data controls have spaces between them coffeemug@gmail.com**20070425020526] [Updating todo list coffeemug@gmail.com**20070425020456] [Implementing form validation coffeemug@gmail.com**20070425012710] [Implementing parsing, first step to validation coffeemug@gmail.com**20070423210308] [Documenting and unit testing request handler coffeemug@gmail.com**20070420202636] [Adding unit tests for page-template and request handler coffeemug@gmail.com**20070420194048] [Fixing asd file for unit tests coffeemug@gmail.com**20070419030616] [Adding unit tests for input scanner, server, and composite coffeemug@gmail.com**20070418221418] [Fixing asd file coffeemug@gmail.com**20070418160840] [Refactoring weblocks-output-stream to be a thread local special variable coffeemug@gmail.com**20070418160752] [Refactoring server into a separate demo application, adding page-template to handle stylesheets coffeemug@gmail.com**20070418152120] [Refactoring render to a separate file coffeemug@gmail.com**20070418025716] [Initiating refactoring to move to fully widget based rendering coffeemug@gmail.com**20070418025446] [More refactoring and adding unit tests for dataform widget coffeemug@gmail.com**20070417173603] [Changing unit tests with-request macro to properly handle make-action coffeemug@gmail.com**20070416220628] [Adding documentation for dataform widget, more unit tests, etc. coffeemug@gmail.com**20070416204108] [Adding unit tests for actions coffeemug@gmail.com**20070416171425] [Finishing unit tests for actions; fixing/enhancing tests for renderers coffeemug@gmail.com**20070416171333] [Refactoring and starting to write unit tests for actions coffeemug@gmail.com**20070416023947] [First steps towards an input scanner and dataform object update behavior coffeemug@gmail.com**20070414052336] [Ensuring both get and post requests work, and errors are signaled on improper actions coffeemug@gmail.com**20070413215319] [Making first steps towards actions and a dataform widget coffeemug@gmail.com**20070413035152] [Changing to-do priorities coffeemug@gmail.com**20070408073057] [Deferring the question about renderers' return values until later coffeemug@gmail.com**20070408063923] [Updating docs to reflect form and table renderers coffeemug@gmail.com**20070408063226] [Adding table renderer unit tests coffeemug@gmail.com**20070408062802] [Adding form renderer file to unit tests coffeemug@gmail.com**20070407062348] [Adding form-renderer to unit tests coffeemug@gmail.com**20070407062313] [Completing unit tests for utils and form-renderer coffeemug@gmail.com**20070407062225] [Reorganizing and adding documentation to data-form and data-table renderers. coffeemug@gmail.com**20070406213336] [Finilizing renderers refactoring coffeemug@gmail.com**20070406061004] [Refactoring renderers coffeemug@gmail.com**20070406040020] [Improving captions stylesheets coffeemug@gmail.com**20070405002023] [Improving captions coffeemug@gmail.com**20070405001748] [Finilizing support for table captions coffeemug@gmail.com**20070404235149] [Advancing table rendering coffeemug@gmail.com**20070404032555] [Styling table renderer coffeemug@gmail.com**20070403035255] [Adding support for inline rendering to table headers coffeemug@gmail.com**20070401221625] [Adding more todo items coffeemug@gmail.com**20070316031011] [Adding table renderer coffeemug@gmail.com**20070316024436] [Adding to-do items to docs coffeemug@gmail.com**20070316024319] [Updating docs and minnor code snippets coffeemug@gmail.com**20070316023825] [Fixing form labels in generic form renderer coffeemug@gmail.com**20070315235513] [Cleaning up html/css coffeemug@gmail.com**20070315041234] [Updating docs coffeemug@gmail.com**20070315041158] [Fixing up unit tests coffeemug@gmail.com**20070315030337] [Moving data-renderer tests coffeemug@gmail.com**20070315014849] [Updating docs coffeemug@gmail.com**20070314034421] [Added better styling to forms coffeemug@gmail.com**20070314033816] [Adding font styling and fixing nbsp in code coffeemug@gmail.com**20070314025906] [Unifying css where possible between form and data renderers coffeemug@gmail.com**20070314023852] [Improving stylesheets and html rendering coffeemug@gmail.com**20070314005908] [Morde to-do stuff coffeemug@gmail.com**20070313024938] [Adding todo coffeemug@gmail.com**20070313023220] [Adding form renderer coffeemug@gmail.com**20070313022458] [Improving the stylesheet coffeemug@gmail.com**20070311223528] [Moving the test for render-extra-tags coffeemug@gmail.com**20070310235751] [Moving render-extra-tags to a utility file coffeemug@gmail.com**20070310194805] [Fixing render-data documentation coffeemug@gmail.com**20070310194550] [Documenting and testing render-data-slot coffeemug@gmail.com**20070310194311] [testing and documenting with-data-headers coffeemug@gmail.com**20070310075128] [Separating test data structures into a separate module coffeemug@gmail.com**20070310070407] [Testing and documenting render-data function, adding macro for html tests coffeemug@gmail.com**20070310070305] [Simplifying data renderer and fully converting it to cl-who coffeemug@gmail.com**20070309034423] [Convert existing code to use cl-who library coffeemug@gmail.com**20070308050140] [Adding a documentation string to weblocks package coffeemug@gmail.com**20070308034541] [finished unit tests and documentation for renderer utilities coffeemug@gmail.com**20070308033154] [Unit testing and documenting object-visible-slots method as well as simplifying keyword arguments passing mechanism coffeemug@gmail.com**20070307040240] [Adding initial unit tests and documentation to renderer utilities coffeemug@gmail.com**20070306043620] [Fixing up documentation support coffeemug@gmail.com**20070306022635] [Breaking out scripts into a separate system coffeemug@gmail.com**20070306014546] [Removing unnecessary dependencies coffeemug@gmail.com**20070306013741] [Reorganizing the structure to better support testing coffeemug@gmail.com**20070306013420] [Adding missing images coffeemug@gmail.com**20070305052003] [Made sure config flags are passed to inner objects rendered through slots. coffeemug@gmail.com**20070302045424] [Make sure css file works in IE coffeemug@gmail.com**20070302040231] [Made sure slots without readers are rendered if their names are passed in slot-names. coffeemug@gmail.com**20070301033103] [A simple script for documenting weblocks coffeemug@gmail.com**20070301025413] [Adding initial support for tinaa (documentation) coffeemug@gmail.com**20070301025351] [Making final style adjustments to render-data coffeemug@gmail.com**20070301022709] [More stylistic changes coffeemug@gmail.com**20070228044621] [Progressing generic renderers (adding stylesheet, updating documentation, etc.) coffeemug@gmail.com**20070228024034] [Updating documentation with the roadmap coffeemug@gmail.com**20070226050559] [Adding full support for observe-order-p coffeemug@gmail.com**20070226050501] [Adding support for renaming and hiding fields coffeemug@gmail.com**20070225005325] [A sample page coffeemug@gmail.com**20070224214438] [Adding hunchentoot to allow for testing on the web coffeemug@gmail.com**20070224214344] [Adding better support for rendering complex slots coffeemug@gmail.com**20070224205729] [Outlining generic renderers behavior coffeemug@gmail.com**20070224015710] [Removing dependencies file, this can always be generated from weblocks.asd coffeemug@gmail.com**20070224015242] [Initial checkin coffeemug@gmail.com**20070224015106] Patch bundle hash: 116eb612108f1a3cb3d9db0006aca4ffe0a535b4