Manera idiomática de renderizar información de estilo usando Clojure Hiccup
Pregunta
Necesito crear información de estilo dentro de HICCUP para colocar un elemento en una ubicación indicada por las variables "top" y "izquierda".Mi código se ve así:
(HTML [: DIV {: Style (STR "TOP" TOP "; izquierda" izquierda)} "Algunos texto"])
Este código es bastante feo.Sería mejor si HICCUP hiciera automáticamente el atributo "Estilo" usando reglas de estilo CSS estándar ... entonces podría escribir lo siguiente:
(HTML [: DIV {: Style {: Top Top: izquierda izquierda}} "Algunos texto"])
¿Ya es una biblioteca que hace esto?O, ¿necesito para rodar mi propia solución?
¡Gracias clojurianos para cualquier puntero!
Solución
Podrías escribir una función que haría eso, e incluso sería un poco menos escrito que el mapa.Por ejemplo:
(defn style [& info]
{:style (.trim (apply str (map #(let [[kwd val] %]
(str (name kwd) ":" val "; "))
(apply hash-map info))))})
que le permitiría escribirlo así ...
(html [:div (style :top top :left left) "some text"])
Salida de muestra de la función ...
user=> (style :top 32 :left 14)
{:style "top: 32; left: 14;"}
Otros consejos
¿Qué hay de esto:
(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"})
No mucho en Clojure, sino un enfoque basado en "transformación" como el de enllevar los sonidos como la solución para este tipo de necesidades. https://github.com/cgrand/enlive