Author: achiumenti
Date: Sat Dec 13 14:15:57 2008
New Revision: 149
Log:
css component injection bugfix
Modified:
trunk/main/claw-html/claw-html.asd
trunk/main/claw-html/src/packages.lisp
trunk/main/claw-html/src/tags.lisp
Modified: trunk/main/claw-html/claw-html.asd
==============================================================================
--- trunk/main/claw-html/claw-html.asd (original)
+++ trunk/main/claw-html/claw-html.asd Sat Dec 13 14:15:57 2008
@@ -34,17 +34,8 @@
:depends-on (:closer-mop :local-time :parenscript :cl-ppcre :split-sequence)
:components ((:module src
:components ((:file "packages")
- ;(:file "mime-type" :depends-on ("packages"))
- ;(:file "misc" :depends-on ("mime-type"))
- ;:(:file "i18n" :depends-on ("packages"))
- ;(:file "locales" :depends-on ("i18n"))
- ;(:file "connector" :depends-on ("misc"))
- ;(:file "logger" :depends-on ("misc"))
- ;(:file "session-manager" :depends-on ("misc"))
(:file "meta" :depends-on ("packages"))
- (:file "tags" :depends-on ("packages" "meta"))
+ (:file "tags" :depends-on ("packages" "meta"))
(:file "components" :depends-on ("tags" "meta"))
(:file "validators" :depends-on ("components"))
- (:file "translators" :depends-on ("validators"))))))
- ;(:file "server" :depends-on ("components"))
- ;(:file "lisplet" :depends-on ("server"))))))
+ (:file "translators" :depends-on ("validators"))))))
\ No newline at end of file
Modified: trunk/main/claw-html/src/packages.lisp
==============================================================================
--- trunk/main/claw-html/src/packages.lisp (original)
+++ trunk/main/claw-html/src/packages.lisp Sat Dec 13 14:15:57 2008
@@ -46,7 +46,6 @@
#:error-page
#:render-error-page
- ;#:duplicate-back-slashes
#:attribute-value
#:build-tagf
#:page
@@ -59,6 +58,7 @@
#:page-stylesheet-files
#:page-class-initscripts
#:page-instance-initscripts
+ #:page-initstyles
#:page-current-component
#:page-body-init-scripts
#:htcomponent
@@ -71,6 +71,7 @@
#:htcomponent-stylesheet-files
#:htcomponent-class-initscripts
#:htcomponent-instance-initscript
+ #:htcomponent-initstyles
#:tag
#:tag-name
#:tag-attributes
Modified: trunk/main/claw-html/src/tags.lisp
==============================================================================
--- trunk/main/claw-html/src/tags.lisp (original)
+++ trunk/main/claw-html/src/tags.lisp Sat Dec 13 14:15:57 2008
@@ -111,7 +111,9 @@
(defgeneric page-body-init-scripts (page)
(:documentation "During the render phase wcomponent instances inject their initialization scripts (javascript)
that will be evaluated when the page has been loaded.
-This internal method is called to render these scripts.
+This internal method is called to render these scripts. The result is used by the HTBODY-INIT-SCRIPTS-TAG method
+that generates a <script> tag that will be appended at the end of the <body> tag (generated by the BODY> function
+tag.
- PAGE is the page instance that must be given"))
(defgeneric htbody-init-scripts-tag (page &optional on-load)
@@ -391,6 +393,8 @@
:accessor page-class-initscripts :documentation "Holds component class javascript directives injected by components during the request cycle")
(instancee-initscripts :initarg :instance-initscripts
:accessor page-instance-initscripts :documentation "Holds component instance javascript directives injected by components during the request cycle")
+ (initstyles :initarg :initstyles
+ :accessor page-initstyles :documentation "Holds component class and instance stylesheet directives injected by components during the request cycle")
(indent :initarg :indent
:accessor page-indent :documentation "Determine if the output must be indented or not")
(tabulator :initarg :tabulator
@@ -400,7 +404,7 @@
(current-form :initform nil
:accessor page-current-form :documentation "During the rewinding phase the form or the action-link whose action has been fired")
(doc-type :initarg :doc-type
- :accessor page-doc-type :documentation "The DOCUMENT TYPE of the page (default to HTML 4.01 STRICT)")
+ :accessor page-doc-type :documentation "The DOCUMENT TYPE of the page (default to HTML 4.01 Transitional)")
(lasttag :initform nil
:accessor page-lasttag :documentation "Last rendered tag. Needed for page output rendering")
(json-component-count :initarg :json-component-count
@@ -434,10 +438,11 @@
:stylesheet-files nil
:class-initscripts nil
:instance-initscripts nil
+ :initstyles nil
:indent t
:tabulator 0
:xmloutput nil
- :doc-type *html-4.01-strict*
+ :doc-type *html-4.01-transitional*
:request-parameters nil
:mime-type "text/html")
(:documentation "A page object holds claw components to be rendered") )
@@ -480,7 +485,9 @@
(class-initscripts :initarg :class-initscripts
:accessor htcomponent-class-initscripts :documentation "Page injectable javascript class derectives")
(instance-initscript :initarg :instance-initscript
- :accessor htcomponent-instance-initscript :documentation "Page injectable javascript instance derectives"))
+ :accessor htcomponent-instance-initscript :documentation "Page injectable javascript instance derectives")
+ (initstyles :initarg :initstyles
+ :accessor htcomponent-initstyles :documentation "Component injectable css derectives"))
(:default-initargs :page nil
:body nil
:json-render-on-validation-errors-p nil
@@ -491,7 +498,8 @@
:script-files nil
:stylesheet-files nil
:class-initscripts nil
- :instance-initscript nil)
+ :instance-initscript nil
+ :initstyles nil)
(:documentation "Base class for all other claw components"))
(defclass tag (htcomponent)
@@ -605,8 +613,7 @@
(when parameters
(setf retval (gethash (string-upcase name) parameters))
(if (or (null retval) as-list)
- (progn
- retval)
+ retval
(first retval)))))
(defmethod page-format ((page page) str &rest rest)
@@ -637,11 +644,10 @@
(or (page-req-parameter page "jsonSuffix" nil) ""))
(defmethod page-init ((page page))
- (progn
- (reset-request-id-table-map)
- (setf (page-can-print page) (null (page-json-id-list page)))
- (reset-request-id-table-map)
- (setf (page-tabulator page) 0)))
+ (reset-request-id-table-map)
+ (setf (page-can-print page) (null (page-json-id-list page)))
+ (reset-request-id-table-map)
+ (setf (page-tabulator page) 0))
(defmethod page-render-headings ((page page))
(let* ((jsonp (page-json-id-list page))
@@ -679,44 +685,41 @@
(*validation-errors* nil)
(*validation-compliances* nil)
(jsonp (page-json-id-list page)))
- (progn
- (page-init page)
- (page-before-render page)
- (when (page-req-parameter page *rewind-parameter*)
- (htcomponent-rewind (page-content page) page))
- (page-init page)
- (htcomponent-prerender (page-content page) page) ;Here we need a fresh new body!!!
- (page-render-headings page)
- (page-init page)
- (when jsonp
- (page-format-raw page (page-json-prefix page))
- (page-format-raw page "{components:{"))
- (htcomponent-render (page-content page) page) ;Here we need a fresh new body!!!
- (when jsonp
- (page-format-raw page "},classInjections:\"")
- (setf (page-can-print page) t
- (page-injection-writing-p page) t)
- (dolist (injection (page-init-injections page))
- (when injection
- (htcomponent-render injection page)))
- (page-format-raw page "\",instanceInjections:\"")
- (let ((init-scripts (htbody-init-scripts-tag page)))
- (when init-scripts
- (htcomponent-render init-scripts page)))
- (page-format-raw page "\",errors:")
- (page-format-raw page (json-validation-errors))
- (page-format-raw page ",valid:")
- (page-format-raw page (json-validation-compliances))
- (page-format-raw page "}")
- (page-format-raw page (page-json-suffix page))))))
+ (page-init page)
+ (page-before-render page)
+ (when (page-req-parameter page *rewind-parameter*)
+ (htcomponent-rewind (page-content page) page))
+ (page-init page)
+ (htcomponent-prerender (page-content page) page) ;Here we need a fresh new body!!!
+ (page-render-headings page)
+ (page-init page)
+ (when jsonp
+ (page-format-raw page (page-json-prefix page))
+ (page-format-raw page "{components:{"))
+ (htcomponent-render (page-content page) page) ;Here we need a fresh new body!!!
+ (when jsonp
+ (page-format-raw page "},classInjections:\"")
+ (setf (page-can-print page) t
+ (page-injection-writing-p page) t)
+ (dolist (injection (page-init-injections page))
+ (when injection
+ (htcomponent-render injection page)))
+ (page-format-raw page "\",instanceInjections:\"")
+ (let ((init-scripts (htbody-init-scripts-tag page)))
+ (when init-scripts
+ (htcomponent-render init-scripts page)))
+ (page-format-raw page "\",errors:")
+ (page-format-raw page (json-validation-errors))
+ (page-format-raw page ",valid:")
+ (page-format-raw page (json-validation-compliances))
+ (page-format-raw page "}")
+ (page-format-raw page (page-json-suffix page)))))
(defmethod page-body-init-scripts ((page page))
(let ((js-body ""))
(dolist (current-js (reverse (page-instance-initscripts page)))
(setf js-body (format nil "~a~%~a~%" js-body current-js)))
- (if (string= "" js-body)
- js-body
- (format nil "~a" js-body))))
+ (format nil "~@[~a~]" js-body)))
(defmethod page-print-tabulation ((page page))
(let ((tabulator (page-tabulator page))
@@ -733,11 +736,16 @@
(defmethod page-init-injections ((page page))
(let ((tag-list)
- (class-init-scripts ""))
+ (class-init-scripts "")
+ (init-styles ""))
(dolist (script (reverse (page-class-initscripts page)))
(setf class-init-scripts (format nil "~a~%~a"
class-init-scripts
script)))
+ (dolist (style (reverse (page-initstyles page)))
+ (setf init-styles (format nil "~a~%~a"
+ init-styles
+ style)))
(unless (string= "" class-init-scripts)
(let ((current-js (script> :type "text/javascript")))
(setf (htcomponent-body current-js) class-init-scripts)
@@ -754,7 +762,10 @@
(let ((current-css (link> :rel "stylesheet" :type "text/css" :href "")))
(setf (getf (htcomponent-attributes current-css) :href) css-file)
(push current-css tag-list))))
-
+ (unless (string= "" init-styles)
+ (let ((current-css (style> :type "text/css")))
+ (setf (htcomponent-body current-css) (list init-styles))
+ (push current-css tag-list)))
tag-list))
(defmethod page-current-component ((page page))
@@ -944,15 +955,13 @@
(null jsonp)
(null (and jsonp
(string= id (first (page-json-component-id-list page)))))))
- (progn
- (decf (page-tabulator page))
- (if (string= tagname previous-tagname)
- (progn
- (page-format page "</~a>" tagname))
- (progn
- (page-newline page)
- (page-print-tabulation page)
- (page-format page "</~a>" tagname)))))
+ (decf (page-tabulator page))
+ (if (string= tagname previous-tagname)
+ (page-format page "</~a>" tagname)
+ (progn
+ (page-newline page)
+ (page-print-tabulation page)
+ (page-format page "</~a>" tagname))))
(setf (page-lasttag page) nil)))
(defmethod htcomponent-render ((tag tag) (page page))
@@ -1084,7 +1093,7 @@
(unless (getf (htcomponent-attributes htlink) :type)
(append '(:type "text/css") (htcomponent-attributes htlink)))
(unless (getf (htcomponent-attributes htlink) :rel)
- (append '(:rel "styleshhet") (htcomponent-attributes htlink)))
+ (append '(:rel "stylesheet") (htcomponent-attributes htlink)))
(tag-render-starttag htlink page)
(tag-render-endtag htlink page))
(when (null previous-print-status)
@@ -1119,13 +1128,13 @@
(let ((js (script> :type "text/javascript"))
(js-control-string-directive (if on-load
"
-var bodyInitFunction = function\(e){~{~a~}};~%
+var bodyInitFunction = function\(e){~{~a~%~}};~%
if (/MSIE (\\d+\\.\\d+);/.test(navigator.userAgent)) {~%
window.attachEvent\('onload', bodyInitFunction);~%
} else {~%
document.addEventListener\('DOMContentLoaded', bodyInitFunction, false);~%
}"
- "~{~a~}~%"))
+ "~{~a~%~}~%"))
(page-body-init-scripts (page-body-init-scripts page)))
(setf (htcomponent-page js) page
(htcomponent-body js) (when page-body-init-scripts
@@ -1260,8 +1269,8 @@
(pushnew css (page-stylesheet-files page) :test #'equal)))
(dolist (js (htcomponent-class-initscripts wcomponent))
(pushnew js (page-class-initscripts page) :test #'equal))
- (when (htcomponent-instance-initscript wcomponent)
- (pushnew (htcomponent-instance-initscript wcomponent) (page-instance-initscripts page) :test #'equal)))
+ (dolist (style (htcomponent-initstyles wcomponent))
+ (pushnew style (page-initstyles page) :test #'equal)))
(if (listp template)
(dolist (tag template)
(when (subtypep (type-of tag) 'htcomponent)