All controls bound in clog added.

This commit is contained in:
David Botton 2022-01-23 10:10:21 -05:00
parent dea4e9d037
commit 0a4ef4905b
2 changed files with 178 additions and 77 deletions

View file

@ -177,7 +177,7 @@ elements."))
'(member :button :checkbox :color :date :datetime :datetime-local :email
:file :hidden :image :month :number :password :radio :range
:reset :search :submit :tel :text :time :url :week))
(defgeneric create-form-element (clog-obj element-type
&key name value label class html-id)
(:documentation "Create a new clog-form-element as child of CLOG-OBJ.
@ -765,77 +765,6 @@ virtual keyboards."))
""))
:clog-type 'clog-fieldset :html-id html-id :auto-place t))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Implementation - clog-legend
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defclass clog-legend (clog-element)()
(:documentation "CLOG Fieldset Legend Object"));
;;;;;;;;;;;;;;;;;;;
;; create-legend ;;
;;;;;;;;;;;;;;;;;;;
(defgeneric create-legend (clog-obj &key content class html-id)
(:documentation "Create a new clog-legend as child of CLOG-OBJ."))
(defmethod create-legend ((obj clog-obj) &key (content "")
(class nil)
(html-id nil))
(create-child obj (format nil "<legend~A>~A</legend>"
(if class
(format nil " class='~A'"
(escape-string class))
"")
content)
:clog-type 'clog-legend :html-id html-id :auto-place t))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Implementation - clog-data-list
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defclass clog-data-list (clog-element)()
(:documentation "CLOG Form Element Data-List Options Object"));
;;;;;;;;;;;;;;;;;;;;;;
;; create-data-list ;;
;;;;;;;;;;;;;;;;;;;;;;
(defgeneric create-data-list (clog-obj &key data-list html-id)
(:documentation "Create a new clog-data-list as child of CLOG-OBJ and
optionally fill in with contents of data-list."))
(defmethod create-data-list ((obj clog-obj) &key (data-list nil) (html-id nil))
(let ((element (create-child obj "<datalist />"
:clog-type 'clog-data-list
:html-id html-id
:auto-place t)))
(when data-list
(add-options element data-list))
element))
;;;;;;;;;;;;;;;;
;; add-option ;;
;;;;;;;;;;;;;;;;
(defgeneric add-option (clog-data-list value)
(:documentation "Add option VALUE to data-list."))
(defmethod add-option ((obj clog-data-list) value)
(create-child obj (format nil "<option value='~A'>" (escape-string value))
:clog-type 'clog-element :auto-place t))
;;;;;;;;;;;;;;;;;
;; add-options ;;
;;;;;;;;;;;;;;;;;
(defgeneric add-options (clog-data-list data-list)
(:documentation "Add option VALUE to data-list."))
(defmethod add-options ((obj clog-data-list) data-list)
(dolist (value data-list)
(add-option obj value)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Implementation - clog-text-area
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -952,6 +881,77 @@ optionally fill in with contents of data-list."))
(defmethod disable-resize ((obj clog-text-area))
(setf (resizable obj) :none))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Implementation - clog-legend
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defclass clog-legend (clog-element)()
(:documentation "CLOG Fieldset Legend Object"));
;;;;;;;;;;;;;;;;;;;
;; create-legend ;;
;;;;;;;;;;;;;;;;;;;
(defgeneric create-legend (clog-obj &key content class html-id)
(:documentation "Create a new clog-legend as child of CLOG-OBJ."))
(defmethod create-legend ((obj clog-obj) &key (content "")
(class nil)
(html-id nil))
(create-child obj (format nil "<legend~A>~A</legend>"
(if class
(format nil " class='~A'"
(escape-string class))
"")
content)
:clog-type 'clog-legend :html-id html-id :auto-place t))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Implementation - clog-data-list
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defclass clog-data-list (clog-element)()
(:documentation "CLOG Form Element Data-List Options Object"));
;;;;;;;;;;;;;;;;;;;;;;
;; create-data-list ;;
;;;;;;;;;;;;;;;;;;;;;;
(defgeneric create-data-list (clog-obj &key data-list html-id)
(:documentation "Create a new clog-data-list as child of CLOG-OBJ and
optionally fill in with contents of data-list."))
(defmethod create-data-list ((obj clog-obj) &key (data-list nil) (html-id nil))
(let ((element (create-child obj "<datalist />"
:clog-type 'clog-data-list
:html-id html-id
:auto-place t)))
(when data-list
(add-options element data-list))
element))
;;;;;;;;;;;;;;;;
;; add-option ;;
;;;;;;;;;;;;;;;;
(defgeneric add-option (clog-data-list value)
(:documentation "Add option VALUE to data-list."))
(defmethod add-option ((obj clog-data-list) value)
(create-child obj (format nil "<option value='~A'>" (escape-string value))
:clog-type 'clog-element :auto-place t))
;;;;;;;;;;;;;;;;;
;; add-options ;;
;;;;;;;;;;;;;;;;;
(defgeneric add-options (clog-data-list data-list)
(:documentation "Add option VALUE to data-list."))
(defmethod add-options ((obj clog-data-list) data-list)
(dolist (value data-list)
(add-option obj value)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Implementation - clog-select
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -1001,7 +1001,7 @@ optionally fill in with contents of data-list."))
(escape-string value)
(escape-string content))
:clog-type 'clog-element :auto-place t))
;;;;;;;;;;;;;;;;;;;;;;;;
;; add-select-options ;;
;;;;;;;;;;;;;;;;;;;;;;;;
@ -1018,7 +1018,8 @@ optionally fill in with contents of data-list."))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defclass clog-option (clog-form-element)()
(:documentation "CLOG Form Element Option for CLOG Select Object"));
(:documentation "CLOG Form Element Option for CLOG Select Object
or CLOG Data-List objects."));
;;;;;;;;;;;;;;;;;;;
;; create-option ;;
@ -1034,7 +1035,7 @@ optionally fill in with contents of data-list."))
(selected nil)
(disabled nil)
(class nil)
(html-id nil))
(html-id nil))
(create-child obj (format nil "<option~A~A~A~A>~A</option>"
(if selected
" selected"
@ -1048,7 +1049,7 @@ optionally fill in with contents of data-list."))
(if class
(format nil " class='~A'"
(escape-string class))
"")
"")
content)
:clog-type 'clog-option :html-id html-id :auto-place t))
@ -1086,7 +1087,7 @@ optionally fill in with contents of data-list."))
(defmethod create-optgroup ((obj clog-obj) &key (content "")
(disabled nil)
(class nil)
(html-id nil))
(html-id nil))
(create-child obj (format nil "<optgroup label='~A'~A~A/>"
content
(if class

View file

@ -47,12 +47,22 @@
:control "tcol")
'(:tag "span"
:control "span")
'(:tag "textarea"
:control "textarea")
'(:tag "style"
:control "style-block")
'(:tag "fieldset"
:control "fieldset")
'(:tag "legend"
:control "legend")
'(:tag "datalist"
:control "datalist")
'(:tag "select"
:control "dropdown")
'(:tag "option"
:control "option")
'(:tag "optgroup"
:control "optgroup")
'(:tag "div"
:control "div")))
@ -392,6 +402,19 @@
:create-type :element
:create-content ""
:properties (,@*props-element*))
`(:name "textarea"
:description "Text Area"
:clog-type clog:clog-text-area
:create clog:create-text-area
:create-type :element
:create-content ""
:properties ((:name "rows"
:prop "rows")
(:name "columns"
:prop "columns")
(:name "word wrap"
:prop "wrap")
,@*props-element*))
`(:name "fieldset"
:description "Fieldset"
:clog-type clog:clog-fieldset
@ -405,6 +428,83 @@
:create-content "Legend here"
:create-type :element
:properties (,@*props-element*))
`(:name "datalist"
:description "Data list"
:clog-type clog:clog-data-list
:create clog:create-data-list
:create-type :base
:properties (,@*props-base*))
`(:name "dropdown"
:description "Drop down select"
:clog-type clog:clog-select
:create clog:create-select
:create-type :base
:properties ((:name "multiple select"
:get ,(lambda (control)
(property control "multiple"))
:set ,(lambda (control obj)
(if (or (equalp (text obj) "true") (equalp (text obj) "multiple"))
(setf (attribute control "multiple") t)
(remove-attribute control "multiple"))
(property control "multiple")))
,@*props-base*))
`(:name "listbox"
:description "Listbox select"
:clog-type clog:clog-select
:create clog:create-select
:create-type :base
:setup ,(lambda (control content control-record)
(declare (ignore content) (ignore control-record))
(setf (size control) "4"))
:properties ((:name "multiple select"
:get ,(lambda (control)
(property control "multiple"))
:set ,(lambda (control obj)
(if (or (equalp (text obj) "true") (equalp (text obj) "multiple"))
(setf (attribute control "multiple") t)
(remove-attribute control "multiple"))
(property control "multiple")))
,@*props-base*))
`(:name "option"
:description "Option Item"
:clog-type clog:clog-option
:create clog:create-option
:create-content "option item"
:create-type :element
:properties ((:name "value"
:prop "value")
(:name "selected"
:get ,(lambda (control)
(property control "selected"))
:set ,(lambda (control obj)
(if (or (equalp (text obj) "true") (equalp (text obj) "selected"))
(setf (attribute control "selected") t)
(remove-attribute control "selected"))
(property control "selected")))
(:name "disabled"
:get ,(lambda (control)
(property control "disabled"))
:set ,(lambda (control obj)
(if (or (equalp (text obj) "true") (equalp (text obj) "disabled"))
(setf (attribute control "disabled") t)
(remove-attribute control "disabled"))
(property control "disabled")))
,@*props-element*))
`(:name "optgroup"
:description "Option Group"
:clog-type clog:clog-optgroup
:create clog:create-optgroup
:create-content "option group"
:create-type :element
:properties ((:name "disabled"
:get ,(lambda (control)
(property control "disabled"))
:set ,(lambda (control obj)
(if (or (equalp (text obj) "true") (equalp (text obj) "disabled"))
(setf (attribute control "disabled") t)
(remove-attribute control "disabled"))
(property control "disabled")))
,@*props-element*))
`(:name "span"
:description "Span"
:clog-type clog:clog-span