Я думаю, что нашел решение, хотя я далеко не профессионал Enlive (только начал пару недель назад), поэтому, пожалуйста, потерпите меня.
Следующее преобразование предполагает, что link-includes
является последовательностью <link rel="stylesheet" href="/css/this-page-custom.css">
(с соответствующими значениями).
[:head] (html/append
(for [link link-includes]
(-> link
html/html-snippet)))
tl; dr: я начал с совершенно нового проекта, используя lein2
.
jacek:~/sandbox
$ lein2 new stackoverflow/add-to-head-section
Generating a project called stackoverflow/add-to-head-section based on the 'default' template.
To see other templates (app, lein plugin, etc), try `lein help new`.
И добавил [enlive "1.0.1"]
к project.clj
(плюс :main
пространство имен, поэтому lein2 repl
начинается в пространстве имен):
jacek:~/sandbox/add-to-head-section
$ cat project.clj
(defproject stackoverflow/add-to-head-section "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.4.0"]
[enlive "1.0.1"]]
:main stackoverflow.add-to-head-section.core)
Я позаимствовал простой HTML-шаблон из Twitter Bootstrap Getting Started и сохранил его в src/stackoverflow/add_to_head_section/index.html
.
jacek:~/sandbox/add-to-head-section
$ cat src/stackoverflow/add_to_head_section/index.html
<!DOCTYPE html>
<html>
<head>
<title>Bootstrap 101 Template</title>
</head>
<body>
<h1>Hello, world!</h1>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</body>
</html>
Последней загадкой было написание сценария Enlive на src/stackoverflow/add_to_head_section/core.clj
следующим образом:
(ns stackoverflow.add-to-head-section.core
(:require [net.cgrand.enlive-html :as html]))
(html/deftemplate index-html "stackoverflow/add_to_head_section/index.html"
[link-includes]
[:head] (html/append
(for [link link-includes]
(-> link
html/html-snippet))))
(defn render-index-html []
(index-html ["<link rel='stylesheet' href='/css/this-page-custom.css'>"
"<link rel='stylesheet' href='/css/another-custom.css'>"]))
(print (apply str (render-index-html)))
Как только lein2 repl
активируется, включается последняя функция print
и печатает ожидаемый результат.
Возможно, я использовал Enlive's sniptest
, но, как я уже говорил, я еще не привык к этому.