Idiomáticas forma de estilo de renderização de informações utilizando Clojure Soluço

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

  •  12-12-2019
  •  | 
  •  

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!

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top