Start of form elements and handling submit

This commit is contained in:
David Botton 2021-01-12 00:41:15 -05:00
parent d864468524
commit 5ff987c1ef
4 changed files with 59 additions and 28 deletions

View file

@ -130,17 +130,12 @@ result. (Private)"))
;; bind-event-script ;;
;;;;;;;;;;;;;;;;;;;;;;;
(defgeneric bind-event-script (clog-obj event call-back &key cancel-event)
(defgeneric bind-event-script (clog-obj event call-back)
(:documentation "Create the code client side for EVENT CALL-BACK. (Private)"))
(defmethod bind-event-script ((obj clog-obj) event call-back
&key (cancel-event nil))
(if cancel-event
(jquery-execute
obj (format nil "on('~A',function (e, data){~A});return false"
event call-back))
(jquery-execute
obj (format nil "on('~A',function (e, data){~A})" event call-back))))
(defmethod bind-event-script ((obj clog-obj) event call-back)
(jquery-execute
obj (format nil "on('~A',function (e, data){~A})" event call-back)))
;;;;;;;;;;;;;;;;;;;;;;;;;
;; unbind-event-script ;;
@ -204,12 +199,17 @@ result. (Private)"))
(defgeneric set-event (clog-obj event handler &key call-back-script)
(:documentation "Create the hood for incoming events. (Private)"))
(defmethod set-event ((obj clog-obj) event handler &key (call-back-script ""))
;; meeds mutex
(defmethod set-event ((obj clog-obj) event handler
&key (call-back-script "") (cancel-event nil))
(let ((hook (format nil "~A:~A" (html-id obj) event)))
(cond (handler
(bind-event-script
obj event (format nil "ws.send('E:~A-'~A)" hook call-back-script))
obj event (format nil "ws.send('E:~A-'~A)~A"
hook
call-back-script
(if cancel-event
"; return false"
"")))
(setf (gethash hook (connection-data obj)) handler))
(t
(unbind-event-script obj event)
@ -438,7 +438,8 @@ this even is bound, you must call the form reset manually."))
(when handler
(lambda (data)
(declare (ignore data))
(funcall handler obj)))))
(funcall handler obj)))
:cancel-event t))
;;;;;;;;;;;;;;;;;;;
;; set-on-search ;;
@ -461,8 +462,7 @@ is nil unbind the event."))
(defgeneric set-on-select (clog-obj on-select-handler)
(:documentation "Set the ON-SELECT-HANDLER for CLOG-OBJ. If ON-SELECT-HANDLER
is nil unbind the event. This event is activated by using submit on a form. If
this even is bound, you must call the form submit manually."))
is nil unbind the event."))
(defmethod set-on-select ((obj clog-obj) handler)
(set-event obj "select"
@ -477,14 +477,16 @@ this even is bound, you must call the form submit manually."))
(defgeneric set-on-submit (clog-obj on-submit-handler)
(:documentation "Set the ON-SUBMIT-HANDLER for CLOG-OBJ. If ON-SUBMIT-HANDLER
is nil unbind the event."))
is nil unbind the event. This event is activated by using submit on a form. If
this even is bound, you must call the form submit manually."))
(defmethod set-on-submit ((obj clog-obj) handler)
(set-event obj "submit"
(when handler
(lambda (data)
(declare (ignore data))
(funcall handler obj)))))
(funcall handler obj)))
:cancel-event t))
;;;;;;;;;;;;;;;;;;;;;;;;;
;; set-on-context-menu ;;
@ -500,7 +502,8 @@ on-mouse-right-click will replace this handler."))
(when handler
(lambda (data)
(declare (ignore data))
(funcall handler obj)))))
(funcall handler obj)))
:cancel-event t))
;;;;;;;;;;;;;;;;;;
;; set-on-click ;;
@ -580,7 +583,8 @@ replace on an on-context-menu event."))
(when handler
(lambda (data)
(funcall handler obj (parse-mouse-event data))))
:call-back-script mouse-event-script))
:call-back-script mouse-event-script
:cancel-event t))
;;;;;;;;;;;;;;;;;;;;;;;;
;; set-on-mouse-enter ;;

View file

@ -13,7 +13,7 @@
;; Implementation - clog-form
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defclass clog-form (clog-obj)()
(defclass clog-form (clog-element)()
(:documentation "CLOG Form Objecs is the base class for all html forms."))
@ -44,10 +44,23 @@ elements."))
;; create-form-elemnt ;;
;;;;;;;;;;;;;;;;;;;;;;;;
(defgeneric create-form-element (clog-form)
(:documentation "Create a new CLOG-Form-Element as child of CLOG-FORM.
CLOG-Form-Elements are always placed with in the CLOG-FORM in the DOM"))
(defmethod create-form-element (clog-form)
(create-child obj "<input />" :clog-type 'clog-form-element :auto-place auto-place))
(deftype form-element-type ()
'(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-form element-type &key name value)
(:documentation "Create a new clog-form-element as child of CLOG-FORM.
clog-form-elements are always placed with in the CLOG-FORM in the DOM"))
(defmethod create-form-element ((obj clog-form) element-type
&key (name nil) (value ""))
(create-child obj (format nil "<input type='~A' form='~A' value='~A' ~A/>"
(escape-string element-type)
(html-id obj)
value
(if name
(format nil "name='~A'" name)
""))
:clog-type 'clog-form-element :auto-place t))

View file

@ -290,7 +290,10 @@ application."
(defsection @clog-form (:title "CLOG Form Objects")
"CLOG-Form - Class for organizing Form Elements in to a From"
(clog-form class)
(create-form generic-function))
(create-form generic-function)
(clog-form-element class)
(create-form-element generic-function))
(defsection @clog-body (:title "CLOG Body Objects")
"CLOG-Body - CLOG Body Objects"

View file

@ -11,9 +11,20 @@
(t3 (create-button body :content "Tab3"))
(p1 (create-div body :content "Panel1 - Type here"))
(p2 (create-div body :content "Panel2 - Type here"))
(p3 (create-div body :content "Panel3 - Type here")))
(p3 (create-div body :content "Panel3 - Type here"))
(f1 (create-form p1))
(fe1 (create-form-element f1 :text :value "Stuff"))
(fe2 (create-form-element f1 :submit :value "OK"))
(fe3 (create-form-element f1 :reset :value "Start Again")))
(place-after t3 (create-br body))
(place-after fe1 (create-br body))
(set-on-submit f1
(lambda (obj)
(setf (title (html-document body)) (attribute fe1 "value"))
(setf (hiddenp f1) t)
(create-span p1 "<br><b>Your form has been submitted</b>")))
(setf (width p1) 600)
(setf (width p2) 600)