Skip to content

Instantly share code, notes, and snippets.

@adeel
Created May 16, 2012 22:06
Show Gist options
  • Save adeel/2714352 to your computer and use it in GitHub Desktop.
Save adeel/2714352 to your computer and use it in GitHub Desktop.
HTML helpers
(use 'hiccup.core)
(defn text-field
([field-name title] (text-field field-name title {}))
([field-name title {:keys [password? guide value]}]
(let [id (str (name field-name) "-field")]
[:div.field-wrapper
[:div.field
[:label {:for id} title]
[:input.text {:type (if password? "password" "text")
:name (name field-name)
:id id
:value value}]]
[:div.guide guide]])))
(defn big-text-field
([field-name title] (big-text-field field-name title {}))
([field-name title {:keys [guide value]}]
(let [id (str (name field-name) "-field")]
[:div.field-wrapper
[:div.field
[:label {:for id} title]
[:textarea {:name (name field-name) :id id}
value]]
[:div.guide guide]])))
(defn radio-field [field-name title {:keys [choices guide value]}]
[:div.field-wrapper
[:div.field
[:label title]
[:div.radio-choices-wrapper
(apply concat
(map
(fn [[key val]]
(let [id (str (name field-name) "-" (name key) "-field")]
[[:input.radio {:type "radio"
:name (name field-name)
:id id
:value key
:checked (if (= (name key) value) "checked")}]
[:label {:for id} val]]))
choices))]]
[:div.guide guide]])
(defn select-field [field-name title {:keys [choices guide value]}]
(let [id (str (name field-name) "-field")]
[:div.field-wrapper
[:div.field
[:label {:for id} title]
[:select {:name (name field-name) :id id}
(map
(fn [[k v]]
[:option {:value k
:selected (if (= k value) "selected")} v])
choices)]]
[:div.guide guide]]))
(defn select-fields [field-name title {:keys [choices values guide]}]
(let [id (str (name field-name) "-field")]
[:div.field-wrapper
[:div.field
[:label {:for id} title]
(map
(fn [[subfield kvs]]
[:select {:name (str (name field-name) "-" (name subfield)) :id id}
(map
(fn [[k v]]
[:option {:value k
:selected (if (= k (values subfield)) "selected")}
v])
kvs)])
choices)]
[:div.guide guide]]))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment