Idiomáticas forma de estilo de renderização de informações utilizando Clojure Soluço
Pergunta
Eu preciso construir o estilo de informações dentro de soluço, a fim de colocar um elemento em um local indicado pelas variáveis "superior" e "esquerda".Meu código fica assim:
(html [:div {:estilo (str "top" de cima ";à esquerda" esquerda)} "algum texto"])
Este código é muito feio.Seria melhor se o soluço automaticamente processado o atributo "style" usando o padrão de estilo CSS regras...Em seguida, eu poderia escrever o seguinte:
(html [:div {:estilo de {:superior :esquerda, esquerda}} "algum texto"])
Existe já uma biblioteca que faz isso?Ou, eu preciso rolar a minha própria solução?
Obrigado Clojurians para os ponteiros!
Solução
Você pode escrever uma função que faria isso, e ele poderia até mesmo ser um pouco menos digitação de mapa.Por exemplo:
(defn style [& info]
{:style (.trim (apply str (map #(let [[kwd val] %]
(str (name kwd) ":" val "; "))
(apply hash-map info))))})
Qual seria permitir que você escrever assim...
(html [:div (style :top top :left left) "some text"])
Exemplo de saída da função...
user=> (style :top 32 :left 14)
{:style "top: 32; left: 14;"}
Outras dicas
O que sobre isso:
(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"})
Não muito em Clojure ainda, mas uma abordagem baseada em 'transformação' como a de enlive sons como a solução para esses tipos de necessidades - https://github.com/cgrand/enlive