├── deps.edn ├── .clj-kondo └── config.edn ├── resources └── clj-kondo.exports │ └── hiccup │ └── hiccup │ ├── config.edn │ └── hiccup │ └── hooks.clj ├── .gitignore ├── src ├── hiccup │ ├── middleware.clj │ ├── core.clj │ ├── element.clj │ ├── def.clj │ ├── page.clj │ ├── util.clj │ ├── form.clj │ └── compiler.clj └── hiccup2 │ └── core.clj ├── test ├── hiccup │ ├── middleware_test.clj │ ├── element_test.clj │ ├── def_test.clj │ ├── util_test.clj │ ├── page_test.clj │ ├── compiler_test.clj │ ├── core_test.clj │ └── form_test.clj └── hiccup2 │ ├── optimizations_test.clj │ └── core_test.clj ├── .github └── workflows │ └── test.yml ├── project.clj ├── CONTRIBUTING.md ├── CHANGELOG.md ├── doc └── syntax.md ├── README.md └── LICENSE.txt /deps.edn: -------------------------------------------------------------------------------- 1 | {:paths ["src" "resources"] 2 | :deps {org.clojure/clojure {:mvn/version "1.7.0"}}} 3 | -------------------------------------------------------------------------------- /.clj-kondo/config.edn: -------------------------------------------------------------------------------- 1 | {:config-paths ["../resources/clj-kondo.exports/hiccup/hiccup"] 2 | :ignore [:deprecated-var :deprecated-namespace]} 3 | -------------------------------------------------------------------------------- /resources/clj-kondo.exports/hiccup/hiccup/config.edn: -------------------------------------------------------------------------------- 1 | {:lint-as {hiccup.def/defhtml clojure.core/defn} 2 | :hooks {:analyze-call {hiccup.def/defelem hiccup.hooks/defelem}}} 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /lib 3 | /codox 4 | /classes 5 | /checkouts 6 | pom.xml 7 | pom.xml.asc 8 | *.jar 9 | *.class 10 | .lein-* 11 | .nrepl-port 12 | .clj-kondo/* 13 | !.clj-kondo/config.edn 14 | /.cpcache 15 | -------------------------------------------------------------------------------- /src/hiccup/middleware.clj: -------------------------------------------------------------------------------- 1 | (ns hiccup.middleware 2 | "Ring middleware functions for Hiccup." 3 | (:require [hiccup.util :as util])) 4 | 5 | (defn wrap-base-url 6 | "Ring middleware that wraps the handler in the [[with-base-url]] function. 7 | The base URL may be specified as an argument. Otherwise, the `:context` key 8 | on the request map is used." 9 | ([handler] 10 | (wrap-base-url handler nil)) 11 | ([handler base-url] 12 | (fn [request] 13 | (util/with-base-url (or base-url (:context request)) 14 | (handler request))))) 15 | -------------------------------------------------------------------------------- /test/hiccup/middleware_test.clj: -------------------------------------------------------------------------------- 1 | (ns hiccup.middleware_test 2 | (:require [clojure.test :refer :all] 3 | [hiccup.core :refer [html]] 4 | [hiccup.element :refer [link-to]] 5 | [hiccup.middleware :refer :all])) 6 | 7 | (defn test-handler [request] 8 | {:status 200 9 | :headers {"Content-Type" "text/html"} 10 | :body (html [:html [:body (link-to "/bar" "bar")]])}) 11 | 12 | (deftest test-wrap-base-url 13 | (let [resp ((wrap-base-url test-handler "/foo") {})] 14 | (is (= (:body resp) 15 | "