/ src / modeling / field-types.lisp
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)))