Идиоматический способ рендеринга стиля информации с помощью Clojure Hiccup
Вопрос
Мне нужно создать информацию о стиле в Hiccup, чтобы разместить элемент в месте, указанному переменными «TOP» и «слева».Мой код выглядит так:
(HTML [: DIV {: Style (Str »Top« Top »; левый« слева)} "какой-то текст"])
Этот код довольно уродливой.Было бы лучше, если Hiccup автоматически отображает атрибут «Стиль», используя стандартные правила стиля CSS ... Тогда я мог бы написать следующее:
(html [: div {: style {: верхний верх: левый левый}} "какой-то текст"])
Есть ли уже библиотека, которая это делает?Или мне нужно катиться своим собственным решением?
Спасибо Clojurians за любые указатели!
Решение
Вы можете написать функцию, которая сделала бы это, и она даже была бы немного менее печатана, чем карта.Например:
(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 еще, но на основе подхода к «преобразованию», подобное увеличению звуков, таких как решение для таких потребностей - https://github.com/cgrand/enlive