diff --git a/source/clog-form.lisp b/source/clog-form.lisp
index 7b5f7ba..e37499e 100644
--- a/source/clog-form.lisp
+++ b/source/clog-form.lisp
@@ -204,37 +204,41 @@ elements."))
:file :hidden :image :month :number :password :radio :range
:reset :search :submit :tel :text :time :url :week))
-(defgeneric create-form-element (clog-obj element-type
- &key name value label class
- style hidden html-id auto-place)
+(defgeneric create-form-element (clog-obj element-type &rest args
+ &key name class style hidden html-id auto-place label
+ &allow-other-keys)
(:documentation "Create a new clog-form-element as child of CLOG-OBJ.
It is importamt that clog-form-elements are a child or descendant of a
-clog-form in the DOM. The radio ELEMENT-TYPE groups by NAME."))
+clog-form in the DOM. The radio ELEMENT-TYPE groups by
+NAME. Additional keys will be added to the input tag as
+attribute/value pairs in the form attr= 'value'"))
-(defmethod create-form-element ((obj clog-obj) element-type
+(defmethod create-form-element ((obj clog-obj) element-type &rest args
&key (name nil)
- (value nil)
(label nil)
(class nil)
(style nil)
(hidden nil)
(html-id nil)
(auto-place t))
- (let ((element (create-child
- obj (format nil ""
- (escape-string element-type :html t)
- (when class
- (format nil " class='~A'"
- (escape-string class :html t)))
- (when (or hidden style)
- (format nil " style='~@[~a~]~@[~a~]'"
- (when hidden "visibility:hidden;")
- style))
- (when value (format nil " value='~A'" (escape-string value :html t)))
- (when name (format nil " name='~A'" (escape-string name :html t))))
- :clog-type 'clog-form-element
- :html-id html-id
- :auto-place auto-place)))
+ (declare (ignorable name value min max))
+ (dolist (key '(name class style hidden html-id auto-place))
+ (remf args key))
+ (let* (
+ (element (create-child
+ obj (format nil ""
+ (escape-string element-type :html t)
+ (when class
+ (format nil " class='~A'"
+ (escape-string class :html t)))
+ (when (or hidden style)
+ (format nil " style='~@[~a~]~@[~a~]'"
+ (when hidden "visibility:hidden;")
+ style))
+ args)
+ :clog-type 'clog-form-element
+ :html-id html-id
+ :auto-place auto-place)))
(when label
(label-for label element))
element))