cl-ds / data /repos /cl-forms /src /fields /boolean.lisp
j14i's picture
3375 CL macro transformation examples from 85 libraries
43203b4 verified
(in-package :forms)
(defclass boolean-form-field (form-field)
()
(:documentation "A boolean input"))
(defmethod field-required-p ((form-field boolean-form-field))
nil)
(defmethod validate-form-field ((form-field boolean-form-field))
(multiple-value-bind (valid-p error)
(funcall (clavier:is-a-boolean (or (field-invalid-message form-field)
"~A should be a boolean")
(or (field-label form-field)
(field-name form-field)))
(field-value form-field))
(multiple-value-bind (valid-constraints-p errors)
(call-next-method)
(values (and valid-p valid-constraints-p)
(if error (cons error errors)
errors)))))
(defmethod field-read-from-request ((field boolean-form-field) form parameters)
(setf (field-value field)
(equalp
(cdr (assoc (field-request-name field form) parameters :test #'string=))
"on")))
(defmethod format-field-value ((field boolean-form-field) value &optional (stream *standard-output*))
(if value
(write-string "on" stream)
(write-string "off" stream)))
(defmethod make-form-field ((field-type (eql 'boolean)) &rest args)
(apply #'make-instance 'boolean-form-field args))
(defmethod make-form-field ((field-type (eql :boolean)) &rest args)
(apply #'make-instance 'boolean-form-field args))