Идиоматический способ рендеринга стиля информации с помощью Clojure Hiccup

StackOverflow https://stackoverflow.com//questions/12679754

  •  12-12-2019
  •  | 
  •  

Вопрос

Мне нужно создать информацию о стиле в 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top