Modo idiomatico di rendering di informazioni in stile usando Clojure HICCUP
Domanda
Ho bisogno di costruire informazioni di stile all'interno del singhiozzo per posizionare un elemento in una posizione indicata dalle variabili "Top" e "Sinistra".Il mio codice sembra così:
.(HTML [: DIV {DIV {: STYLE (STR "TOP" TOP "; SINISTRA" SINISTRA)} "Qualche testo"])
Questo codice è piuttosto brutto.Sarebbe più bello se HICCUP ha reso automaticamente l'attributo "Stile" utilizzando le regole di stile CSS standard ... Quindi potrei scrivere quanto segue:
.(HTML [: Div {: Style {: Top Top: a sinistra sinistra}} "Qualche testo"])
C'è già una biblioteca che fa questo?Oppure, ho bisogno di rotolare la mia soluzione?
Grazie Clojurians per qualsiasi suggerimento!
Soluzione
Potresti scrivere una funzione che lo farebbe, e sarebbe anche leggermente meno digitando della mappa.Ad esempio:
(defn style [& info]
{:style (.trim (apply str (map #(let [[kwd val] %]
(str (name kwd) ":" val "; "))
(apply hash-map info))))})
.
Quale ti permetterebbe di scriverlo come questo ...
(html [:div (style :top top :left left) "some text"])
.
Esecuzione del campione dalla funzione ...
user=> (style :top 32 :left 14)
{:style "top: 32; left: 14;"}
. Altri suggerimenti
Che dire di questo:
(defn style [s]
(str/join ";" (map #(str (name %) ":" ((keyword %) s)) (keys s))))
(style {:padding "20px"
:background "#e68a00"
:color "white"
:font-size "large"
:font-weight "bold"})
. Non ancora molto nel cloudo, ma un approccio basato su "trasformazione" come quello di rallegrarsi come la soluzione per questo tipo di esigenze - https://github.com/cgrand/enlive