field-types.lisp
1 (in-package :ami.modeling) 2 3 ;; Relations 4 (define-field-type belongs-to) 5 (define-db-type belongs-to :bigint) 6 (define-render-form belongs-to 7 (:div "BELONGS TO")) 8 (define-render-view belongs-to 9 (:div "BELONGS TO")) 10 11 ;; Basic types 12 (define-field-type text) 13 (define-field-type uuid :inherit text) 14 (define-field-type url :inherit text) 15 (define-field-type integer :inherit text) 16 (define-field-type email :inherit text) 17 (define-field-type options) 18 19 (define-db-type options :text) 20 (define-db-type text :text) 21 (define-validate url t) 22 (define-db-type integer :bigint) 23 24 (define-render-form text 25 (:input :type "text" 26 :name (fdef-name obj) 27 :value (or value "") 28 :placeholder (fdef-name obj) 29 :autofocus "t")) 30 (define-render-view text 31 (format nil "~a" (or value ""))) 32 33 (define-render-view url 34 (:a :href valudse (format nil "~a" (or value "")))) 35 36 (define-render-form options 37 (:select 38 :name (fdef-name obj) 39 :_ "on click elsewhere send submit to <form/>" 40 (dolist (opt (fdef-args obj)) 41 (:option :value opt opt)))) 42 (define-render-view options 43 (:span (format nil "~a" (or value "")))) 44 (define-db-type options :text) 45 46 (define-field-type password :inherit text) 47 (define-render-form password 48 (:input :type "password" :name (fdef-name obj) :value (or value "") :placeholder (fdef-name obj))) 49 50 (define-field-type boolean) 51 (define-render-form boolean 52 (:input :name (fdef-name obj) :type "checkbox" :checked value)) 53 (define-render-view boolean 54 (:div "TRUE")) 55 (define-db-type boolean :boolean) 56 57 (define-field-type date) 58 (define-db-type date :timestamptz) 59 (define-render-form date 60 (:input :type "date" :name (fdef-name obj) :value (local-time:format-timestring nil value :format '(:year "-" (:month 2) "-" (:day 2))))) 61 (define-render-view date 62 (:div (local-time:format-timestring nil value :format '(:year "-" (:month 2) "-" (:day 2))))) 63 64 (define-field-type datetime) 65 (define-db-type datetime :timestamptz) 66 (define-render-form datetime 67 (:input :type "datetime-local" :name (fdef-name obj) :value (local-time:format-timestring nil value :format '(:year "-" :month "-" :day)))) 68 (define-render-view datetime 69 (:div (local-time:format-timestring nil value :format '(:year "-" :month "-" :day)))) 70 71 (defmethod convert-from-form-data ((obj boolean-field) form-data-value) 72 (if form-data-value 73 t 74 nil)) 75 (defmethod convert-from-form-data ((obj integer-field) form-data-value) 76 (if (string= "NIL" form-data-value) 77 nil 78 (parse-integer form-data-value)))