Идиоматический способ рендеринга информации о стиле с помощью Clojure Hiccup
Мне нужно создать информацию о стиле в икоте, чтобы разместить элемент в месте, указанном переменными "сверху" и "слева". Мой код выглядит так:
(HTML-код [:див {:Стиль (ул. "Верхний" топ ";слева" слева)} "какой-то текст"])
этот код довольно уродливый. Было бы лучше, если бы hiccup автоматически отображал атрибут "style", используя стандартные правила стиля CSS... Тогда я мог бы написать следующее:--1-->
(html [: div {:стиль {:верхний :слева}} "какой-то текст"])
есть ли уже библиотека, которая делает это? Или, мне нужно свернуть мое собственное решение?
спасибо 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