can now optionally specify the id used for an element

This commit is contained in:
David Botton 2021-02-01 21:40:47 -05:00
parent 73bc5bf10f
commit 3d7dc17cd3
7 changed files with 272 additions and 155 deletions

View file

@ -37,14 +37,14 @@
(defclass clog-form (clog-element)()
(:documentation "CLOG Form Objecs is the base class for all html forms."))
;;;;;;;;;;;;;;;;;
;; create-form ;;
;;;;;;;;;;;;;;;;;
(deftype from-method-type () '(members :get :post :none))
(defgeneric create-form (clog-obj &key action method target class auto-place)
(defgeneric create-form (clog-obj
&key action method target class html-id auto-place)
(:documentation "Create a new CLOG-Form as child of CLOG-OBJ that organizes
a collection of form elements in to a single form if :AUTO-PLACE (default t)
place-inside-bottom-of CLOG-OBJ. In CLOG a form's on-submit handler should be
@ -59,6 +59,7 @@ action."))
(method :none)
(target "_self")
(class nil)
(html-id nil)
(auto-place t))
(create-child obj (format nil "<form action='~A' ~A target='~A'/>"
action
@ -67,9 +68,10 @@ action."))
(format nil "method='~A'" method))
target
(if class
(format nil " class='~A'" (escape-string class))
(format nil " class='~A'"
(escape-string class))
""))
:clog-type 'clog-form :auto-place auto-place))
:clog-type 'clog-form :html-id html-id :auto-place auto-place))
;;;;;;;;;;;;;;;;;;;;;;;;
;; form-element-count ;;
@ -172,13 +174,17 @@ elements."))
: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)
(defgeneric create-form-element (clog-obj element-type
&key name value label html-id)
(:documentation "Create a new clog-form-element as child of CLOG-OBJ.
It is importamt that clog-form-elements are a child or descendant of a
clog-form in the DOM. The radio ELEMENT-TYPE groups by NAME."))
(defmethod create-form-element ((obj clog-obj) element-type
&key (name nil) (value nil) (label nil))
&key (name nil)
(value nil)
(label nil)
(html-id nil))
(let ((element (create-child
obj (format nil "<input type='~A'~A~A/>"
(escape-string element-type)
@ -188,7 +194,9 @@ clog-form in the DOM. The radio ELEMENT-TYPE groups by NAME."))
(if name
(format nil " name='~A'" name)
""))
:clog-type 'clog-form-element :auto-place t)))
:clog-type 'clog-form-element
:html-id html-id
:auto-place t)))
(when label
(label-for label element))
element))
@ -370,8 +378,6 @@ group called NAME."))
(format nil "$('input:radio[name=~A]:checked').val()"
name)))
;;;;;;;;;;;;;;;;
;; name-value ;;
;;;;;;;;;;;;;;;;
@ -642,16 +648,18 @@ virtual keyboards."))
;;;;;;;;;;;;;;;;;;
(defgeneric create-label (clog-obj &key content label-for)
(defgeneric create-label (clog-obj &key content label-for html-id)
(:documentation "Create a new clog-label as child of CLOG-OBJ."))
(defmethod create-label ((obj clog-obj) &key (content "") (label-for nil))
(defmethod create-label ((obj clog-obj) &key (content "")
(label-for nil)
(html-id nil))
(create-child obj (format nil "<label for='~A'>~A</label>"
(if label-for
(html-id label-for)
"")
(escape-string content))
:clog-type 'clog-label :auto-place t))
:clog-type 'clog-label :html-id html-id :auto-place t))
;;;;;;;;;;;;;;;
;; label-for ;;
@ -663,7 +671,6 @@ virtual keyboards."))
(defmethod label-for ((obj clog-label) element)
(setf (attribute obj "for") (html-id element)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Implementation - clog-fieldset
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -675,16 +682,15 @@ virtual keyboards."))
;; create-fieldset ;;
;;;;;;;;;;;;;;;;;;;;;
(defgeneric create-fieldset (clog-obj &key legend)
(defgeneric create-fieldset (clog-obj &key legend html-id)
(:documentation "Create a new clog-fieldset as child of CLOG-OBJ."))
(defmethod create-fieldset ((obj clog-obj) &key (legend nil))
(defmethod create-fieldset ((obj clog-obj) &key (legend nil) (html-id nil))
(create-child obj (format nil "<fieldset>~A</fieldset>"
(if legend
(format nil "<legend>~A</legend>" legend)
""))
:clog-type 'clog-fieldset :auto-place t))
:clog-type 'clog-fieldset :html-id html-id :auto-place t))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Implementation - clog-data-list
@ -697,12 +703,15 @@ virtual keyboards."))
;; create-data-list ;;
;;;;;;;;;;;;;;;;;;;;;;
(defgeneric create-data-list (clog-obj &key 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))
(let ((element (create-child obj "<datalist />" :clog-type 'clog-data-list :auto-place t)))
(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))
@ -740,7 +749,8 @@ optionally fill in with contents of data-list."))
;; create-text-area ;;
;;;;;;;;;;;;;;;;;;;;;;
(defgeneric create-text-area (clog-obj &key columns rows name value label)
(defgeneric create-text-area (clog-obj
&key columns rows name value label html-id)
(:documentation "Create a new clog-text-area as child of CLOG-OBJ."))
(defmethod create-text-area ((obj clog-obj)
@ -748,12 +758,13 @@ optionally fill in with contents of data-list."))
(rows 2)
(name "")
(value "")
(label nil))
(label nil)
(html-id nil))
(let ((element
(create-child obj
(format nil "<textarea name='~A' cols='~A' rows='~A'>~A</textarea>"
name columns rows (escape-string value))
:clog-type 'clog-text-area :auto-place t)))
:clog-type 'clog-text-area :html-id html-id :auto-place t)))
(when label
(label-for label element))
@ -837,7 +848,6 @@ optionally fill in with contents of data-list."))
(defmethod disable-resize ((obj clog-text-area))
(setf (resizable obj) :none))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Implementation - clog-select
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -849,10 +859,14 @@ optionally fill in with contents of data-list."))
;; create-select ;;
;;;;;;;;;;;;;;;;;;;
(defgeneric create-select (clog-obj &key name multiple label)
(defgeneric create-select (clog-obj &key name multiple label html-id)
(:documentation "Create a new clog-select as child of CLOG-OBJ."))
(defmethod create-select ((obj clog-obj) &key (name nil) (multiple nil) (label nil))
(defmethod create-select ((obj clog-obj)
&key (name nil)
(multiple nil)
(label nil)
(html-id nil))
(let ((element (create-child
obj (format nil "<select~A~A/>"
(if multiple
@ -861,7 +875,7 @@ optionally fill in with contents of data-list."))
(if name
(format nil " name='~A'" name)
""))
:clog-type 'clog-select :auto-place t)))
:clog-type 'clog-select :html-id html-id :auto-place t)))
(when label
(label-for label element))
element))
@ -901,14 +915,16 @@ optionally fill in with contents of data-list."))
;; create-option ;;
;;;;;;;;;;;;;;;;;;;
(defgeneric create-option (clog-obj &key content value selected disabled)
(defgeneric create-option (clog-obj
&key content value selected disabled html-id)
(:documentation "Create a new clog-option as child of CLOG-OBJ."))
(defmethod create-option ((obj clog-obj) &key
(content "")
(value nil)
(selected nil)
(disabled nil))
(disabled nil)
(html-id nil))
(create-child obj (format nil "<option~A~A~A>~A</option>"
(if selected
" selected"
@ -920,7 +936,7 @@ optionally fill in with contents of data-list."))
(format nil " value='~A'" value)
"")
content)
:clog-type 'clog-option :auto-place t))
:clog-type 'clog-option :html-id html-id :auto-place t))
;;;;;;;;;;;;;;;
;; selectedp ;;
@ -950,15 +966,15 @@ optionally fill in with contents of data-list."))
;; create-optgroup ;;
;;;;;;;;;;;;;;;;;;;;;
(defgeneric create-optgroup (clog-obj &key content disabled)
(defgeneric create-optgroup (clog-obj &key content disabled html-id)
(:documentation "Create a new clog-optgroup as child of CLOG-OBJ."))
(defmethod create-optgroup ((obj clog-obj) &key
(content "")
(disabled nil))
(defmethod create-optgroup ((obj clog-obj) &key (content "")
(disabled nil)
(html-id nil))
(create-child obj (format nil "<optgroup label='~A'~A/>"
content
(if disabled
" disabled"
""))
:clog-type 'clog-optgroup :auto-place t))
:clog-type 'clog-optgroup :html-id html-id :auto-place t))