Manière idiomatique d'informations de style de rendu avec hiccup de clojure
Question
J'ai besoin de construire des informations de style au sein de HICCUP afin de placer un élément à un emplacement indiqué par les variables "TOP" et "GAUCHE".Mon code ressemble donc à:
(html [: div {: style (str "haut" haut "; gauche" laissé)} "Quelque texte"])
Ce code est assez moche.Il serait plus agréable si Hiccup a automatiquement rendu l'attribut "style" à l'aide de règles de style CSS standard ... alors je pourrais écrire ce qui suit:
(html [: div {: style {: top top: gauche gauche}} "Quelque texte"])
Y a-t-il déjà une bibliothèque qui fait cela?Ou, dois-je lancer ma propre solution?
Merci Clojuriens pour tous les indicateurs!
La solution
Vous pouvez écrire une fonction qui le ferait, et cela serait même légèrement moins tapé que la carte.Par exemple:
(defn style [& info]
{:style (.trim (apply str (map #(let [[kwd val] %]
(str (name kwd) ":" val "; "))
(apply hash-map info))))})
Qui vous permettrait d'écrire comme ça ...
(html [:div (style :top top :left left) "some text"])
Échantillon de sortie de la fonction ...
user=> (style :top 32 :left 14)
{:style "top: 32; left: 14;"}
Autres conseils
Et ceci:
(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"})
Pas beaucoup dans le clojure encore, mais une approche basée sur la «transformation» comme celle des sons de discussion comme la solution pour ce type de besoins - https://github.com/cgrand/enlive