diff --git a/source/clog-web.lisp b/source/clog-web.lisp
index acf8611..e31276d 100644
--- a/source/clog-web.lisp
+++ b/source/clog-web.lisp
@@ -39,6 +39,20 @@
(create-web-sidebar generic-function)
(clog-web-sidebar-item class)
(create-web-sidebar-item generic-function)
+ (clog-web-sidebar-item class)
+ (create-web-sidebar-item generic-function)
+ (clog-web-compositor class)
+ (create-web-compositor generic-function)
+ (web-padding-class-type type)
+ (composite-top-middle generic-function)
+ (composite-top-left generic-function)
+ (composite-top-right generic-function)
+ (composite-bottom-middle generic-function)
+ (composite-bottom-left generic-function)
+ (composite-bottom-right generic-function)
+ (composite-middle generic-function)
+ (composite-left generic-function)
+ (composite-right generic-function)
"CLOG-WEB - Auto Layout System"
(clog-web-auto-row class)
@@ -201,6 +215,138 @@ to nil on creation."))
(setf (visiblep div) t))
(change-class div 'clog-web-content)))
+;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; create-web-compositor ;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defclass clog-web-compositor (clog-div)()
+ (:documentation "Compositor for compositing layers of web content"))
+
+(defgeneric create-web-compositor (clog-obj &key content hidden class html-id)
+ (:documentation "Create a clog-web-compositor. Allows compositing of content
+on top of other content. Content is added as children and then
+composit-location is called on the object of that content. If hidden is t then
+then the visiblep propetery will be set to nil on creation."))
+
+(defmethod create-web-compositor ((obj clog-obj) &key (content "")
+ (hidden nil)
+ (class nil)
+ (html-id nil))
+ (let ((div (create-div obj :content content
+ :hidden t :class class :html-id html-id)))
+ (add-class div "w3-display-container")
+ (unless hidden
+ (setf (visiblep div) t))
+ (change-class div 'clog-web-compositor)))
+
+;;;;;;;;;;;;;;;;;
+;; composite-* ;;
+;;;;;;;;;;;;;;;;;
+
+(deftype web-padding-class-type ()
+ '(member :padding-small :padding :padding-large :padding-16 :padding-24
+ :padding-32 :padding-48 :padding-64 :padding-top-64 :padding-top-48
+ :padding-top-48 :padding-top-32))
+
+(defgeneric composite-top-middle (clog-element &key padding-class)
+ (:documentation "Composite CLOG-ELEMENT on top-middle."))
+
+(defmethod composite-top-middle ((obj clog-element)
+ &key (padding-class nil))
+ (add-class obj
+ (format nil "w3-display-topmiddle~A"
+ (if padding-class
+ (format nil " w3-~A" (string-downcase padding-class))
+ ""))))
+
+(defgeneric composite-bottom-middle (clog-element &key padding-class)
+ (:documentation "Composite CLOG-ELEMENT on bottom-middle."))
+
+(defmethod composite-bottom-middle ((obj clog-element)
+ &key (padding-class nil))
+ (add-class obj
+ (format nil "w3-display-bottommiddle~A"
+ (if padding-class
+ (format nil " w3-~A" (string-downcase padding-class))
+ ""))))
+
+(defgeneric composite-bottom-right (clog-element &key padding-class)
+ (:documentation "Composite CLOG-ELEMENT on bottom-right."))
+
+(defmethod composite-bottom-right ((obj clog-element)
+ &key (padding-class nil))
+ (add-class obj
+ (format nil "w3-display-bottomright~A"
+ (if padding-class
+ (format nil " w3-~A" (string-downcase padding-class))
+ ""))))
+
+(defgeneric composite-bottom-left (clog-element &key padding-class)
+ (:documentation "Composite CLOG-ELEMENT on bottom-left."))
+
+(defmethod composite-bottom-left ((obj clog-element)
+ &key (padding-class nil))
+ (add-class obj
+ (format nil "w3-display-bottomleft~A"
+ (if padding-class
+ (format nil " w3-~A" (string-downcase padding-class))
+ ""))))
+
+(defgeneric composite-top-right (clog-element &key padding-class)
+ (:documentation "Composite CLOG-ELEMENT on top-right."))
+
+(defmethod composite-top-right ((obj clog-element)
+ &key (padding-class nil))
+ (add-class obj
+ (format nil "w3-display-topright~A"
+ (if padding-class
+ (format nil " w3-~A" (string-downcase padding-class))
+ ""))))
+
+(defgeneric composite-top-left (clog-element &key padding-class)
+ (:documentation "Composite CLOG-ELEMENT on top-left."))
+
+(defmethod composite-top-left ((obj clog-element)
+ &key (padding-class nil))
+ (add-class obj
+ (format nil "w3-display-topleft~A"
+ (if padding-class
+ (format nil " w3-~A" (string-downcase padding-class))
+ ""))))
+
+(defgeneric composite-left (clog-element &key padding-class)
+ (:documentation "Composite CLOG-ELEMENT on left."))
+
+(defmethod composite-left ((obj clog-element)
+ &key (padding-class nil))
+ (add-class obj
+ (format nil "w3-display-left~A"
+ (if padding-class
+ (format nil " w3-~A" (string-downcase padding-class))
+ ""))))
+
+(defgeneric composite-middle (clog-element &key padding-class)
+ (:documentation "Composite CLOG-ELEMENT on middle."))
+
+(defmethod composite-middle ((obj clog-element)
+ &key (padding-class nil))
+ (add-class obj
+ (format nil "w3-display-middle~A"
+ (if padding-class
+ (format nil " w3-~A" (string-downcase padding-class))
+ ""))))
+
+(defgeneric composite-right (clog-element &key padding-class)
+ (:documentation "Composite CLOG-ELEMENT on right."))
+
+(defmethod composite-right ((obj clog-element)
+ &key (padding-class nil))
+ (add-class obj
+ (format nil "w3-display-right~A"
+ (if padding-class
+ (format nil " w3-~A" (string-downcase padding-class))
+ ""))))
+
;;;;;;;;;;;;;;;;;;;;;
;; create-web-code ;;
;;;;;;;;;;;;;;;;;;;;;
@@ -330,7 +476,7 @@ creation."))
;; create-web-auto-column ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(deftype vertical-align-type () '(member :top :middle :bottom))
+(deftype web-vertical-align-type () '(member :top :middle :bottom))
(defclass clog-web-auto-column (clog-div)()
(:documentation "Content for web content"))
@@ -393,8 +539,8 @@ be set to nil on creation."))
;; create-web-container ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;
-(deftype container-size-type () '(member :half :third :twothird :quarter
- :threequarter :rest :col))
+(deftype web-container-size-type () '(member :half :third :twothird :quarter
+ :threequarter :rest :col))
(defclass clog-web-container (clog-div)()
(:documentation "Container cells for web content in 12 column grid"))
diff --git a/static-files/img/kiarash-mansouri-fzoSNcxqtp8-unsplash.jpg b/static-files/img/kiarash-mansouri-fzoSNcxqtp8-unsplash.jpg
new file mode 100644
index 0000000..c883646
Binary files /dev/null and b/static-files/img/kiarash-mansouri-fzoSNcxqtp8-unsplash.jpg differ
diff --git a/tutorial/24-tutorial.lisp b/tutorial/24-tutorial.lisp
index fb52fdb..1c7eda3 100644
--- a/tutorial/24-tutorial.lisp
+++ b/tutorial/24-tutorial.lisp
@@ -60,6 +60,12 @@
\"Start turtorial.\"
(initialize #'on-new-window)
(open-browser))")
+ (let* ((com (create-web-compositor main))
+ (img (create-img com :url-src "/img/kiarash-mansouri-fzoSNcxqtp8-unsplash.jpg"))
+ (txt (create-div com :content "Beyond!")))
+ (setf (box-width img) "100%")
+ (composite-middle txt)
+ (add-class txt "w3-text-white w3-cursive w3-xxxlarge"))
(run body)))
(defun start-tutorial ()