Идиоматический способ рендеринга информации о стиле с помощью 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