mirror of
https://github.com/rabbibotton/clog.git
synced 2026-01-30 12:23:00 -08:00
Start of form elements and handling submit
This commit is contained in:
parent
d864468524
commit
5ff987c1ef
4 changed files with 59 additions and 28 deletions
|
|
@ -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 ;;
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue