[claw-cvs] r51 - in trunk/main/dojo: . src src/js tests tests/docroot tests/docroot/css tests/docroot/img

achiumenti at common-lisp.net achiumenti at common-lisp.net
Sat Jun 14 06:00:53 UTC 2008


Author: achiumenti
Date: Sat Jun 14 02:00:26 2008
New Revision: 51

Added:
   trunk/main/dojo/
   trunk/main/dojo/README
   trunk/main/dojo/claw-dojo-tests.asd
   trunk/main/dojo/claw-dojo.asd
   trunk/main/dojo/src/
   trunk/main/dojo/src/dijit.lisp
   trunk/main/dojo/src/djbody.lisp
   trunk/main/dojo/src/djbutton.lisp
   trunk/main/dojo/src/djclaw.lisp
   trunk/main/dojo/src/djcolorpalette.lisp
   trunk/main/dojo/src/djcontainers.lisp
   trunk/main/dojo/src/djcontent-pane.lisp
   trunk/main/dojo/src/djdialog.lisp
   trunk/main/dojo/src/djform.lisp
   trunk/main/dojo/src/djlayout.lisp
   trunk/main/dojo/src/djlink.lisp
   trunk/main/dojo/src/djmenu.lisp
   trunk/main/dojo/src/djprogressbar.lisp
   trunk/main/dojo/src/djtitlepane.lisp
   trunk/main/dojo/src/djtoolbar.lisp
   trunk/main/dojo/src/djtooltip.lisp
   trunk/main/dojo/src/djtree.lisp
   trunk/main/dojo/src/djwidget.lisp
   trunk/main/dojo/src/js/
   trunk/main/dojo/src/misc.lisp
   trunk/main/dojo/src/packages.lisp
   trunk/main/dojo/tests/
   trunk/main/dojo/tests/ajax-test.lisp
   trunk/main/dojo/tests/common.lisp
   trunk/main/dojo/tests/djbutton-test.lisp
   trunk/main/dojo/tests/djcalendar-test.lisp
   trunk/main/dojo/tests/djcolorpalette-test.lisp
   trunk/main/dojo/tests/djdialog-test.lisp
   trunk/main/dojo/tests/djeditor-test.lisp
   trunk/main/dojo/tests/djmenu-test.lisp
   trunk/main/dojo/tests/djprogressbar-test.lisp
   trunk/main/dojo/tests/docroot/
   trunk/main/dojo/tests/docroot/css/
   trunk/main/dojo/tests/docroot/css/style.css
   trunk/main/dojo/tests/docroot/img/
   trunk/main/dojo/tests/docroot/img/roundedbg.gif   (contents, props changed)
   trunk/main/dojo/tests/docroot/img/roundedbg.png   (contents, props changed)
   trunk/main/dojo/tests/docroot/img/spinner.gif   (contents, props changed)
   trunk/main/dojo/tests/header-info-page.lisp
   trunk/main/dojo/tests/index.lisp
   trunk/main/dojo/tests/main.lisp
   trunk/main/dojo/tests/packages.lisp
   trunk/main/dojo/tests/realm.lisp
   trunk/main/dojo/tests/slider-test.lisp
Log:
claw dojo-integration, first commit

Added: trunk/main/dojo/README
==============================================================================
--- (empty file)
+++ trunk/main/dojo/README	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,6 @@
+to use claw-dojo library download dojo at 
+
+http://download.dojotoolkit.org/release-1.1.1/dojo-release-1.1.1.tar.gz
+
+Then unpack it into the src directory and rename the extacted directory
+"dojo-release-1.1.1" from to "dojotoolkit"
\ No newline at end of file

Added: trunk/main/dojo/claw-dojo-tests.asd
==============================================================================
--- (empty file)
+++ trunk/main/dojo/claw-dojo-tests.asd	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,51 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/claw-dojo-tests.asd $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(asdf:defsystem :claw-dojo-tests
+  :name "claw-dojo-tests"
+  :author "Andrea Chiumenti"
+  :description "Tests for claw-dojo"
+  :depends-on (:claw :claw-dojo :parenscript)
+  :components ((:module tests
+			:components ((:file "packages")
+				     (:file "common" :depends-on ("packages"))
+				     (:file "main" :depends-on ("common"))
+				     (:file "index" :depends-on ("main"))
+				     (:file "realm" :depends-on ("main"))
+                                     (:file "header-info-page" :depends-on ("main"))
+				     (:file "djbutton-test" :depends-on ("main"))
+				     (:file "djdialog-test" :depends-on ("main"))
+				     (:file "djcolorpalette-test" :depends-on ("main"))
+				     (:file "djeditor-test" :depends-on ("main"))
+				     (:file "ajax-test" :depends-on ("main"))
+                                     (:file "djcalendar-test" :depends-on ("main"))
+                                     (:file "slider-test" :depends-on ("main"))
+                                     (:file "djmenu-test" :depends-on ("main"))))))
+
+

Added: trunk/main/dojo/claw-dojo.asd
==============================================================================
--- (empty file)
+++ trunk/main/dojo/claw-dojo.asd	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,53 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/claw-dojo.asd $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(asdf:defsystem :claw-dojo
+  :name "claw-dojo"
+  :author "Andrea Chiumenti"
+  :description "claw dojo-1.1.0 integration"
+  :depends-on (:claw :parenscript)
+  :components ((:module src
+                        :components ((:file "packages")
+                                     (:file "misc" :depends-on ("packages"))
+                                     (:file "djlink" :depends-on ("misc"))
+                                     (:file "djwidget" :depends-on ("misc"))
+                                     (:file "djcontent-pane" :depends-on ("misc"))
+                                     (:file "djbody" :depends-on ("djcontent-pane"))
+                                     (:file "dijit" :depends-on ("djwidget"))
+                                     (:file "djclaw" :depends-on ("djwidget"))
+                                     (:file "djform" :depends-on ("djwidget"))
+                                     (:file "djbutton" :depends-on ("djwidget"))
+                                     (:file "djmenu" :depends-on ("djwidget"))
+                                     (:file "djdialog" :depends-on ("djwidget"))
+                                     (:file "djcolorpalette" :depends-on ("djwidget"))
+                                     (:file "djprogressbar" :depends-on ("djwidget"))
+                                     (:file "djtitlepane" :depends-on ("djwidget"))
+                                     (:file "djtree" :depends-on ("djwidget"))
+                                     (:file "djlayout" :depends-on ("djwidget"))
+                                     (:file "djtooltip" :depends-on ("djwidget"))))))

Added: trunk/main/dojo/src/dijit.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/src/dijit.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,35 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/src/dijit.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :dojo)
+
+(defclass djbackground-iframe (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.BackgroundIframe component. More info at http://api.dojotoolkit.org/"))

Added: trunk/main/dojo/src/djbody.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/src/djbody.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,121 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/src/djbody.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :dojo)
+
+(defgeneric scripts-content-pane> (&rest rest))
+
+(defclass djbody (wcomponent)
+  ((class :initarg :class
+          :reader djbody-class
+          :documentation "The css class of the <body> tag element")
+   (theme :initarg :theme
+          :reader djbody-theme
+          :documentation "The theme name. See http://dojotoolkit.org/book/dojo-book-0-9/part-2-dijit/themes-and-design for more details")
+   (themes-url :initarg :themes-url
+               :reader djbody-themes-url
+               :documentation "The url that contains dojo themes")
+   (parse-on-load-p :initarg :parse-on-load
+                    :reader djbody-parse-on-load-p
+                    :documentation "Shoul always be true")
+   (debugp :initarg :is-debug
+           :reader djbody-debugp
+           :documentation "Set to true if you want to debug dojo calls")
+   (load-dojo-js :initarg :load-dojo-js
+                 :reader load-dojo-js
+                 :documentation "When not nil it loads the dojo.js file with a <script> tag")
+   (djconfig :initarg :djconfig
+             :reader djbody-djconfig
+             :documentation "Additional dojo configurations"))
+  (:metaclass metacomponent)
+  (:default-initargs :class "" :theme "tundra"
+                     :themes-url (format nil "~a/dojotoolkit/dijit/themes/" (clawserver-base-path (current-server)))
+                     :parse-on-load "true"
+                     :load-dojo-js t
+                     :is-debug nil
+                     :djconfig nil)
+  (:documentation "This class provide a <body> tag that is enabled for dojo."))
+
+(let ((class (find-class 'djbody)))
+  (closer-mop:ensure-finalized class)
+  (setf (documentation (find-symbol (format nil "~a>" (class-name class))) 'function)
+        (format nil "Description: ~a~%Parameters:~%~a~a~%~%~a"
+                "Function that instantiates a DJBODY component and renders a html <body> tag enabled for dojo."
+                *id-and-static-id-description*
+                (describe-html-attributes-from-class-slot-initargs class)
+                (describe-component-behaviour class))))
+
+(defmethod htcomponent-script-files ((o djbody))
+  (let ((parse-on-load (djbody-parse-on-load-p o))
+        (is-debug (djbody-debugp o))
+        (djconfig (djbody-djconfig o)))
+    (when (load-dojo-js o)
+      (script> :type "text/javascript"
+               :src  (format nil "~a/dojotoolkit/dojo/dojo.js" (clawserver-base-path (current-server)))
+               :djconfig (if (null djconfig)
+                             (format nil
+                                     "parseOnLoad:~a,usePlainJson:true,isDebug:~a"
+                                     parse-on-load is-debug)
+                             (format nil
+                                     "parseOnLoad:~a,usePlainJson:true,~a,isDebug:~a"
+                                     parse-on-load djconfig is-debug))))))
+
+
+(defmethod htcomponent-stylesheet-files ((o djbody))
+  (let ((theme (djbody-theme o)))
+    (list
+     (format nil "~a/dojotoolkit/dojo/resources/dojo.css" (clawserver-base-path (current-server)))
+     (format nil "~a/dojotoolkit/dijit/themes/dijit.css" (clawserver-base-path (current-server)))
+     (format nil "~a~a/~a.css" (djbody-themes-url o) theme theme))))
+
+
+(defmethod djbody-cssclass ((o djbody))
+  (format nil "~a ~a" (djbody-theme o) (djbody-class o)))
+
+(defmethod wcomponent-template ((obj djbody))
+  (let ((id "scripts-content-pane")
+        (pobj (htcomponent-page obj))
+        (attributes (append (list :class (djbody-cssclass obj))
+                            (wcomponent-informal-parameters obj))))
+    (build-tagf "body" 'tag nil
+                attributes
+                (htcomponent-body obj)
+                (djxcontent-pane> :static-id id
+                                  (script> :type "text/javascript"
+                                           (page-body-init-scripts pobj))))))
+
+
+(defmethod wcomponent-after-prerender ((obj djbody) (pobj page))
+  (let ((scripts (page-instance-initscripts pobj)))
+    ;;remember that scripts are in reverse order
+    (when scripts
+      (push "});" (page-instance-initscripts pobj))
+      (nconc scripts (list "dojo.addOnLoad\(function\() {")))))
+
+

Added: trunk/main/dojo/src/djbutton.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/src/djbutton.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,90 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/src/djbutton.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :dojo)
+
+(defclass djbutton (djwidget)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.form.Button component. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.form.Button"))
+
+(defclass djdrop-down-button (djwidget)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.form.DropDownButton component. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.form.DropDownButton" :dojo-require (list "dijit.form.Button")))
+
+
+(defclass djcombo-button (djwidget)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.form.ComboButton component. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.form.ComboButton" :dojo-require (list "dijit.form.Button")))
+
+
+(defclass djtoggle-button (djwidget)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.form.ToggleButton component. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.form.ToggleButton" :dojo-require (list "dijit.form.Button")))
+
+
+;;;--------------------------------------------------------
+(defclass djsubmit-button (csubmit)
+  ((form :initform nil
+         :accessor djsubmit-button-form))
+  (:metaclass metacomponent)
+  (:documentation "This class is used to render dijit.form.Button that incorporates the logic to be included inside a CFORM component."))
+
+(defmethod wcomponent-template ((obj djsubmit-button))
+  (let* ((id (htcomponent-client-id obj))
+	 (value (csubmit-value obj)))
+    (djbutton> :static-id id
+               (wcomponent-informal-parameters obj)
+               value)))
+
+(defmethod wcomponent-before-prerender ((obj djsubmit-button) (page page))
+  (hunchentoot:log-message :info "PRERENDER@@@@@@@@@@@@@@@~a" (page-current-form page))
+  (setf (djsubmit-button-form obj) (page-current-form page)))
+
+(defmethod wcomponent-before-render ((obj djsubmit-button) (page page))
+  (hunchentoot:log-message :info "RENDER@@@@@@@@@@@@@@@~a" (page-current-form page))
+  (setf (djsubmit-button-form obj) (page-current-form page)))
+
+(defmethod htcomponent-instance-initscript ((obj djsubmit-button))
+  (let ((id (htcomponent-client-id obj))
+        (form-id (htcomponent-client-id (djsubmit-button-form obj))))
+    (ps*
+     `(dojo.connect (dijit.by-id ,id)
+                    "onClick"
+                    (lambda (e) (let ((the-form (dijit.by-id ,form-id)))
+                                  (unless the-form
+                                    (setf the-form (dojo.by-id ,form-id)))
+                                  (.submit the-form)))))))

Added: trunk/main/dojo/src/djclaw.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/src/djclaw.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,61 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/src/djclaw.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :dojo)
+
+(defclass _djfloating-content (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo claw.FloatingContent component.")
+  (:default-initargs :dojo-type "claw.FloatingContent"))
+
+(defclass djfloating-content (wcomponent)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.FloatingContent component."))
+
+(defmethod wcomponent-template ((obj djfloating-content))
+  (let ((id (htcomponent-client-id obj)))
+    (list
+     (djhard-link> :id id :ref-id id)
+     (_djfloating-content> :static-id id
+              (wcomponent-informal-parameters obj)
+              (htcomponent-body obj)))))
+
+(defclass djhard-link (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo claw.HardLink component.")
+  (:default-initargs :dojo-type "claw.HardLink"))
+
+(defclass djrounded (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo claw.Rounded component. Provide bgImg and bgImgAlt \(for msie <= 6)")
+  (:default-initargs :dojo-type "claw.Rounded"))
\ No newline at end of file

Added: trunk/main/dojo/src/djcolorpalette.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/src/djcolorpalette.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,37 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/src/djcolorpalette.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :dojo)
+
+(defclass djcolor-palette (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.ColorPalette. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.ColorPalette"))
+

Added: trunk/main/dojo/src/djcontainers.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/src/djcontainers.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,46 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/src/djcontainers.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :dojo)
+
+(defclass djaccordion-container (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.layout.AccordionContainer component. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.layout.AccordionContainer"))
+
+(defclass djaccordion-pane (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.layout.AccordionPane component. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.layout.AccordionPane":dojo-require (list "dijit.layout.AccordionContainer")))
+
+
+
+

Added: trunk/main/dojo/src/djcontent-pane.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/src/djcontent-pane.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,59 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/src/djcontent-plane.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :dojo)
+
+(defclass djxcontent-pane (djwidget) 
+  ((execute-scripts-p :initarg :execute-scripts-p
+		    :reader djcontent-pane-execute-scripts-p
+		    :documentation "When not nil permits to the content pane to evaluate javascript directives")
+   (render-styles-p :initarg :render-styles-p
+		  :reader djcontent-pane-render-styles-p
+		  :documentation "When not nil permits to the content pane to evaluate style sheet directives"))
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dojox.layout.ContentPane component. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dojox.layout.ContentPane" :execute-scripts-p t 
+		     :render-styles-p t))
+
+
+(defmethod wcomponent-template ((obj djxcontent-pane))
+  (let ((id (htcomponent-client-id obj))
+	(dojo-type (djwidget-dojo-type obj))
+	(execute-scripts (if (djcontent-pane-execute-scripts-p obj)
+			     "true"
+			     "false"))
+	(render-styles (if (djcontent-pane-render-styles-p obj)
+			     "true"
+			     "false")))
+    (div> :dojoType dojo-type 
+	  :executeScripts execute-scripts
+	  :renderStyles render-styles
+	  :static-id id
+	  (wcomponent-informal-parameters obj)
+	  (htcomponent-body obj))))

Added: trunk/main/dojo/src/djdialog.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/src/djdialog.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,86 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/src/djdialog.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :dojo)
+
+(defclass _djdialog (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.Dialog component. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.Dialog"))
+
+(defclass djdialog (wcomponent)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.Dialog component. More info at http://api.dojotoolkit.org/. It adds a HardLink so that the Dialog, that is moved inside body, may be referenced where it war originally placed, and so can be deleted from there"))
+
+(defmethod wcomponent-template ((obj djdialog))
+  (let ((id (htcomponent-client-id obj)))
+    (list
+     (_djdialog> :static-id id
+              (wcomponent-informal-parameters obj)
+              (htcomponent-body obj))
+     (djhard-link> :id "hidden" :ref-id id))))
+
+(defclass _djdialog-underlay (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.DialogUnderlay component. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.DialogUnderlay" :dojo-require (list "dijit.Dialog")))
+
+(defclass djdialog-underlay (wcomponent)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.DialogUnderlay component. More info at http://api.dojotoolkit.org/. It adds a HardLink so that the Dialog, that is moved inside body, may be referenced where it war originally placed, and so can be deleted from there"))
+
+(defmethod wcomponent-template ((obj djdialog-underlay))
+  (let ((id (htcomponent-client-id obj)))
+    (list
+     (djhard-link> :id id :ref-id id)
+     (_djdialog-underlay> :static-id id
+              (wcomponent-informal-parameters obj)
+              (htcomponent-body obj)))))
+
+
+(defclass _djtooltip-dialog (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.TooltipDialog component. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.TooltipDialog" :dojo-require (list "dijit.Dialog")))
+
+(defclass djtooltip-dialog (wcomponent)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.TooltipDialog component. More info at http://api.dojotoolkit.org/. It adds a HardLink so that the Dialog, that is moved inside body, may be referenced where it war originally placed, and so can be deleted from there"))
+
+(defmethod wcomponent-template ((obj djtooltip-dialog))
+  (let ((id (htcomponent-client-id obj)))
+    (_djtooltip-dialog> :static-id id
+                        (wcomponent-informal-parameters obj)
+                        (htcomponent-body obj))))

Added: trunk/main/dojo/src/djform.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/src/djform.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,469 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/src/djform.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :dojo)
+
+(defclass djform (cform djwidget)
+  ((update-id :initarg :update-id
+              :reader update-id
+              :documentation "A list of the component id to update")
+   (ajax-form-p :initarg :ajax-form-p
+                :reader djform-ajax-form-p
+                :documentation "When not nil, requests are sent via XHR call."))
+  (:metaclass metacomponent)
+  (:documentation "Class to generate a <form> element that is capable of XHR requests. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "claw.Form" :update-id () :ajax-form-p t))
+
+(defmethod wcomponent-template((obj djform))
+  (let ((id (htcomponent-client-id obj))
+        (method (form-method obj))
+        (dojo-type (djwidget-dojo-type obj))
+        (update-id (update-id obj)))
+    (form> :static-id id
+           :xhr (djform-ajax-form-p obj)
+           :method method
+           :dojotype dojo-type
+           :update-id (when update-id
+                        (let ((js-array (ps* `(array ,update-id))))
+                          (subseq js-array 0 (1- (length js-array)))))
+           (wcomponent-informal-parameters obj)
+           (input> :name *rewind-parameter*
+                   :type "hidden"
+                   :value id)
+           (htcomponent-body obj))))
+
+
+(defmethod htcomponent-instance-initscript ((obj djform))
+  nil)
+
+(defclass djtext-box (cinput djwidget)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "This class inherits from a CINPUT, but is used to render a dojo dijit.form.TextBox")
+  (:default-initargs :dojo-type "dijit.form.TextBox" :type "text"))
+
+(defmethod wcomponent-template ((obj djtext-box))
+  (let ((client-id (htcomponent-client-id obj))
+        (type (claw::input-type obj))
+        (dojo-type (djwidget-dojo-type obj))
+        (translator (translator obj))
+        (value "")
+        (class (claw::css-class obj)))
+    (when (component-validation-errors obj)
+      (if (or (null class) (string= class ""))
+          (setf class "dijitError")
+          (setf class (format nil "~a dijitError" class))))
+    (setf value (translator-encode translator obj))
+    (input> :static-id client-id
+            :type type
+            :dojoType dojo-type
+            :name client-id
+            :class class
+            :value value
+            (wcomponent-informal-parameters obj))))
+
+(defclass djtextarea (ctextarea djwidget)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "This class inherits from a CINPUT, but is used to render a dojo dijit.form.Textarea")
+  (:default-initargs :dojo-type "dijit.form.Textarea" :tag-name "textarea"))
+
+(defmethod wcomponent-template ((obj djtextarea))
+  (let ((client-id (htcomponent-client-id obj))
+        (tag-name (djwidget-tag-name obj))
+        (dojo-type (djwidget-dojo-type obj))
+        (translator (translator obj))
+        (value "")
+        (class (claw::css-class obj)))
+    (when (component-validation-errors obj)
+      (if (or (null class) (string= class ""))
+          (setf class "dijitError")
+          (setf class (format nil "~a dijitError" class))))
+    (setf value (translator-encode translator obj))
+    (if (string-equal tag-name "textarea")
+        (textarea> :static-id client-id
+                   :dojoType dojo-type
+                   :name (name-attr obj)
+                   :class class
+                   (wcomponent-informal-parameters obj)
+                   (or (when value ($raw> value)) (htcomponent-body obj)))
+        (let ((tag-name (djwidget-tag-name obj))
+              (parameters (nconc (list :static-id (htcomponent-client-id obj)
+                                       :dojo-type (djwidget-dojo-type obj)
+                                       :name (name-attr obj))
+                                 (djwidget-formal-parameters obj))))
+          (build-tagf tag-name
+                      'tag
+                      (not (null (find tag-name *empty-tags*)))
+                      (list
+                       parameters
+                       (wcomponent-informal-parameters obj)
+                       (or (when value ($raw> value))
+                           (htcomponent-body obj))))))))
+
+
+(defclass djsimple-textarea (djtextarea)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "This class inherits from a CINPUT, but is used to render a dojo dijit.form.SimpleTextarea")
+  (:default-initargs :dojo-type "dijit.form.SimpleTextarea" :type "text"))
+
+(defclass djvalidation-text-box (djtext-box)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "This class inherits from a CINPUT, but is used to render a dojo dijit.form.ValidationTextBox")
+  (:default-initargs :dojo-type "dijit.form.ValidationTextBox" :type "text"
+                     :dojo-require (list "dijit.form.ValidationTextBox")))
+
+(defclass djmapped-text-box (djvalidation-text-box)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "This class inherits from a DJVALIDATION-TEXT-BOX, but is used to render a dojo dijit.form.MappedTextBox")
+  (:default-initargs :dojo-type "dijit.form.MappedTextBox"))
+
+(defclass djrange-bound-text-box (djvalidation-text-box)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "This class inherits from a DJVALIDATION-TEXT-BOX, but is used to render a dojo dijit.form.RangeBoundTextBox")
+  (:default-initargs :dojo-type "dijit.form.RangeBoundTextBox"))
+
+(defclass djnumber-text-box (djtext-box)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "This class inherits from a CINPUT, but is used to render a dojo dijit.form.NumberTextBox")
+  (:default-initargs :dojo-type "dijit.form.NumberTextBox" :type "text"))
+
+(defclass djnumber-spinner (djtext-box)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "This class inherits from a CINPUT, but is used to render a dojo dijit.form.NumberSpinner")
+  (:default-initargs :dojo-type "dijit.form.NumberSpinner" :type "text"))
+
+(defclass djcheck-box (ccheckbox djwidget)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "This class inherits from a CCHECKBOX, but is used to render a dojo dijit.form.CheckBox")
+  (:default-initargs :dojo-type "dijit.form.CheckBox"))
+
+(defmethod wcomponent-template ((cinput djcheck-box))
+  (let* ((client-id (htcomponent-client-id cinput))
+         (dojo-type (djwidget-dojo-type cinput))
+         (translator (translator cinput))
+         (type (input-type cinput))
+         (value (translator-value-type-to-string translator (ccheckbox-value cinput)))
+         (current-value (translator-type-to-string translator cinput))
+         (class (css-class cinput)))
+    (when (component-validation-errors cinput)
+      (if (or (null class) (string= class ""))
+          (setf class "error")
+          (setf class (format nil "~a error" class))))
+    (input> :static-id client-id
+            :type type
+            :dojoType dojo-type
+            :name (name-attr cinput)
+            :class class
+            :value value
+            :checked (when (and current-value (equal value current-value)) "checked")
+            (wcomponent-informal-parameters cinput))))
+
+(defclass djradio-button (cradio djwidget)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "This class inherits from a CRADIO, but is used to render a dojo dijit.form.CheckBox")
+  (:default-initargs :dojo-type "dijit.form.RadioButton" :dojo-require (list "dijit.form.CheckBox")))
+
+(defmethod wcomponent-template ((cinput djradio-button))
+  (let* ((client-id (htcomponent-client-id cinput))
+         (translator (translator cinput))
+         (type (input-type cinput))
+         (dojo-type (djwidget-dojo-type cinput))
+         (value (translator-value-type-to-string translator (ccheckbox-value cinput)))
+         (current-value (translator-type-to-string translator cinput))
+         (class (css-class cinput)))
+    (when (component-validation-errors cinput)
+      (if (or (null class) (string= class ""))
+          (setf class "error")
+          (setf class (format nil "~a error" class))))
+    (input> :static-id client-id
+            :type type
+            :dojoType dojo-type
+            :name (name-attr cinput)
+            :class class
+            :value value
+            :checked (when (and current-value (equal value current-value)) "checked")
+            (wcomponent-informal-parameters cinput))))
+
+(defclass djcombo-box (cinput djwidget)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "This class inherits from a CSELECT, but is used to render a dojo dijit.form.ComboBox")
+  (:default-initargs :dojo-type "dijit.form.ComboBox" :multiple nil))
+
+(defmethod wcomponent-template ((obj djcombo-box))
+  (let ((client-id (htcomponent-client-id obj))
+        (dojo-type (djwidget-dojo-type obj))
+        (translator (translator obj))
+        (value "")
+        (class (claw::css-class obj)))
+    (when (component-validation-errors obj)
+      (if (or (null class) (string= class ""))
+          (setf class "dijitError")
+          (setf class (format nil "~a dijitError" class))))
+    (setf value (translator-encode translator obj))
+    (select> :static-id client-id
+             :dojoType dojo-type
+             :name client-id
+             :class class
+             :value value
+             :multiple (cinput-result-as-list-p obj)
+             (wcomponent-informal-parameters obj)
+             (htcomponent-body obj))))
+
+(defclass djmulti-select (djcombo-box)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "This class inherits from a DJVALIDATION-TEXT-BOX, but is used to render a dojo dijit.form.MultiSelect")
+  (:default-initargs :dojo-type "dijit.form.MultiSelect" :multiple t))
+
+(defclass djfiltering-select (djcombo-box)
+  ((onchange :initarg :onchange))
+  (:metaclass metacomponent)
+  (:documentation "This class inherits from a CSELECT, but is used to render a dojo dijit.form.FilteringSelect")
+  (:default-initargs :dojo-type "dijit.form.FilteringSelect"))
+
+(defclass djinline-edit-box (cinput djwidget)
+  ((autosavep :initarg :autosavep
+              :reader djinline-edit-box-autosavep
+              :documentation "Changing the value automatically saves it; don't have to push save button \(and save button isn't even displayed)")
+   (button-save :initarg :button-save
+                :reader djinline-edit-box-button-save
+                :documentation "Save button label")
+   (button-cancel :initarg :button-cancel
+                  :reader djinline-edit-box-button-cancel
+                  :documentation "Cancel button label")
+   (render-as-html :initarg :render-as-html
+                   :accessor djinline-edit-box-render-as-html
+                   :documentation "Set this to true if the specified Editor's value should be interpreted as HTML rather than plain text \(ie, dijit.Editor)")
+   (editor :initarg :editor
+           :reader djinline-edit-box-editor
+           :documentation "The widget used to edit the value"))
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.InLineEditBox. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :empty t :dojo-type "dijit.InlineEditBox"
+                     :tag-name "span"
+                     :autosavep t
+                     :button-save nil
+                     :button-cancel nil
+                     :render-as-html nil
+                     :editor "dijit.form.TextBox"))
+
+(defmethod wcomponent-template ((obj djinline-edit-box))
+  (let ((id (htcomponent-client-id obj))
+        (tag-name (djwidget-tag-name obj))
+        (auto-save (if (djinline-edit-box-autosavep obj) "true" "false"))
+        (button-save (djinline-edit-box-button-save obj))
+        (button-cancel (djinline-edit-box-button-cancel obj))
+        (render-as-html (if (djinline-edit-box-render-as-html obj) "true" "false"))
+        (editor (djinline-edit-box-editor obj))
+        (value ""))
+    (build-tagf tag-name
+                'tag nil
+                :static-id id
+                :value value
+                :autosave auto-save
+                :buttonsave button-save
+                :buttoncancel button-cancel
+                :renderashtml render-as-html
+                :editor editor
+                (wcomponent-informal-parameters obj))))
+
+(defmethod htcomponent-instance-initscript((obj djinline-edit-box))
+  (let ((id (htcomponent-client-id obj))
+        (page-url (page-url (htcomponent-page obj))))
+    (ps* `(dojo.connect (dijit.by-id ,id)
+                        "onChange"
+                        (lambda (e) (dojo.xhrPost (create :url ,page-url
+                                                          :error (lambda (data) (console.error data))
+                                                          :timeout 2000
+                                                          :handle-as "json"
+                                                          :content (create :json (array)
+                                                                           ,*rewind-parameter* ,id))))))))
+
+(defclass djdate-text-box (djtext-box)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "This class inherits from a CINPUT, but is used to render a dojo dijit.form.DateTextBox")
+  (:default-initargs :dojo-type "dijit.form.DateTextBox" :type "text"
+                     :translator *date-translator-ymd*))
+
+
+(defclass djtime-text-box (djtext-box)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "This class inherits from a CINPUT, but is used to render a dojo dijit.form.DateTextBox")
+  (:default-initargs :dojo-type "dijit.form.TimeTextBox" :type "text"
+                     :translator *date-translator-time*))
+
+(defclass djcalendar (djtext-box)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "This class inherits from a CINPUT, but is used to render a dojo dijit._Calendar")
+  (:default-initargs :dojo-type "dijit._Calendar" :dojo-require (list "dijit._Calendar" "dojo.date.locale")
+                     :type "text"
+                     :translator *date-translator-ymd*))
+
+
+(defclass djcurrency-text-box (djtext-box)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "This class inherits from a CINPUT, but is used to render a dojo dijit.form.CurrencyTextBox")
+  (:default-initargs :dojo-type "dijit.form.CurrencyTextBox" :type "text"))
+
+
+(defclass _djslider (djwidget)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Base class to map dojo dijit.form.Slider. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-require (list "dijit.form.Slider")))
+
+(defclass _djslider-slider (cinput _djslider)
+  ()
+  (:metaclass metacomponent)
+  (:default-initargs :reserved-parameters (list :value :name) :translator *number-translator*)
+  (:documentation "Base class to map dojo dijit.form.HorizontalSlider and dijit.form.VerticalSlider. More info at http://api.dojotoolkit.org/"))
+
+(defmethod wcomponent-template ((_djslider-slider _djslider-slider))
+  (let ((client-id (htcomponent-client-id _djslider-slider))
+        (translator (translator _djslider-slider))
+        (value "")
+        (class (css-class _djslider-slider)))
+    (when (component-validation-errors _djslider-slider)
+      (if (or (null class) (string= class ""))
+	  (setf class "dijitError")
+	  (setf class (format nil "~a dijitError" class))))
+    (setf value (translator-encode translator _djslider-slider))
+    (div> :static-id client-id
+          :dojoType (djwidget-dojo-type _djslider-slider)
+          :value value
+          :class class
+          :name (name-attr _djslider-slider)
+          (wcomponent-informal-parameters _djslider-slider)
+          (htcomponent-body _djslider-slider))))
+
+(defclass djhorizontal-slider (_djslider-slider)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.form.HorizontalSlider. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.form.HorizontalSlider"))
+
+(defclass djhorizontal-rule (_djslider)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.form.HorizontalRule. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.form.HorizontalRule"))
+
+(defclass djhorizontal-rule-labels (_djslider)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.form.HorizontalRuleLabels. Renders like an <ol> tag element, so put
+<li> tag elements inside. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.form.HorizontalRuleLabels" :tag-name "ol"))
+
+(defclass djvertical-slider (_djslider-slider)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.form.VerticalSlider. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.form.VerticalSlider"))
+
+(defclass djvertical-rule (_djslider)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.form.VerticalRule. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.form.VerticalRule"))
+
+(defclass djvertical-rule-labels (_djslider)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.form.VerticalRuleLabels. Renders like an <ol> tag element, so put
+<li> tag elements inside. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.form.VerticalRuleLabels" :tag-name "ol"))
+
+(defclass djtext-box-file (djtext-box)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "This class inherits from a CINPUT of type \"file\", but is used to render a dojo dijit.form.DateTextBox")
+  (:default-initargs :dojo-type "dojox.widget.FileInput" :type nil
+                     :translator *file-translator*))
+
+(defmethod htcomponent-stylesheet-files((djtext-box-file djtext-box-file))
+  (list (format nil "~a/dojotoolkit/dojox/widget/FileInput/FileInput.css" (clawserver-base-path (current-server)))))
+
+(defclass djeditor (djtextarea)
+  ((form :initform nil
+         :accessor djeditor-form))
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.Editor. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "claw.Editor" :tag-name "div"))
+
+(defclass djeditor-plugins-always-show-toolbar (djwidget)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.Editor. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit._editor.plugins.AlwaysShowToolbar" :tag-name nil))
+
+(defclass djeditor-plugins-enter-key-handling (djwidget)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.Editor. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit._editor.plugins.EnterKeyHandling" :tag-name nil))
+
+(defclass djeditor-plugins-font-choice (djwidget)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.Editor. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit._editor.plugins.FontChoice" :tag-name nil))
+
+(defclass djeditor-plugins-link-dialog (djwidget)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.Editor. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit._editor.plugins.LinkDialog" :tag-name nil))
+
+(defclass djeditor-plugins-text-color (djwidget)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.Editor. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit._editor.plugins.TextColor" :tag-name nil))
+
+(defclass djeditor-plugins-toggle-dir (djwidget)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.Editor. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit._editor.plugins.ToggleDir" :tag-name nil))
+

Added: trunk/main/dojo/src/djlayout.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/src/djlayout.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,101 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/src/djcontainers.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :dojo)
+
+(defclass djaccordion-container (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.layout.AccordionContainer component. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.layout.AccordionContainer"))
+
+(defclass djaccordion-pane (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.layout.AccordionPane component. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.layout.AccordionPane":dojo-require (list "dijit.layout.AccordionContainer")))
+
+(defclass djborder-container (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.layout.BorderContainer component. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.layout.BorderContainer"))
+
+(defclass djcontent-pane (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.layout.ContentPane component. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.layout.ContentPane"))
+
+(defclass djlayout-container (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.layout.LayoutContainer component. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.layout.LayoutContainer"))
+
+(defclass djlink-pane (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.layout.LinkPane component. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.layout.LinkPane"))
+
+(defclass djsplit-container (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.layout.SplitContainer component. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.layout.SplitContainer"))
+
+(defclass djstack-container (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.layout.StackContainer component. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.layout.StackContainer"))
+
+(defclass djstack-controller (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.layout.StackController component. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.layout.StackController" :dojo-require (list "dijit.layout.StackContainer")))
+
+(defclass djtab-container (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.layout.TabContainer component. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.layout.TabContainer"))
+
+(defclass djtab-controller (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.layout.TabController component. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.layout.TabController" :dojo-require (list "dijit.layout.TabContainer")))
+
+
+
+
+

Added: trunk/main/dojo/src/djlink.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/src/djlink.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,63 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/src/djlink.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :dojo)
+
+(defclass djaction-link (action-link djwidget) 
+  ((update-id :initarg :update-id
+	      :reader update-id
+	      :documentation "A list of the component id to update"))
+  (:metaclass metacomponent)
+  (:documentation "Class that extends ACTION-LINK to handle XHR requests.")
+  (:default-initargs :dojo-type "dijit.form.Form" :update-id ()))
+
+(defmethod wcomponent-template((o djaction-link))
+  (let ((client-id (htcomponent-client-id o)))
+    (a> :static-id client-id
+	:href "#"
+	(wcomponent-informal-parameters o)
+	(htcomponent-body o))))
+
+
+(defmethod htcomponent-instance-initscript((obj djaction-link))
+  (let ((id (htcomponent-client-id obj))
+	(page-url (page-url (htcomponent-page obj)))
+	(update-id-list (update-id obj)))
+    (ps* 
+     `(dojo.connect (dojo.by-id ,id) 
+                    "onclick"
+                    (lambda (e) (progn 
+                                  (e.prevent-default)
+                                  (dojo.xhr-post (create :url ,page-url
+                                                        :load (lambda (data) (claw.update-and-eval data))
+                                                        :error (lambda (data) (console.error data))
+                                                        :timeout 2000
+                                                        :handle-as "json"
+                                                        :content (create :json (array ,update-id-list)
+                                                                         ,*rewind-parameter* ,id)))))))))

Added: trunk/main/dojo/src/djmenu.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/src/djmenu.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,55 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/src/djmenu.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :dojo)
+
+
+(defclass djmenu (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.Menu. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.Menu"))
+
+(defclass djmenu-item (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.MenuItem. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.MenuItem" :dojo-require (list "dijit.Menu")))
+
+(defclass djmenu-separator (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.MenuSeparator. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.MenuSeparator" :dojo-require (list "dijit.Menu")))
+
+(defclass djpopup-menu-item (djwidget)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.PopupMenuItem. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.PopupMenuItem" :dojo-require (list "dijit.Menu")))

Added: trunk/main/dojo/src/djprogressbar.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/src/djprogressbar.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,39 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/src/djprogressbar.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :dojo)
+
+(defclass djprogress-bar (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.ProgressBar. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.ProgressBar"))
+
+
+

Added: trunk/main/dojo/src/djtitlepane.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/src/djtitlepane.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,37 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/src/djtitlepane.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :dojo)
+
+(defclass djtitle-pane (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.TitlePane. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.TitlePane"))
+

Added: trunk/main/dojo/src/djtoolbar.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/src/djtoolbar.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,43 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/src/djtoolbar.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :dojo)
+
+(defclass djtoolbar (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.Toolbar. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.Toolbar"))
+
+(defclass djtoolbar-separator (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.ToolbarSeparator. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.ToolbarSeparator"))
+

Added: trunk/main/dojo/src/djtooltip.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/src/djtooltip.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,49 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/src/djtooltip.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :dojo)
+
+(defclass _djtooltip (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.Tooltip component. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.Tooltip"))
+
+(defclass djtooltip (wcomponent)
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.Tooltip component. More info at http://api.dojotoolkit.org/. It adds a HardLink so that the Dialog, that is moved inside body, may be referenced where it war originally placed, and so can be deleted from there"))
+
+(defmethod wcomponent-template ((obj djtooltip))
+  (let ((id (htcomponent-client-id obj)))    
+    (list
+     (djhard-link> :ref-id id)
+     (_djtooltip> :static-id id
+                  (wcomponent-informal-parameters obj)
+                  (htcomponent-body obj)))))

Added: trunk/main/dojo/src/djtree.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/src/djtree.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,39 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/src/djtree.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :dojo)
+
+(defclass djtree (djwidget) 
+  ()
+  (:metaclass metacomponent)
+  (:documentation "Class for dojo dijit.Toolbar. More info at http://api.dojotoolkit.org/")
+  (:default-initargs :dojo-type "dijit.Tree"))
+
+
+

Added: trunk/main/dojo/src/djwidget.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/src/djwidget.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,81 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/src/djwidget.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :dojo)
+
+(defgeneric djwidget-formal-parameters (djwidget)
+  (:documentation "list of html attributes defined by widget slots"))
+
+(defclass djwidget (wcomponent)
+  ((tag-name :initarg :tag-name
+	     :reader djwidget-tag-name
+	     :documentation "The HTML tag element that will be rendered")
+   (dojo-type :initarg :dojo-type
+	      :reader djwidget-dojo-type
+	      :documentation "The type of the dojo element, it will be added as dojoType HTML custom tag attribute")
+   (dojo-rquire :initarg :dojo-require
+		:reader djwidget-dojo-require
+		:documentation "A list of addictional dojo reqirements"))
+  (:metaclass metacomponent)
+  (:default-initargs :tag-name "div" :dojo-require nil)
+  (:documentation "Base class to render dojo widgets"))
+
+(let ((class (find-class 'djwidget)))
+  (closer-mop:ensure-finalized class)
+  (setf (documentation (find-symbol (format nil "~a>" (class-name class))) 'function)
+	(format nil "Description: ~a~%Parameters:~%~a~a~%~%~a"
+		"Function that instantiates a DJWIDGET component and renders a html tag enabled for dojo whose name is provided by the :TAG-NAME keyword and the dojo widget by :DOJO-TYPE."
+		*id-and-static-id-description*
+		(describe-html-attributes-from-class-slot-initargs class)
+		(describe-component-behaviour class))))
+
+(defmethod djwidget-formal-parameters ((djwidget djwidget))())
+
+(defmethod htcomponent-class-initscripts ((obj djwidget))
+  (let ((dojo-type (djwidget-dojo-type obj))
+	(dojo-require (djwidget-dojo-require obj)))
+    (append
+     (list (ps* `(dojo.require "dojo.parser")))
+     (unless dojo-require
+       (list (ps* `(dojo.require ,dojo-type))))
+     (loop for require in dojo-require
+          collect (ps* `(dojo.require ,require))))))
+
+(defmethod wcomponent-template ((obj djwidget))
+  (let ((tag-name (djwidget-tag-name obj)))
+    (when tag-name
+      (let ((parameters (nconc (list :static-id (htcomponent-client-id obj) :dojo-type (djwidget-dojo-type obj))
+                               (djwidget-formal-parameters obj))))
+        (build-tagf tag-name
+                    'tag
+                    (not (null (find tag-name *empty-tags*)))
+                    (list
+                     parameters
+                     (wcomponent-informal-parameters obj)
+                     (htcomponent-body obj)))))))

Added: trunk/main/dojo/src/misc.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/src/misc.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,43 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/src/misc.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :dojo)
+
+(defvar  *dojo-misc-file* (load-time-value
+                     (or #.*compile-file-pathname* *load-pathname*)))
+
+(defun djuser-locale ()
+  (substitute #\- #\_ (string-downcase (user-locale))))
+
+(register-library-resource "dojotoolkit/"  (make-pathname :directory (append (pathname-directory *dojo-misc-file*) '("dojotoolkit"))))
+(register-library-resource "dojotoolkit/claw/HardLink.js"  (make-pathname :directory (append (pathname-directory *dojo-misc-file*) '("js")) :name "HardLink" :type "js"))
+(register-library-resource "dojotoolkit/claw/FloatingContent.js"  (make-pathname :directory (append (pathname-directory *dojo-misc-file*) '("js")) :name "FloatingContent" :type "js"))
+(register-library-resource "dojotoolkit/claw/Rounded.js"  (make-pathname :directory (append (pathname-directory *dojo-misc-file*) '("js")) :name "Rounded" :type "js"))
+(register-library-resource "dojotoolkit/claw/Form.js"  (make-pathname :directory (append (pathname-directory *dojo-misc-file*) '("js")) :name "Form" :type "js"))
+(register-library-resource "dojotoolkit/claw/Editor.js"  (make-pathname :directory (append (pathname-directory *dojo-misc-file*) '("js")) :name "Editor" :type "js"))

Added: trunk/main/dojo/src/packages.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/src/packages.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,185 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/src/packages.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :cl-user)
+
+(defpackage :claw-dojo
+  (:nicknames :dojo)
+  (:use :cl :claw :parenscript)
+  (:export :*dojo-directory-name*
+           :djuser-locale
+           :djwidget-dojo-type
+	   :djwidget-dojo-require
+           :djwidget
+	   :djwidget>
+           :djwidget-formal-parameters
+	   :djxcontent-pane
+	   :djxcontent-pane>
+	   :djbody
+	   :djbody>
+           ;;dijit namespace
+           :djbackground-iframe
+           :djbackground-iframe>
+           :djcolor-palette
+	   :djcolor-palette>
+           :djdialog
+	   :djdialog>
+           :djdialog-underlay
+	   :djdialog-underlay>
+           :djeditor
+	   :djeditor>
+           :djeditor-plugins-always-show-toolbar
+           :djeditor-plugins-always-show-toolbar>
+           :djeditor-plugins-enter-key-handling
+           :djeditor-plugins-enter-key-handling>
+           :djeditor-plugins-font-choice
+           :djeditor-plugins-font-choice>
+           :djeditor-plugins-link-dialog
+           :djeditor-plugins-link-dialog>
+           :djeditor-plugins-text-color
+           :djeditor-plugins-text-color>
+           :djeditor-plugins-toggle-dir
+           :djeditor-plugins-toggle-dir>
+           :djinline-edit-box
+	   :djinline-edit-box>
+           :djmenu
+	   :djmenu>
+           :djmenu-item
+	   :djmenu-item>
+           :djmenu-separator
+           :djmenu-separator>
+           :djpopup-menu-item
+	   :djpopup-menu-item>
+           :djprogress-bar
+           :djprogress-bar>
+           :djtitle-pane
+           :djtitle-pane>
+           :djtoolbar
+           :djtoolbar>
+           :djtoolbar-separator
+           :djtoolbar-separator>
+           :djtooltip
+           :djtooltip>
+           :djtooltip-dialog
+	   :djtooltip-dialog>
+           :djtree
+           :djtree>
+           ;;dijit.form namespace
+           :djbutton
+	   :djbutton>
+	   :djsubmit-button
+	   :djsubmit-button>
+           :djcheck-box
+	   :djcheck-box>
+           :djcombo-box
+	   :djcombo-box>
+           :djcombo-button
+	   :djcombo-button>
+           :djcurrency-text-box
+	   :djcurrency-text-box>
+           :djdate-text-box
+           :djdate-text-box>
+           :djcalendar
+           :djcalendar>
+           :djdrop-down-button
+	   :djdrop-down-button>
+           :djfiltering-select
+           :djfiltering-select>
+	   :djform
+	   :djform>
+           :djhorizontal-rule
+           :djhorizontal-rule>
+           :djhorizontal-rule-labels
+           :djhorizontal-rule-labels>
+           :djhorizontal-slider
+           :djhorizontal-slider>
+           :djmapped-text-box
+           :djmapped-text-box>
+           :djmulti-select
+           :djmulti-select>
+           :djnumber-spinner
+	   :djnumber-spinner>
+           :djnumber-text-box
+	   :djnumber-text-box>
+           :djradio-button
+           :djradio-button>
+           :djrange-bound-text-box
+           :djrange-bound-text-box>
+           :djsimple-textarea
+           :djsimple-textarea>
+           :djtextarea
+           :djtextarea>
+           :djtext-box
+	   :djtext-box>
+           :djtime-text-box
+           :djtime-text-box>
+           :djtoggle-button
+	   :djtoggle-button>
+           :djvalidation-text-box
+           :djvalidation-text-box>
+           :djvertical-rule
+           :djvertical-rule>
+           :djvertical-rule-labels
+           :djvertical-rule-labels>
+           :djvertical-slider
+           :djvertical-slider>
+	   :djaction-link
+	   :djaction-link>
+           :djtext-box-file
+	   :djtext-box-file>
+	   ;;dijit.layout namespace
+           :djaccordion-container
+           :djaccordion-container>
+           :djaccordion-pane
+           :djaccordion-pane>
+           :djborder-container
+           :djborder-container>
+           :djcontent-pane
+           :djcontent-pane>
+           :djlayout-container
+           :djlayout-container>
+           :djlink-pane
+           :djlink-pane>
+           :djsplit-container
+           :djsplit-container>
+	   :djstack-container
+           :djstack-container>
+           :djstack-controller
+           :djstack-controller>
+	   :djtab-container
+           :djtab-container>
+           :djtab-controller
+           :djtab-controller>
+           ;;claw namespace
+           :djfloating-content
+           :djfloating-content>
+           :djhard-link
+           :djhard-link>
+           :djrounded
+           :djrounded>))

Added: trunk/main/dojo/tests/ajax-test.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/tests/ajax-test.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,285 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/tests/ajax-test.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :claw-dojo-tests)
+
+(defgeneric display-btn (pobj))
+(defgeneric read-message (pobj))
+(defgeneric write-message (pobj value))
+
+
+(defclass ajax-page (page)
+  ((display-btn-p :initform nil
+                  :accessor ajax-page-display-btn-p)
+   (name :initform ""
+         :accessor ajax-page-name)
+   (surname :initform ""
+            :accessor ajax-page-surname)
+   (combo-message :initform ""
+                  :accessor ajax-page-country)
+   (cardinal-point :initform "NE"
+                   :accessor ajax-page-cardinal-point)
+   (lisper :initform nil
+           :accessor ajax-page-lisper)
+   (color :initform "red"
+           :accessor ajax-page-color)
+   (date :initform (local-time:now)
+           :accessor ajax-page-date)
+   (time :initform (local-time:now)
+         :accessor ajax-page-time)
+   (wallet :initform 50.25
+           :accessor ajax-page-wallet)
+   (year :initform 2000
+         :accessor ajax-page-year)
+   (file :initform nil
+         :accessor ajax-page-inputfile)))
+
+(defclass simpledjbutton (djbutton)
+  ()
+  (:metaclass metacomponent))
+
+(defclass ajax-exception-monitor (exception-monitor)
+  ()
+  (:metaclass metacomponent))
+
+(defmethod wcomponent-template ((obj ajax-exception-monitor))
+  (exception-monitor> :static-id (htcomponent-client-id obj)
+                      (let ((errors (validation-errors))
+                            (dialog-id (format nil "~aDialog" (htcomponent-client-id obj))))
+                        (div> :render-condition #'(lambda() errors)
+                          (list
+                           (djbutton> :id "id" :onclick (ps* `(.show (dijit.by-id ,dialog-id)))
+                                      "Validation errors")
+                           (style> (format nil "#~a .dijitError {border-color:#f3d118;background-color:#f9f7ba;color:red;}" dialog-id))
+                           (djdialog> :static-id dialog-id
+                                        ;:open "true"
+                                      :title "Validation errors"
+                                      (loop for (component-id reasons) on errors by #'cddr
+                                         collect (loop for reason in reasons
+                                                    collect (p> reason)))))))))
+
+(defmethod htcomponent-instance-initscript ((obj ajax-exception-monitor))
+  (let ((errors (validation-errors))
+        (dialog-id (format nil "~aDialog" (htcomponent-client-id obj))))
+    (when errors
+      (ps* `(let ((dialog (dijit.by-id ,dialog-id)))
+              (dojo.add-class (slot-value dialog 'container-node) "dijitError")
+              (.show dialog))))))
+
+
+(defmethod htcomponent-instance-initscript ((obj simpledjbutton))
+  (let ((id (htcomponent-client-id obj))
+        (pobj (htcomponent-page obj)))
+    (ps* `(dojo.connect (dijit.by-id ,id)
+                        "onClick"
+                        nil
+                        (lambda () (alert (+ "Hello "
+                                             ,(ajax-page-name pobj)
+                                             " "
+                                             ,(ajax-page-surname pobj)
+                                             " from "
+                                             ,(ajax-page-country pobj)
+                                             "!\\nYour preferred color is "
+                                             ,(ajax-page-color pobj)
+                                             "\\nDirection taken --> "
+                                             ,(ajax-page-cardinal-point pobj))))))))
+
+(defmethod display-btn ((pobj ajax-page))
+  (setf (ajax-page-display-btn-p pobj) t))
+
+(defvar *integet-translator* (make-instance 'translator-integer))
+
+(defmethod page-content ((pobj ajax-page))
+  (let ((dyna-content-id (generate-id "dynacontent"))
+        (spinner-id (generate-id "spinner"))
+        (djbutton-id (generate-id "djbutton"))
+        (path-file-mimetype (ajax-page-inputfile pobj)))
+    (site-template> :title "dojo ajax test page"
+                    (style> "table td {text-align: right; vertical-align: top;}
+td.left {text-align: left;}
+td p {margin: 0.25em;}
+.colorInput, .colorBox {float: left; position: relative; }
+.colorBox {display: block; margin-right: 10px; height: 1em; width: 1em; border: 1px solid gray;}")
+                    (p>
+                     (div> :static-id dyna-content-id
+                           (div> :render-condition #'(lambda () (ajax-page-display-btn-p pobj))
+                                 (simpledjbutton> :id djbutton-id (span> "Show  message"))
+                                 (div> :render-condition #'(lambda () path-file-mimetype)
+                                       :style "border: 1px solid gray;"
+                                       (third path-file-mimetype))))
+                     (div>
+                      (action-link> :id "alink"
+                                    :action 'display-btn
+                                    "display")
+                      "|"
+                      (djaction-link> :id "djlink"
+                                      :action 'display-btn
+                                      :update-id (list dyna-content-id)
+                                      "ajax display")
+                      (djform> :id "djform"
+                               :enctype "multipart/form-data"
+                               :ajax-form-p t
+                               :method "post"
+                               :action 'display-btn
+                               :update-id (list dyna-content-id)
+                               :on-before-submit (ps* `(.show (dijit.by-id ,spinner-id)))
+                               :on-xhr-finish (ps* `(.hide (dijit.by-id ,spinner-id)))
+                               (table>
+                                (tr>
+                                 (td> "Name")
+                                 (td> :class "left"
+                                      (djvalidation-text-box> :id "name"
+                                                  :label "Name"
+                                                  :required "true"
+                                                  :accessor 'ajax-page-name
+                                                  :validator #'(lambda (value)
+                                                                 (validate-required (page-current-component pobj) value)))))
+
+                                (tr>
+                                 (td> "Surname")
+                                 (td> :class "left"
+                                      (djtext-box> :id "surname"
+                                                  :label "Surname"
+                                                  :accessor 'ajax-page-surname
+                                                  :validator #'(lambda (value)
+                                                                 (validate-required (page-current-component pobj) value)))))
+                                (tr>
+                                 (td> "Country")
+                                 (td> :class "left"
+                                      (djcombo-box> :id "country"
+                                                   :accessor 'ajax-page-country
+                                                   :label "Country"
+                                                   :validator #'(lambda (value)
+                                                                  (validate-required (page-current-component pobj) value))
+                                                   (option> :value "FR" "France")
+                                                   (option> :value "IT" "Italy")
+                                                   (option> :value "US" "USA")
+                                                   (option> :value "ES" "Spain"))
+                                      (p>
+                                       "djcombo-box allow to insert even non expected values.")
+                                      (p> :style "margin-bottom: .75em;"
+                                       "The passed parameter value is the one typed")))
+                                (tr>
+                                 (td> "Cardinal point")
+                                 (td> :class "left"
+                                      (djfiltering-select> :id "cardinal"
+                                                   :accessor 'ajax-page-cardinal-point
+                                                   :label "Cardinal point"
+                                                   :validator #'(lambda (value)
+                                                                  (validate-required (page-current-component pobj) value))
+                                                   (option> :value "N" "North")
+                                                   (option> :value "NE" "North-East")
+                                                   (option> :value "E" "East")
+                                                   (option> :value "SE" "South-East")
+                                                   (option> :value "S" "South")
+                                                   (option> :value "SW" "South-West")
+                                                   (option> :value "W" "West")
+                                                   (option> :value "NW" "North-West"))
+                                      (p>
+                                       "djfiltring-select doesn't allow to insert non expected values.")
+                                      (p> :style "margin-bottom: .75em;"
+                                       "The value submitted with the form is the hidden value (ex: NE), not the displayed value a.k.a. label (ex: North-East)")))
+                                (tr>
+                                 (td> "Year")
+                                 (td> :class "left"
+                                      (djnumber-spinner> :id "year"
+                                                         :label "Year"
+                                                         :pattern "####"
+                                                         :constraints "{min:2000,max:2100}"
+                                                         :translator *integet-translator*
+                                                         :accessor 'ajax-page-year
+                                                         :validator #'(lambda (value)
+                                                                        (validate-required (page-current-component pobj) value)))))
+                                (tr>
+                                 (td> "Date")
+                                 (td> :class "left"
+                                      (djdate-text-box> :id "date"
+                                                         :label "Date"
+                                                         :accessor 'ajax-page-date)))
+                                (tr>
+                                 (td> "Time")
+                                 (td> :class "left"
+                                      (djtime-text-box> :id "time"
+                                                         :label "Time"
+                                                         :accessor 'ajax-page-time)))
+                                (tr>
+                                 (td> "Wallet")
+                                 (td> :class "left"
+                                      (djcurrency-text-box> :id "wallet"
+                                                         :label "Wallet"
+                                                         :currency "€"
+                                                         :accessor 'ajax-page-wallet)))
+                                (tr>
+                                 (td> "Lisper")
+                                 (td> :class "left"
+                                      (djcheck-box> :id "lisper"
+                                                   :label "Lisper"
+                                                   :translator *boolean-translator*
+                                                   :accessor 'ajax-page-lisper
+                                                   :value T
+                                                   :validator #'(lambda (value)
+                                                                  (validate-required (page-current-component pobj) value :message "You must be a lisper to submit data!")))))
+                               (tr>
+                                 (td> "Preferred color")
+                                 (td> :class "left"
+                                      (djradio-button> :id "color"
+                                                :class "colorInput"
+                                                :label "Color"
+                                                :accessor 'ajax-page-color
+                                                :value "red")
+                                      (span> :style "background: red;" :class "colorBox")
+                                      (djradio-button> :id "color"
+                                                :class "colorInput"
+                                                :label "Color"
+                                                :accessor 'ajax-page-color
+                                                :value "green")
+                                      (span> :style "background: green;" :class "colorBox")
+                                      (djradio-button> :id "color"
+                                                :class "colorInput"
+                                                :label "Color"
+                                                :accessor 'ajax-page-color
+                                                :value "blue")
+                                      (span> :style "background: blue;" :class "colorBox")))
+                               (tr>
+                                 (td> "Text file")
+                                 (td> :class "left"
+                                      (djtext-box-file> :id "inputFile"
+                                                        :label "File"
+                                                        :accessor 'ajax-page-inputfile))))
+                               (submit-link> :id "slink"
+                                             :action 'display-btn
+                                             "update link")
+                               (djsubmit-button> :id "submitButton" :value "Update")
+                               (ajax-exception-monitor> :id "exceptionMonitor"))
+                      (djfloating-content> :static-id spinner-id
+                                           (img> :alt "spinner"
+                                                 :src (format nil "~a/docroot/img/spinner.gif" (build-lisplet-location (current-lisplet))))))))))
+
+
+(lisplet-register-page-location *dojo-test-lisplet* 'ajax-page "ajax.html")
\ No newline at end of file

Added: trunk/main/dojo/tests/common.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/tests/common.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,56 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/tests/common.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :claw-dojo-tests)
+
+(defclass site-template (wcomponent)
+  ((title :initarg :title
+          :reader site-template-title)
+   (djconfig :initarg :djconfig
+             :reader site-template-djconfig))
+  (:metaclass metacomponent)
+  (:default-initargs :djconfig nil))
+
+(defmethod wcomponent-template ((o site-template))
+  (html>
+   (head>
+    ;;(meta> :HTTP-EQUIV "expires" :CONTENT "Wed, 26 Feb 2100 08:21:57 GMT")
+    (title> (site-template-title o))
+    (link> :href (format nil "~a/docroot/css/style.css" (build-lisplet-location (current-lisplet)))
+           :rel "stylesheet"
+           :type "text/css"))
+   (djbody> :is-debug "false"
+            :djconfig (site-template-djconfig o)
+            (p>
+             (a> :href "../test/index.html" "home")
+             (p>
+             " Current language \""
+             (djuser-locale) "\""))
+            (wcomponent-informal-parameters o)
+            (htcomponent-body o))))

Added: trunk/main/dojo/tests/djbutton-test.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/tests/djbutton-test.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,75 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/tests/djbutton-test.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :claw-dojo-tests)
+
+
+(defclass djbutton-page (page) ())
+
+(defmethod page-content ((o djbutton-page))
+  (site-template> :title "dojo buttons test page"
+		  (p>		   
+		   (djbutton> :id "djbutton" 
+			      (span> "djbutton"))
+		   (djdrop-down-button> :id "djddbutton" 
+                                        (span> "djdropdown-button")
+                                        (djmenu> :id "menu" 
+                                                 (djmenu-item> :id "menu"
+                                                               :iconclass "dijitEditorIcon dijitEditorIconCopy"
+                                                               "copy")
+                                                 (djmenu-item> :id "menu"
+                                                               :iconclass "dijitEditorIcon dijitEditorIconCut"
+                                                               "cut")
+                                                 (djmenu-item> :id "menu"
+                                                               :iconclass "dijitEditorIcon dijitEditorIconPaste"
+                                                               "paste")))
+		   (djcombo-button> :id "djComboButton" 
+				    :optionstitle "save options"
+				    :iconclass "plusBlockIcon"
+				    (span> "combo button")
+				    (djmenu> :id "menu"
+					     (djmenu-item> :id "menu"
+							   :iconClass "dijitEditorIcon dijitEditorIconSave"
+							   :onclick "alert('save')"
+							   "save")
+					     (djmenu-item> :id "menu"
+							   :iconClass "dijitEditorIcon dijitEditorIconSave"
+							   :onclick "alert('save as')"
+							   "save as")))
+		   (djtoggle-button> :id "djToggleButtonCheck"
+				     :iconclass "dijitCheckBoxIcon"
+				     :onchange "console.log('toggled button checked='+arguments[0]);"
+				     "Toggle me")
+		   (djtoggle-button> :id "djToggleButtonRadio"
+				     :iconclass "dijitRadioIcon"
+				     :onchange "console.log('toggled button checked='+arguments[0]);"
+				     "Toggle me"))))
+
+
+(lisplet-register-page-location *dojo-test-lisplet* 'djbutton-page "djbutton.html")
\ No newline at end of file

Added: trunk/main/dojo/tests/djcalendar-test.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/tests/djcalendar-test.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,87 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/tests/djcalendar-tests.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :claw-dojo-tests)
+
+(defgeneric djcalendar-page-null-action (page))
+
+(defclass djcalendar-page (page)
+  ((cal1 :initarg :cal1
+         :accessor djcalendar-page-cal1)
+   (cal2 :initarg :cal2
+         :accessor djcalendar-page-cal2)
+   (cal3 :initarg :cal3
+         :accessor djcalendar-page-cal3)
+   (cal4 :initarg :cal4
+         :accessor djcalendar-page-cal4)
+   (cal-local :initarg :cal-local
+              :accessor djcalendar-page-cal-local))
+  (:default-initargs :cal1 (local-time:now) :cal2 (local-time:now)
+                     :cal3 (local-time:now)
+                     :cal4 (local-time:now)
+                     :cal-local (local-time:now)))
+
+(defmethod djcalendar-page-null-action ((o djcalendar-page)))
+
+(defmethod page-content ((o djcalendar-page))
+  (let ((lang (djuser-locale))
+        (dates-container-id (generate-id "datesContainer")))
+    (site-template> :title "dojo calendar test page"
+                    :djconfig (format nil "extraLocale:['en-us','es-es', 'ar-sy', 'zh-cn', '~a']" lang)
+                    (djform> :id "theForm" :update-id (list dates-container-id)
+                             (div> :static-id dates-container-id
+                                 (p>
+                                  (h1> "en-en" " encoding")
+                                  (djdate-text-box> :id "cal" :lang "en-us"
+                                               :accessor 'djcalendar-page-cal1)
+                                  (span> (translator-value-type-to-string *date-translator-ymd* (djcalendar-page-cal1 o))))
+                                 (p>
+                                  (h1> "es-es" " encoding")
+                                  (djdate-text-box> :id "cal" :lang "es-es"
+                                               :accessor 'djcalendar-page-cal2)
+                                  (span> (translator-value-type-to-string *date-translator-ymd* (djcalendar-page-cal2 o))))
+                                 (p>
+                                  (h1> "zh-cn" " encoding")
+                                  (djdate-text-box> :id "cal" :lang "zh-cn"
+                                               :accessor 'djcalendar-page-cal3)
+                                  (span> (translator-value-type-to-string *date-translator-ymd* (djcalendar-page-cal3 o))))
+                                 (p>
+                                  (h1> "ar-sy" " encoding")
+                                  (djdate-text-box> :id "cal" :lang "ar-sy"
+                                               :accessor 'djcalendar-page-cal4)
+                                  (span> (translator-value-type-to-string *date-translator-ymd* (djcalendar-page-cal4 o))))
+                                 (p>
+                                  (h1> "Local encoding")
+                                  (djdate-text-box> :id "cal" :lang lang
+                                               :accessor 'djcalendar-page-cal-local)
+                                  (span> (translator-value-type-to-string *date-translator-ymd* (djcalendar-page-cal-local o)))))
+                             (p>
+                              (djsubmit-button> :id "submitDates" :value "Submit dates"))))))
+
+(lisplet-register-page-location *dojo-test-lisplet* 'djcalendar-page "djcalendar.html")
\ No newline at end of file

Added: trunk/main/dojo/tests/djcolorpalette-test.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/tests/djcolorpalette-test.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,51 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/tests/djcolorpalette-tests.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :claw-dojo-tests)
+
+
+(defclass djcolorpalette-page (page) ())
+
+(defmethod page-content ((o djcolorpalette-page))
+  (let ((dialog (djdialog> :id "dialog"
+			   :title "Color Palette!"
+			  (djcolor-palette>))))
+  (site-template> :title "dojo buttons test page"
+		  (p>
+		   (djbutton> :id "djbutton"
+			      :onclick (format nil "dijit.byId('~a').show()" (htcomponent-client-id dialog))
+			      (span> "show color paette dialog"))
+		   (djdropdown-button>
+		    (span> "tooltip dialog")
+		    (djtooltip-dialog> :id "dialog"
+			       :title "HELLO!"
+			       (djcolor-palette>)))
+		   dialog))))
+
+(lisplet-register-page-location *dojo-test-lisplet* 'djcolorpalette-page "djcolorpalette.html")
\ No newline at end of file

Added: trunk/main/dojo/tests/djdialog-test.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/tests/djdialog-test.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,67 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/tests/djdialog-test.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :claw-dojo-tests)
+
+
+(defclass djdialog-page (page) ())
+
+(defmethod page-content ((o djdialog-page))
+  (let ((dialog (djdialog> :id "dialog"
+			   :title "HELLO!"
+                           (span> ($> "hello world"))))
+        (no-title-dialog-id (generate-id "ntId"))
+        (lisplet-path (build-lisplet-location (current-lisplet))))
+    (site-template> :title "dojo buttons test page"
+                    (p>
+                     (djbutton> :id "djbutton"
+                                :onclick (format nil "dijit.byId('~a').show()"
+                                                 (htcomponent-client-id dialog))
+                                (span> "show dialog"))
+                     (djdrop-down-button> :id "ddButton"
+                      (span> "tooltip dialog")
+                      (djtooltip-dialog> :id "dialog"
+                                         :title "HELLO!"
+                                         (span> "hello world")))
+                     dialog)
+                    (p>
+                     (djrounded> :id "rounded"
+                                 :style "width: 130px;height: 1.5em"
+                                 :bg-img (format nil "~a/docroot/img/roundedbg.png" lisplet-path)
+                                 :bg-img-alt (format nil "~a/docroot/img/roundedbg.gif" lisplet-path)
+                                 (span> :style "font-weight: bold;" "Rounded box gg")))
+                    (p>
+                     (djbutton> :id "djbutton"
+                                :onclick (format nil "dijit.byId('~a').show()" no-title-dialog-id)
+                                "No title dialog")
+                     (djfloating-content> :static-id no-title-dialog-id
+                                          :style "background: transparent;"
+                                          (div> :style (format nil "height:60px;width:60px;background: url('~a/docroot/img/spinner.gif') 50% 50% no-repeat;" lisplet-path)))))))
+
+(lisplet-register-page-location *dojo-test-lisplet* 'djdialog-page "djdialog.html")
\ No newline at end of file

Added: trunk/main/dojo/tests/djeditor-test.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/tests/djeditor-test.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,135 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/tests/djeditor-test.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :claw-dojo-tests)
+
+
+(defclass djeditor-page (page)
+  ((text1 :initarg :text1
+          :accessor djeditor-page-text1)
+   (text2 :initarg :text2
+          :accessor djeditor-page-text2)
+   (text3 :initarg :text3
+          :accessor djeditor-page-text3)
+   (text4 :initarg :text4
+          :accessor djeditor-page-text4))
+  (:default-initargs :text1 "" :text2 ""
+                     :text3 "" :text4 ""))
+
+(defclass editor-dialog (djdialog)
+  ()
+  (:metaclass metacomponent))
+
+(defmethod htcomponent-instance-initscript ((editor-dialog editor-dialog))
+  (parenscript:ps* `(.show (dijit.by-id ,(htcomponent-client-id editor-dialog)))))
+
+(defclass result-text (wcomponent)
+  ((dialog-content :initarg :dialog-content
+                   :accessor dialog-content)
+   (style :initarg :style
+          :reader style))
+  (:metaclass metacomponent)
+  (:default-initargs :style "display:inline;line-height:normal;vertical-align:middle;padding:0pt 0.3em;"))
+
+
+(defmethod wcomponent-template ((obj result-text))
+  (let* ((dialog-id (generate-id "resultDialog"))
+         (dialog-content (dialog-content obj))
+         (render-content-function #'(lambda () (progn 
+                                                 (hunchentoot:log-message :info "~a::------->~a" (htcomponent-client-id obj) dialog-content)
+                                                 (and dialog-content
+                                                    (string-not-equal dialog-content ""))))))
+    (div> :static-id (htcomponent-client-id obj)
+          :style (style obj)
+          (wcomponent-informal-parameters obj)
+          (htcomponent-body obj)
+          (djbutton> :id "showDialog"
+                     :render-condition render-content-function
+                     :onclick (format nil "dijit.byId('~a').show()" dialog-id)
+                     "show text")
+          (editor-dialog> :render-condition render-content-function
+                          :static-id dialog-id
+                          (div> :style "height:370px;width: 800px;overflow:auto;border: 1px solid gray;padding: 0 .5em;"
+                                ($raw> dialog-content))
+                          (div> :style "text-align:center;margin-top: 1em;"
+                                (djbutton> :id "close"
+                                           :onclick (format nil "dijit.byId('~a').hide()" dialog-id)
+                                           (span> "Close")))))))
+
+(defmethod page-content ((o djeditor-page))
+  (let ((result-text1 (generate-id "resultText"))
+        (result-text2 (generate-id "resultText"))
+        (result-text3 (generate-id "resultText"))
+        (result-text4 (generate-id "resultText"))
+        (text1 (djeditor-page-text1 o))
+        (text2 (djeditor-page-text2 o))
+        (text3 (djeditor-page-text3 o))
+        (text4 (djeditor-page-text4 o)))
+    (site-template> :title "dojo editor test page"
+                    (djeditor-plugins-always-show-toolbar>)
+                    (djeditor-plugins-enter-key-handling>)
+                    (djeditor-plugins-font-choice>)
+                    (djeditor-plugins-link-dialog>)
+                    (djeditor-plugins-text-color>)
+                    (djeditor-plugins-toggle-dir>)
+                    (djform> :id "theForm"
+                             :ajax-form-p nil
+                             :update-id (list result-text1)
+                             (p> (djeditor> :id "editor"
+                                            :tag-name "div" :accessor 'djeditor-page-text1))
+                             (result-text> :static-id result-text1
+                                           :dialog-content text1
+                                           (djsubmit-button> :id "submitData" :value "Submit on normal form")))
+                    (djform> :id "theForm"
+                             :update-id (list result-text2)
+                             (p> (djeditor> :id "editor"
+                                            :extraPlugins "['dijit._editor.plugins.AlwaysShowToolbar']"
+                                            :accessor 'djeditor-page-text2))
+                             (result-text> :static-id result-text2
+                                           :dialog-content text2
+                                           (djsubmit-button> :id "submitData"
+                                                             :value "Submit on claw.Form")))
+                    (djform> :id "theForm"
+                             :update-id (list result-text3)
+                             (p> (djeditor> :id "editor"
+                                            :plugins "['bold','italic','|','createLink','foreColor','hiliteColor',{name:'dijit._editor.plugins.FontChoice', command:'fontName', generic:true},'fontSize','formatBlock','insertImage']"
+                                            :accessor 'djeditor-page-text3))
+                             (result-text> :static-id result-text3
+                                           :dialog-content text3
+                                           (csubmit> :id "submitData" :value "Standard submit")))
+                    (djform> :id "theForm"
+                             :update-id (list result-text4)
+                             (p> (djeditor> :id "editor"
+                                            :plugins "['bold','italic','|',{name:'dijit._editor.plugins.EnterKeyHandling'},{name:'dijit._editor.plugins.FontChoice', command:'fontName', custom:['Verdana','Myriad','Garamond','Apple Chancery','Hiragino Mincho Pro']}, {name:'dijit._editor.plugins.FontChoice', command:'fontSize', custom:[3,4,5]}]"
+                                            :accessor 'djeditor-page-text4))
+                             (result-text> :static-id result-text4
+                                           :dialog-content text4
+                                           (djsubmit-button> :id "submitData" :value "Submit"))))))
+
+(lisplet-register-page-location *dojo-test-lisplet* 'djeditor-page "djeditor.html")
\ No newline at end of file

Added: trunk/main/dojo/tests/djmenu-test.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/tests/djmenu-test.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,272 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/tests/djmenu-test.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :claw-dojo-tests)
+
+
+(defclass djmenu-page (page)
+  ((top-left :initform "top-left"
+             :accessor top-left)
+   (top-right :initform "top-right"
+              :accessor top-right)
+   (bottom-left :initform "bottom-left"
+                :accessor bottom-left)
+   (bottom-right :initform "bottom-right"
+                 :accessor bottom-right)
+   (text-area :initform "Hello there"
+              :accessor text-area)
+   (select-value :initform "1"
+                 :accessor select-value)))
+
+(defclass djmenu-page-menu (wcomponent)
+  ()
+  (:metaclass metacomponent)
+  (:default-initargs :empty t))
+
+(defmethod wcomponent-template ((obj djmenu-page-menu))
+  (let ((id (htcomponent-client-id obj)))
+    (djmenu> :static-id id
+             (wcomponent-informal-parameters obj)
+             (djmenu-item> :id "mi"
+                           :onClick "alert\('Hello world');"
+                           "Enabled Item")
+             (djmenu-item> :id "mi"
+                           :disabled "true"
+                           "Disabled Item")
+             (djmenu-separator> :id "ms")
+             (djmenu-item> :id "mi"
+                           :icon-class "dijitEditorIcon dijitEditorIconCut"
+                           :on-click "alert\('not actually cutting anything, just a test!')"
+                           "Cut")
+             (djmenu-item> :id "mi"
+                           :icon-class "dijitEditorIcon dijitEditorIconCopy"
+                           :on-click "alert\('not actually copying anything, just a test!')"
+                           "Copy")
+             (djmenu-item> :id "mi"
+                           :icon-class "dijitEditorIcon dijitEditorIconPaste"
+                           :on-click "alert\('not actually pasting anything, just a test!')"
+                           "Paste")
+             (djmenu-separator> :id "ms")
+             (djpopup-menu-item> :id "mpi"
+                                 (span> "Enabled Submenu")
+                                 (djmenu> :id "submenu2"
+                                          (djmenu-item> :id "mi"
+                                                        :on-click "alert\('Submenu 1!')"
+                                                        "Submenu Item One")
+                                          (djmenu-item> :id "mi"
+                                                        :on-click "alert\('Submenu 2!')"
+                                                        "Submenu Item Two")
+                                          (djpopup-menu-item> :id "pmi"
+                                                              (span> "Deeper Submenu")
+                                                              (djmenu> :id "submenu4"
+                                                                       (djmenu-item> :id "mi"
+                                                                                     :on-click "alert\('Sub-submenu 1!')"
+                                                                                     "Sub-sub-menu Item One")
+                                                                       (djmenu-item> :id "mi"
+                                                                                     :on-click "alert\('Sub-submenu 2!')"
+                                                                                     "Sub-sub-menu Item Two")))))
+             (djpopup-menu-item> :id "pmi"
+                                 :disabled "true"
+                                 (span> "Disabled Submenu")
+                                 (djmenu> :id "submenu3" :style "display: none;"
+                                          (djmenu-item> :id "mi"
+                                                        :on-click "alert\('Submenu 1!')"
+                                                        "Submenu Item One")
+                                          (djmenu-item> :id "mi"
+                                                        :on-click "alert\('Submenu 2!')"
+                                                        "Submenu Item Two")))
+             (djpopup-menu-item> :id "pmi"
+                                 (span> "Different popup")
+                                 (djcolor-palette> :id "cp")))))
+
+
+(defmethod page-content ((o djmenu-page))
+  (let ((input2-id (generate-id "input2")))
+    (site-template> :title "dojo menu test page"
+                    (script> :language "Javascript" :type "text/javascript"
+                             "function createMenu\() {
+            // create a menu programmatically
+            function fClick\() {alert\('clicked!')};
+
+            pMenu = new dijit.Menu\({targetNodeIds:['prog_menu'], id:'progMenu'});
+            pMenu.addChild\(new dijit.MenuItem\({label:'Programmatic Context Menu', disabled:true}));
+            pMenu.addChild\(new dijit.MenuSeparator\());
+            pMenu.addChild\(new dijit.MenuItem\({label:'Simple menu item', onClick:fClick}));
+            pMenu.addChild\(new dijit.MenuItem\({label:'Another menu item', onClick:fClick}));
+            pMenu.addChild\(new dijit.MenuItem\({label:'With an icon', iconClass:'dijitEditorIcon dijitEditorIconCut', onClick:fClick}));
+            var mItem = new dijit.MenuItem\({label:'dojo.event clicking'});
+            dojo.connect\(mItem, 'onClick', function\(){alert\('click! handler created via dojo.connect\()')});
+            pMenu.addChild\(mItem);
+
+            var pSubMenu = new dijit.Menu\({parentMenu:pMenu, id:'progSubMenu'});
+            pSubMenu.addChild\(new dijit.MenuItem\({label:'Submenu item', onClick:fClick}));
+            pSubMenu.addChild\(new dijit.MenuItem\({label:'Submenu item', onClick:fClick}));
+            pMenu.addChild\(new dijit.PopupMenuItem\({label:'Submenu', popup:pSubMenu, id:'progPopupMenuItem'}));
+
+            pMenu.startup\();
+
+            dojo.byId\('prog_menu').innerHTML=\"This div has a programmatic context menu on it that's different to the page menu.\";
+            dojo.byId\('createButton').disabled = true;
+            dojo.byId\('destroyButton').disabled = false;
+        }
+
+        function destroyMenu\(){
+        	pMenu.destroyRecursive\();
+            dojo.byId\('prog_menu').innerHTML='No programmatic menu on this div, should get page level menu.';
+            dojo.byId\('createButton').disabled = false;
+            dojo.byId\('destroyButton').disabled = true;
+        }")
+                    (djmenu-page-menu> :id "submenu1"
+                                       :context-menu-for-window "true"
+                                       :style "display: none;")
+                    (djmenu-page-menu> :id "leftClick"
+                                       :left-click-to-open "true"
+                                       :target-node-ids input2-id
+                                       :style "display: none;")
+                    (div> :style "padding: 1em"
+                          (h1> :class "testTitle" "Dijit Menu System Test")
+                          (h3> "Form")
+                          (cform> :id "theForm"
+                                  (cinput> :id "input1" :accessor 'top-left)
+                                  (p> :style "text-align:right"
+                                      "left click to open the menu for this input:"
+                                      (br>)
+                                      "Note: because of the window contextMenu, make sure you get"
+                                      (br>)
+                                      "the right menu by verifying the left"
+                                      (br>)
+                                      "click one starts with \"Left Click Menu\""
+                                      (br>)
+                                      "at the very top."
+                                      (cinput> :static-id input2-id :accessor 'top-right))
+                                  (ctextarea> :id "textarea" :accessor 'text-area)
+                                  (br>)
+                                  (cselect> :id "select"
+                                            :accessor 'select-value
+                                            (option> :value "1"
+                                                     (when (string= "1" (select-value o))
+                                                       (list :selected "selected"))
+                                                     "check if i")
+                                            (option> :value "2"
+                                                     (when (string= "2" (select-value o))
+                                                       (list :selected "selected"))
+                                                     "bleed through")
+                                            (option> :value "3"
+                                                     (when (string= "3" (select-value o))
+                                                       (list :selected "selected"))
+                                                     "on IE6"))
+                                  (button> :id "button"
+                                           "push me"))
+                          (div> :id "prog_menu"
+                                :style "border:1px solid blue; padding:10px; margin:20px 0;"
+                                "Click button below to create special menu on this div.")
+                          (button> :id "createButton"
+                                   :onclick "createMenu\();"
+                                   "create programmatic menu")
+                          (button> :id "destroyButton"
+                                   :onclick "destroyMenu\();"
+                                   :disabled "disabled"
+                                   "destroy programmatic menu")
+                          (div> :style "height:500px")
+                          (p> "\(this space intentionally left blank to aid testing with controls
+	at the bottom of the browser window)")
+                          (div> :style "height:500px")
+                          (cform> :id "theForm"
+                                  (cinput> :id "input3"
+                                           :accessor 'bottom-left)
+                                  (p> :style "text-align:right"
+                                      (cinput> :id "input4" :accessor 'bottom-right))
+                                  (p> "See also: "
+                                      (a> :href "djbutton.html"
+                                          "test Button")
+                                      "\(PopupMenu is used with DropDownButton and ComboButton)")
+                                  (h3> "Mouse opening tests")
+                                  (ul>
+                                   (li> "Right click on the client area of the page \(ctrl-click for Macintosh). Menu should open.")
+                                   (li> "Right click on each of the form controls above. Menu should open.")
+                                   (li> "Right click near the righthand window border. Menu should open to the left of the pointer.")
+                                   (li> "Right click near the bottom window border. Menu should open above the pointer."))
+                                  (h3> "Mouse hover tests")
+                                  (ul>
+                                   (li> "Hover over the first item with the pointer. Item should highlight and get focus.")
+                                   (li> "Hover over the second \(disabled) item. Item should highlight and get focus.")
+                                   (li> "Seperator items should not highlight on hover - no items should highlight in this case."))
+                                  (h3> "Mouse click tests")
+                                  (ul>
+                                   (li> "Click on the first menu item. Alert should open with the message \"Hello world\". The menu should dissapear.")
+                                   (li> "Click on the second menu item \(disabled). Should not do anything - focus should remain on the disabled item.")
+                                   (li> "Click anywhere outside the menu. Menu should close. Focus will be set by the browser based on where the user clicks."))
+                                  (h3> "Mouse submenu tests")
+                                  (ul>
+                                   (li> "Hover over the \"Enabled Submenu\" item. Item should highlight and then pop open a submenu after a short \(500ms) delay.")
+                                   (li> "Hover over any of the other menu items. Submenu should close immediately and deselect the submenu parent item. The newly hovered item should become selected.")
+                                   (li> "Hover over the \"Disabled Submenu\" item. Item should highlight, but no submenu should appear.")
+                                   (li> "Clicking on the \"Enabled Submenu\" item before the submenu has opened \(you'll have to be quick!) should immediatley open the submenu.")
+                                   (li> "Clicking on the \"Enabled Submenu\" item "
+                                        (i> "after")
+                                        " the submenu has opened should have no effect - the item is still selected and the submenu still open.")
+                                   (li> "Hover over submenu item 1. Should select it - the parent menu item should stay selected also.")
+                                   (li> "Hover over submenu item 2. Should select it - the parent menu item should stay selected also."))
+                                  (h3> "Keyboard opening tests")
+                                  (ul>
+                                   (li> "On Windows: press shift-f10 with focus on any of the form controls. Should open the menu.")
+                                   (li> "On Windows: press the context menu key \(located on the right of the space bar on North American keyboards) with focus on any of the form controls. Should open the menu.")
+                                   (li> "On Firefox on the Mac: press ctrl-space with focus on any of the form controls. Should open the menu."))
+                                  (h3> "Keyboard closing tests")
+                                  (ul>
+                                   (li> "Open the menu.")
+                                   (li> "Press tab. Should close the menu and return focus to where it was before the menu was opened.")
+                                   (li> "Open the menu.")
+                                   (li> "Press escape. Should close the menu and return focus to where it was before the menu was opened."))
+                                  (h3> "Keyboard navigation tests")
+                                  (ul>
+                                   (li> "Open the menu.")
+                                   (li> "Pressing up or down arrow should cycle focus through the items in that menu.")
+                                   (li> "Pressing enter or space should invoke the menu item.")
+                                   (li> "Disabled items receive focus but no action is taken upon pressing enter or space."))
+                                  (h3> "Keyboard submenu tests")
+                                  (ul>
+                                   (li> "Open the menu.")
+                                   (li> "The first item should become selected.")
+                                   (li> "Press the right arrow key. Nothing should happen.")
+                                   (li> "Press the left arrow key. Nothing should happen.")
+                                   (li> "Press the down arrow until \"Enabled Submenu\" is selected. The submenu should not appear.")
+                                   (li> "Press enter. The submenu should appear with the first item selected.")
+                                   (li> "Press escape. The submenu should vanish - \"Enabled Submenu\" should remain selected.")
+                                   (li> "Press the right arrow key. The submenu should appear with the first item selected.")
+                                   (li> "Press the right arrow key. Nothing should happen.")
+                                   (li> "Press the left arrow key. The submenu should close - \"Enabled Submenu\" should remain selected.")
+                                   (li> "Press the left arrow key. The menu should "
+                                        (i> "not")
+                                        " close and \"Enabled Submenu\" should remain selected.")
+                                   (li> "Press escape. The menu should close and focus should be returned to where it was before the menu was opened.")))))))
+
+
+
+(lisplet-register-page-location *dojo-test-lisplet* 'djmenu-page "djmenu.html")
\ No newline at end of file

Added: trunk/main/dojo/tests/djprogressbar-test.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/tests/djprogressbar-test.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,272 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/tests/djprogressbar-test.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :claw-dojo-tests)
+
+
+(defclass djmenu-page (page)
+  ((top-left :initform "top-left"
+             :accessor top-left)
+   (top-right :initform "top-right"
+              :accessor top-right)
+   (bottom-left :initform "bottom-left"
+                :accessor bottom-left)
+   (bottom-right :initform "bottom-right"
+                 :accessor bottom-right)
+   (text-area :initform "Hello there"
+              :accessor text-area)
+   (select-value :initform "1"
+                 :accessor select-value)))
+
+(defclass djmenu-page-menu (wcomponent)
+  ()
+  (:metaclass metacomponent)
+  (:default-initargs :empty t))
+
+(defmethod wcomponent-template ((obj djmenu-page-menu))
+  (let ((id (htcomponent-client-id obj)))
+    (djmenu> :static-id id
+             (wcomponent-informal-parameters obj)
+             (djmenu-item> :id "mi"
+                           :onClick "alert\('Hello world');"
+                           "Enabled Item")
+             (djmenu-item> :id "mi"
+                           :disabled "true"
+                           "Disabled Item")
+             (djmenu-separator> :id "ms")
+             (djmenu-item> :id "mi"
+                           :icon-class "dijitEditorIcon dijitEditorIconCut"
+                           :on-click "alert\('not actually cutting anything, just a test!')"
+                           "Cut")
+             (djmenu-item> :id "mi"
+                           :icon-class "dijitEditorIcon dijitEditorIconCopy"
+                           :on-click "alert\('not actually copying anything, just a test!')"
+                           "Copy")
+             (djmenu-item> :id "mi"
+                           :icon-class "dijitEditorIcon dijitEditorIconPaste"
+                           :on-click "alert\('not actually pasting anything, just a test!')"
+                           "Paste")
+             (djmenu-separator> :id "ms")
+             (djpopup-menu-item> :id "mpi"
+                                 (span> "Enabled Submenu")
+                                 (djmenu> :id "submenu2"
+                                          (djmenu-item> :id "mi"
+                                                        :on-click "alert\('Submenu 1!')"
+                                                        "Submenu Item One")
+                                          (djmenu-item> :id "mi"
+                                                        :on-click "alert\('Submenu 2!')"
+                                                        "Submenu Item Two")
+                                          (djpopup-menu-item> :id "pmi"
+                                                              (span> "Deeper Submenu")
+                                                              (djmenu> :id "submenu4"
+                                                                       (djmenu-item> :id "mi"
+                                                                                     :on-click "alert\('Sub-submenu 1!')"
+                                                                                     "Sub-sub-menu Item One")
+                                                                       (djmenu-item> :id "mi"
+                                                                                     :on-click "alert\('Sub-submenu 2!')"
+                                                                                     "Sub-sub-menu Item Two")))))
+             (djpopup-menu-item> :id "pmi"
+                                 :disabled "true"
+                                 (span> "Disabled Submenu")
+                                 (djmenu> :id "submenu3" :style "display: none;"
+                                          (djmenu-item> :id "mi"
+                                                        :on-click "alert\('Submenu 1!')"
+                                                        "Submenu Item One")
+                                          (djmenu-item> :id "mi"
+                                                        :on-click "alert\('Submenu 2!')"
+                                                        "Submenu Item Two")))
+             (djpopup-menu-item> :id "pmi"
+                                 (span> "Different popup")
+                                 (djcolor-palette> :id "cp")))))
+
+
+(defmethod page-content ((o djmenu-page))
+  (let ((input2-id (generate-id "input2")))
+    (site-template> :title "dojo menu test page"
+                    (script> :language "Javascript" :type "text/javascript"
+                             "function createMenu\() {
+            // create a menu programmatically
+            function fClick\() {alert\('clicked!')};
+
+            pMenu = new dijit.Menu\({targetNodeIds:['prog_menu'], id:'progMenu'});
+            pMenu.addChild\(new dijit.MenuItem\({label:'Programmatic Context Menu', disabled:true}));
+            pMenu.addChild\(new dijit.MenuSeparator\());
+            pMenu.addChild\(new dijit.MenuItem\({label:'Simple menu item', onClick:fClick}));
+            pMenu.addChild\(new dijit.MenuItem\({label:'Another menu item', onClick:fClick}));
+            pMenu.addChild\(new dijit.MenuItem\({label:'With an icon', iconClass:'dijitEditorIcon dijitEditorIconCut', onClick:fClick}));
+            var mItem = new dijit.MenuItem\({label:'dojo.event clicking'});
+            dojo.connect\(mItem, 'onClick', function\(){alert\('click! handler created via dojo.connect\()')});
+            pMenu.addChild\(mItem);
+
+            var pSubMenu = new dijit.Menu\({parentMenu:pMenu, id:'progSubMenu'});
+            pSubMenu.addChild\(new dijit.MenuItem\({label:'Submenu item', onClick:fClick}));
+            pSubMenu.addChild\(new dijit.MenuItem\({label:'Submenu item', onClick:fClick}));
+            pMenu.addChild\(new dijit.PopupMenuItem\({label:'Submenu', popup:pSubMenu, id:'progPopupMenuItem'}));
+
+            pMenu.startup\();
+
+            dojo.byId\('prog_menu').innerHTML=\"This div has a programmatic context menu on it that's different to the page menu.\";
+            dojo.byId\('createButton').disabled = true;
+            dojo.byId\('destroyButton').disabled = false;
+        }
+
+        function destroyMenu\(){
+        	pMenu.destroyRecursive\();
+            dojo.byId\('prog_menu').innerHTML='No programmatic menu on this div, should get page level menu.';
+            dojo.byId\('createButton').disabled = false;
+            dojo.byId\('destroyButton').disabled = true;
+        }")
+                    (djmenu-page-menu> :id "submenu1"
+                                       :context-menu-for-window "true"
+                                       :style "display: none;")
+                    (djmenu-page-menu> :id "leftClick"
+                                       :left-click-to-open "true"
+                                       :target-node-ids input2-id
+                                       :style "display: none;")
+                    (div> :style "padding: 1em"
+                          (h1> :class "testTitle" "Dijit Menu System Test")
+                          (h3> "Form")
+                          (cform> :id "theForm"
+                                  (cinput> :id "input1" :accessor 'top-left)
+                                  (p> :style "text-align:right"
+                                      "left click to open the menu for this input:"
+                                      (br>)
+                                      "Note: because of the window contextMenu, make sure you get"
+                                      (br>)
+                                      "the right menu by verifying the left"
+                                      (br>)
+                                      "click one starts with \"Left Click Menu\""
+                                      (br>)
+                                      "at the very top."
+                                      (cinput> :static-id input2-id :accessor 'top-right))
+                                  (ctextarea> :id "textarea" :accessor 'text-area)
+                                  (br>)
+                                  (cselect> :id "select"
+                                            :accessor 'select-value
+                                            (option> :value "1"
+                                                     (when (string= "1" (select-value o))
+                                                       (list :selected "selected"))
+                                                     "check if i")
+                                            (option> :value "2"
+                                                     (when (string= "2" (select-value o))
+                                                       (list :selected "selected"))
+                                                     "bleed through")
+                                            (option> :value "3"
+                                                     (when (string= "3" (select-value o))
+                                                       (list :selected "selected"))
+                                                     "on IE6"))
+                                  (button> :id "button"
+                                           "push me"))
+                          (div> :id "prog_menu"
+                                :style "border:1px solid blue; padding:10px; margin:20px 0;"
+                                "Click button below to create special menu on this div.")
+                          (button> :id "createButton"
+                                   :onclick "createMenu\();"
+                                   "create programmatic menu")
+                          (button> :id "destroyButton"
+                                   :onclick "destroyMenu\();"
+                                   :disabled "disabled"
+                                   "destroy programmatic menu")
+                          (div> :style "height:500px")
+                          (p> "\(this space intentionally left blank to aid testing with controls
+	at the bottom of the browser window)")
+                          (div> :style "height:500px")
+                          (cform> :id "theForm"
+                                  (cinput> :id "input3"
+                                           :accessor 'bottom-left)
+                                  (p> :style "text-align:right"
+                                      (cinput> :id "input4" :accessor 'bottom-right))
+                                  (p> "See also: "
+                                      (a> :href "djbutton.html"
+                                          "test Button")
+                                      "\(PopupMenu is used with DropDownButton and ComboButton)")
+                                  (h3> "Mouse opening tests")
+                                  (ul>
+                                   (li> "Right click on the client area of the page \(ctrl-click for Macintosh). Menu should open.")
+                                   (li> "Right click on each of the form controls above. Menu should open.")
+                                   (li> "Right click near the righthand window border. Menu should open to the left of the pointer.")
+                                   (li> "Right click near the bottom window border. Menu should open above the pointer."))
+                                  (h3> "Mouse hover tests")
+                                  (ul>
+                                   (li> "Hover over the first item with the pointer. Item should highlight and get focus.")
+                                   (li> "Hover over the second \(disabled) item. Item should highlight and get focus.")
+                                   (li> "Seperator items should not highlight on hover - no items should highlight in this case."))
+                                  (h3> "Mouse click tests")
+                                  (ul>
+                                   (li> "Click on the first menu item. Alert should open with the message \"Hello world\". The menu should dissapear.")
+                                   (li> "Click on the second menu item \(disabled). Should not do anything - focus should remain on the disabled item.")
+                                   (li> "Click anywhere outside the menu. Menu should close. Focus will be set by the browser based on where the user clicks."))
+                                  (h3> "Mouse submenu tests")
+                                  (ul>
+                                   (li> "Hover over the \"Enabled Submenu\" item. Item should highlight and then pop open a submenu after a short \(500ms) delay.")
+                                   (li> "Hover over any of the other menu items. Submenu should close immediately and deselect the submenu parent item. The newly hovered item should become selected.")
+                                   (li> "Hover over the \"Disabled Submenu\" item. Item should highlight, but no submenu should appear.")
+                                   (li> "Clicking on the \"Enabled Submenu\" item before the submenu has opened \(you'll have to be quick!) should immediatley open the submenu.")
+                                   (li> "Clicking on the \"Enabled Submenu\" item "
+                                        (i> "after")
+                                        " the submenu has opened should have no effect - the item is still selected and the submenu still open.")
+                                   (li> "Hover over submenu item 1. Should select it - the parent menu item should stay selected also.")
+                                   (li> "Hover over submenu item 2. Should select it - the parent menu item should stay selected also."))
+                                  (h3> "Keyboard opening tests")
+                                  (ul>
+                                   (li> "On Windows: press shift-f10 with focus on any of the form controls. Should open the menu.")
+                                   (li> "On Windows: press the context menu key \(located on the right of the space bar on North American keyboards) with focus on any of the form controls. Should open the menu.")
+                                   (li> "On Firefox on the Mac: press ctrl-space with focus on any of the form controls. Should open the menu."))
+                                  (h3> "Keyboard closing tests")
+                                  (ul>
+                                   (li> "Open the menu.")
+                                   (li> "Press tab. Should close the menu and return focus to where it was before the menu was opened.")
+                                   (li> "Open the menu.")
+                                   (li> "Press escape. Should close the menu and return focus to where it was before the menu was opened."))
+                                  (h3> "Keyboard navigation tests")
+                                  (ul>
+                                   (li> "Open the menu.")
+                                   (li> "Pressing up or down arrow should cycle focus through the items in that menu.")
+                                   (li> "Pressing enter or space should invoke the menu item.")
+                                   (li> "Disabled items receive focus but no action is taken upon pressing enter or space."))
+                                  (h3> "Keyboard submenu tests")
+                                  (ul>
+                                   (li> "Open the menu.")
+                                   (li> "The first item should become selected.")
+                                   (li> "Press the right arrow key. Nothing should happen.")
+                                   (li> "Press the left arrow key. Nothing should happen.")
+                                   (li> "Press the down arrow until \"Enabled Submenu\" is selected. The submenu should not appear.")
+                                   (li> "Press enter. The submenu should appear with the first item selected.")
+                                   (li> "Press escape. The submenu should vanish - \"Enabled Submenu\" should remain selected.")
+                                   (li> "Press the right arrow key. The submenu should appear with the first item selected.")
+                                   (li> "Press the right arrow key. Nothing should happen.")
+                                   (li> "Press the left arrow key. The submenu should close - \"Enabled Submenu\" should remain selected.")
+                                   (li> "Press the left arrow key. The menu should "
+                                        (i> "not")
+                                        " close and \"Enabled Submenu\" should remain selected.")
+                                   (li> "Press escape. The menu should close and focus should be returned to where it was before the menu was opened.")))))))
+
+
+
+(lisplet-register-page-location *dojo-test-lisplet* 'djmenu-page "djmenu.html")
\ No newline at end of file

Added: trunk/main/dojo/tests/docroot/css/style.css
==============================================================================
--- (empty file)
+++ trunk/main/dojo/tests/docroot/css/style.css	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,61 @@
+.Rounded {
+    display: table-cell;
+ 	position:relative;
+ 	margin:0px auto;
+ 	min-width: 10px;
+	max-width:1000px;
+ 	z-index:1;
+ 	margin-left:5px;
+ 	margin-top: 3px;
+}
+ 
+.Rounded .RoundedContent,
+.Rounded .RoundedTop,
+.Rounded .RoundedBottom,
+.Rounded .RoundedBottom div {
+ 	background:transparent url('../img/roundedbg.png') no-repeat top right;
+ 	_background:transparent url('../img/roundedbg.gif') no-repeat top right;
+}
+ 
+.Rounded .RoundedContent {
+ 	position:relative;
+ 	zoom:1;
+ 	_overflow-y:hidden;        
+ 	padding:5px 10px 0px 5px;
+        margin: 0 0 0 0;
+}
+ 
+.Rounded .RoundedTop {
+	position:absolute;
+ 	left:0px;
+ 	top:0px;
+ 	width:5px;
+ 	margin-left:-5px;
+ 	height:100%;
+ 	_height:1000px;
+ 	background-position:top left;
+}
+ 
+.Rounded .RoundedBottom,
+.Rounded .RoundedBottom div {
+ 	height:7px;
+ 	font-size:1px;
+}
+ 
+.Rounded .RoundedBottom {
+ 	background-position:bottom right;
+ 	position:relative;
+ 	width:100%;
+ 	clear: both;
+ 	margin-left: 0px;
+ 	margin-right: 0px;
+ 	padding: 0;
+	display: table;
+}
+ 
+.Rounded .RoundedBottom div {
+ 	position:relative;
+ 	width:5px;
+ 	margin-left:-5px;
+ 	background-position:bottom left;
+}

Added: trunk/main/dojo/tests/docroot/img/roundedbg.gif
==============================================================================
Binary file. No diff available.

Added: trunk/main/dojo/tests/docroot/img/roundedbg.png
==============================================================================
Binary file. No diff available.

Added: trunk/main/dojo/tests/docroot/img/spinner.gif
==============================================================================
Binary file. No diff available.

Added: trunk/main/dojo/tests/header-info-page.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/tests/header-info-page.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,47 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/tests/header-info-page.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :claw-dojo-tests)
+
+
+(defclass header-info-page (page) ())
+
+(defmethod page-content ((o header-info-page))  
+  (let ((header-props (headers-in)))
+    (site-template> :title "Header info page"
+                    (p> :id "p"
+                        (table>
+                         (tr> (td> :colspan "2" "Header info"))
+                         (loop for key-val in header-props 
+                            collect (tr> 
+                                     (td> (format nil "~a" (car key-val))
+                                          (td> (format nil "~a" (cdr key-val)))))))))))
+
+(lisplet-register-page-location *dojo-test-lisplet* 'header-info-page "info.html")
+		   

Added: trunk/main/dojo/tests/index.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/tests/index.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,52 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/tests/index.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :claw-dojo-tests)
+
+
+(defclass index-page (page) ())
+
+(defmethod page-content ((o index-page))  
+  (site-template> :title "Home test page"
+		  (p> :id "p"
+		      (ul>
+		       (li> (a> :href "realm.html" "realm on test"))
+                       (li> (a> :href "info.html" "HTTP Header info"))
+		       (li> (a> :href "../test2/realm.html" "realm on test2"))
+		       (li> (a> :href "djbutton.html" "dojo buttons integration test"))
+		       (li> (a> :href "djdialog.html" "dojo dialog integration test"))
+		       (li> (a> :href "djcolorpalette.html" "dojo color palette integration test"))
+		       (li> (a> :href "djeditor.html" "dojo editor integration test"))
+		       (li> (a> :href "djevent.html" "dojo event integration test"))
+		       (li> (a> :href "ajax.html" "dojo ajax test"))
+                       (li> (a> :href "djcalendar.html" "dojo calendar test"))
+                       (li> (a> :href "slider.html" "dojo slider test"))
+                       (li> (a> :href "djmenu.html" "dojo menu test"))))))
+		   
+(lisplet-register-page-location *dojo-test-lisplet* 'index-page "index.html" :welcome-page-p t)
\ No newline at end of file

Added: trunk/main/dojo/tests/main.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/tests/main.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,87 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/tests/main.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :claw-dojo-tests)
+
+(setf hunchentoot:*default-content-type* "text/html; charset=UTF-8")
+
+(defvar *main-file* (load-time-value
+                     (or #.*compile-file-pathname* *load-pathname*)))
+
+(defvar *dojo-test-lisplet*)
+(defvar *dojo-test-lisplet2*)
+(setf *dojo-test-lisplet* (make-instance 'lisplet :realm "test1" :base-path "/test"))
+(setf *dojo-test-lisplet2* (make-instance 'lisplet :realm "test2" :base-path "/test2"))
+
+(defparameter *clawserver* (make-instance 'clawserver 
+                                          :port 4242 
+                                          :mod-lisp-p nil
+                                          :base-path "/claw"))
+
+;;;(defparameter *clawserver* (make-instance 'clawserver :port 4242 :sslport 4445 :base-path "/claw"
+;;;					:ssl-certificate-file #P"/home/kiuma/pem/cacert.pem" 
+;;;					:ssl-privatekey-file #P"/home/kiuma/pem/privkey.pem"))
+
+(clawserver-register-lisplet *clawserver* *dojo-test-lisplet*)
+(clawserver-register-lisplet *clawserver* *dojo-test-lisplet2*)
+
+(defun test-image-file () 
+  (make-pathname :directory (append (pathname-directory *main-file*) '("img")) :name "matrix" :type "jpg"))
+
+(let ((path (make-pathname :directory (append (pathname-directory *main-file*) '("docroot")))))
+  (lisplet-register-resource-location *dojo-test-lisplet*
+                                      path 
+                                      "docroot/")
+  (lisplet-register-resource-location *dojo-test-lisplet2*
+                                      path 
+                                      "docroot/"))
+
+(defun djstart ()
+  (clawserver-start *clawserver*)
+  *clawserver*)
+
+(defun djstop ()
+  (clawserver-stop *clawserver*)
+  *clawserver*)
+
+(defun debug-mode ()
+  (setf hunchentoot:*catch-errors-p* nil
+        hunchentoot::*log-lisp-backtraces-p* t
+        hunchentoot::*log-lisp-errors-p* t
+        hunchentoot::*log-lisp-warnings-p* t
+        hunchentoot::*show-lisp-errors-p* t
+        hunchentoot::*show-lisp-backtraces-p* t))
+
+(defun production-mode ()
+  (setf hunchentoot:*catch-errors-p* t
+        hunchentoot::*log-lisp-backtraces-p* nil
+        hunchentoot::*log-lisp-errors-p* t
+        hunchentoot::*log-lisp-warnings-p* t
+        hunchentoot::*show-lisp-errors-p* nil
+        hunchentoot::*show-lisp-backtraces-p* nil))
\ No newline at end of file

Added: trunk/main/dojo/tests/packages.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/tests/packages.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,38 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/tests/packages.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :cl-user)
+
+(defpackage :claw-dojo-tests
+  (:nicknames :dojo-tests)
+  (:use :cl :hunchentoot :claw :dojo :parenscript)
+  (:export :djstart
+	   :djstop
+           :debug-mode
+           :production-mode))
\ No newline at end of file

Added: trunk/main/dojo/tests/realm.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/tests/realm.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,59 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/tests/realm.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :claw-dojo-tests)
+
+
+(defclass realm-page (page) ())
+
+(defmethod page-content ((o realm-page))  
+  (when (null hunchentoot:*session*)     
+    (claw-start-session))
+  (unless (session-value 'RND-NUMBER)
+    (setf (session-value 'RND-NUMBER) (random 1000)))
+  (site-template> :title "Realm test page"		  			
+		  (p>
+		   "session"			 
+		   (ul>
+		    (li> (a> :href "http://www.gentoo.org" :target "gentoo" 
+			     "gentoo"))
+		    (li> (a> :href "../test/realm.html" :target "clwo1" 
+			     "realm on lisplet 'test'"))
+		    (li> (a> :href "../test2/realm.html" :target "clwo2" 
+			       "realm on lisplet 'test2'"))
+		    (li> "Rnd number value: " (format nil "~d" (session-value 'RND-NUMBER)))
+		    (li> "Remote Addr: " (session-remote-addr  *session*))
+		    (li> "User agent: " (session-user-agent *session*))
+		    (li> "Lisplet Realm: " (current-realm))
+		    (li> "Session Realm: " (session-realm *session*))
+		    (li> "Session value: " (format nil "~a" (hunchentoot::session-string *session*)))
+		    (li> "Request Realm: " (hunchentoot::realm *request*))))))
+
+(lisplet-register-page-location *dojo-test-lisplet* 'realm-page "realm.html")
+(lisplet-register-page-location *dojo-test-lisplet2* 'realm-page "realm.html")

Added: trunk/main/dojo/tests/slider-test.lisp
==============================================================================
--- (empty file)
+++ trunk/main/dojo/tests/slider-test.lisp	Sat Jun 14 02:00:26 2008
@@ -0,0 +1,129 @@
+;;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-
+;;; $Header: dojo/tests/slider-test.lisp $
+
+;;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+
+;;;   * Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+
+;;;   * Redistributions in binary form must reproduce the above
+;;;     copyright notice, this list of conditions and the following
+;;;     disclaimer in the documentation and/or other materials
+;;;     provided with the distribution.
+
+;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+;;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+;;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+;;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+;;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+;;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(in-package :claw-dojo-tests)
+
+(defgeneric slide-page-null-action (slider-page))
+
+(defclass slider-page (page) 
+  ((hval :initform 10
+         :accessor slider-page-hval)
+   (vval :initform 50
+         :accessor slider-page-vval)
+   (message-content :initform ""
+                    :accessor slider-page-message-content)))
+
+(defmethod slide-page-null-action ((slider-page slider-page))
+  (setf (slider-page-message-content slider-page)
+        (div> :style "border: 1px solid gray;"
+              (format nil "Sent djhorizontal-slider value: ~a" (slider-page-hval slider-page))
+              (br>)
+              (format nil "Sent djvertical-slider value: ~a" (slider-page-vval slider-page)))))
+  
+(defmethod page-content ((pobj slider-page))
+  (let ((hs-content-id (generate-id "content"))
+        (vs-content-id (generate-id "content")))
+    (site-template> :title "dojo slider test page"                    
+                    (h1> :class "testTitle" "Slider")
+                    "Also try using the arrow keys, buttons, or clicking on the progress bar to move the slider."
+                    (br>)
+                    (cform> :id "djform" 
+                            :action 'slide-page-null-action
+                            (br>)
+                            "initial value=10, min=0, max=100, pageIncrement=100, onChange event triggers span innerHTML change immediately"
+                            (br>)
+                            (djhorizontal-slider> :id "slider1"
+                                                  :onChange (parenscript:ps* `(setf (slot-value (dojo.by-id ,hs-content-id) 'inner-H-T-M-L)
+                                                                                    (dojo.number.format (/ (aref arguments 0) 100) 
+                                                                                                        (create :places 1
+                                                                                                                :pattern "#%"))))
+                                                  :accessor 'slider-page-hval
+                                                  :maximum 100
+                                                  :minimum 0
+                                                  :page-increment 100
+                                                  :show-buttons "false"
+                                                  :intermediate-changes "true"
+                                                  :style "width:50%; height: 20px;"
+                                                  (djhorizontal-rule-labels> :container "topDecoration"
+                                                                             :style "height:1.2em;font-size:75%;color:gray;"
+                                                                             :count 6
+                                                                             :numeric-margin 1)
+                                                  (djhorizontal-rule> :container "topDecoration"
+                                                                      :style "height:5px;"
+                                                                      :count 6)
+                                                  (djhorizontal-rule> :container "bottomDecoration"
+                                                                      :style "height:5px;"
+                                                                      :count 5)
+                                                  (djhorizontal-rule-labels> :container "bottomDecoration"
+                                                                             :style "height:1em;font-size:75%;color:gray;"                                                                             
+                                                                             (li> "lowest")
+                                                                             (li> "normal")
+                                                                             (li> "highest")))
+                            (p> 
+                             (span> :style="font-weight: bolder;" "djhorizontal-slider current value:")(span> :static-id hs-content-id "--"))
+
+                            (br>)
+                            "initial value=10, min=0, max=100, pageIncrement=100, onChange event triggers span innerHTML change immediately"
+                            (br>)
+                            (djvertical-slider> :id "slider2"
+                                                :onChange (parenscript:ps* `(setf (slot-value (dojo.by-id ,vs-content-id) 'inner-H-T-M-L)
+                                                                                  (dojo.number.format (/ (aref arguments 0) 100) 
+                                                                                                      (create :places 1
+                                                                                                              :pattern "#%"))))
+                                                :accessor 'slider-page-vval
+                                                :maximum 100
+                                                :minimum 0
+                                                :page-increment 100
+                                                :discrete-values 11
+                                                :style "height: 300px;"
+                                                (djvertical-rule-labels> :container "leftDecoration"
+                                                                         :style "width:2em;color:gray;"
+                                                                         (li> "0")
+                                                                         (li> "100"))
+                                                (djvertical-rule> :container "leftDecoration"
+                                                                  :style "width:5px;"
+                                                                  :count 11
+                                                                  :rule-style "border-color:gray;")
+                                                (djvertical-rule> :container "rightDecoration"
+                                                                  :style "width:5px;"
+                                                                  :count 11
+                                                                  :rule-style "border-color:gray;")
+                                                (djvertical-rule-labels> :container "rightDecoration"
+                                                                         :style "width:2em;color:gray;"
+                                                                         :count 6
+                                                                         :numeric-margin 1
+                                                                         :maximum 100
+                                                                         :constraints "{pattern:'#'}"))
+                            (p> 
+                             (span> :style="font-weight: bolder;" "djvertical-slider current value:")(span> :static-id vs-content-id "--"))
+                            (djsubmit-button> :id "submit" :value "Submit"))
+                    (slider-page-message-content pobj))))
+
+
+(lisplet-register-page-location *dojo-test-lisplet* 'slider-page "slider.html")
\ No newline at end of file



More information about the Claw-cvs mailing list