Идиоматический способ визуализации информации о стиле с использованием Clojure Hiccup
Мне нужно собрать информацию о стиле в hiccup, чтобы разместить элемент в месте, указанном переменными "top" и "left". Мой код выглядит так:
(html [: div {: style (str "top" top "; left" left)} "некоторый текст"])
Этот код довольно уродливый. Было бы лучше, если бы hiccup автоматически отображал атрибут "style", используя стандартные правила стиля CSS... Тогда я мог бы написать следующее:
(html [: div {: style {: top top: left left}} "некоторый текст"])
Уже есть библиотека, которая делает это? Или мне нужно свернуть свое собственное решение?
Спасибо Clojurians за любые указатели!
3 ответа
Вы могли бы написать функцию, которая бы это делала, и она даже была бы немного менее типичной, чем карта. Например:
(defn style [& info]
{:style (.trim (apply str (map #(let [[kwd val] %]
(str (name kwd) ":" val "; "))
(apply hash-map info))))})
Что позволит вам написать это так...
(html [:div (style :top top :left left) "some text"])
Пример вывода из функции...
user=> (style :top 32 :left 14)
{:style "top: 32; left: 14;"}
Как насчет этого:
(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"})
Пока не слишком в Clojure, но подход, основанный на "преобразовании", подобный подходу Enlive, звучит как решение для такого рода потребностей - https://github.com/cgrand/enlive