活跃的模板 - 添加CSS包括<head>

dea*_*ost 1 css clojure enlive

我不确定我应该如何接近这一点.我有一个CSS文件列表,我希望将其输入某些内容并获取HTML.例如,

(list "base.css" "index.css" "more_css.css") ;vector might be more appropriate?
Run Code Online (Sandbox Code Playgroud)

应转变为:

<link href="css/base.css" rel="stylesheet" />
<link href="css/index.css" rel="stylesheet" />
<link href="css/more_css.css" rel="stylesheet" />
Run Code Online (Sandbox Code Playgroud)

从那里它应该被附加到<head>.

defsnippet几乎看起来合适,但为该文件的一部分采用模板文件和选择器.这里生成的HTML不依赖于模板,只生成HTML的东西似乎是合适的.clone-for可能会做我想要的循环部分,但我无法弄清楚如何使用它.

Mic*_*zyk 5

defsnippet实际上需要Enlive可以理解的任何来源,它不需要是一个文件.特别是,它可以是link标记模板的内联Enlive样式表示.从版本1.1.0开始,Enlive还提供了一个net.grand.enlive-html/html解析Hiccup样式符号的帮助器(); 我发现Hiccup风格更方便手工编写,所以这就是我将在下面使用的内容.(您也可以通过将它们包装在StringReader:中来使用内联HTML字符串(java.io.StringReader. "<div></div>").)

这是代码:

(require '[net.cgrand.enlive-html :as enlive])

(enlive/defsnippet link-css
  ;; representation of the link tag template:
  (enlive/html [:link {:href "" :rel "stylesheet"}])
  ;; selector is required, :link works fine here:
  [:link]
  ;; this is the parameter vector of the fn defsnippet will generate:
  [hrefs]
  ;; clone-for will generate one link tag for each provided href:
  (enlive/clone-for [href hrefs]
    [:link]
    (enlive/set-attr :href href)))
Run Code Online (Sandbox Code Playgroud)

你会这样使用它:

(->> (link-css ["css/base.css" "css/index.css" "css/more_css.css"])
  (enlive/emit*)
  (apply str))
;= "<link href=\"css/base.css\" rel=\"stylesheet\" /><link href=\"css/index.css\" rel=\"stylesheet\" /><link href=\"css/more_css.css\" rel=\"stylesheet\" />"
Run Code Online (Sandbox Code Playgroud)

添加println->>管道的末端是测试它的便捷方式; 这是输出(为清楚起见,手动插入两个换行符):

<link href="css/base.css" rel="stylesheet" />
<link href="css/index.css" rel="stylesheet" />
<link href="css/more_css.css" rel="stylesheet" />
Run Code Online (Sandbox Code Playgroud)