How to flexibly specify (no) closing tag?
Opened this issue · 2 comments
There are some (edge) cases where tags need to be self-closing, but are not known as such to hiccup's void-tags
list. Modifying the void-tags
would be inelegant. Is there a way to specify a tag as self-closing in a hiccup tag vector - especially as a local override of that tag's rendering to HTML/XML?
In particular, with sitemaps using the hreflang
specification, per https://support.google.com/webmasters/answer/2620865?hl=en one can see that <xhtml:link ... />
tags are self-closing. If dealing with an isolated tag vector, it's possible to specify :mode xml
to produce the desired outcome:
(require '[hiccup.core :as hic])
(hic/html [:xhtml:link (merge {:rel "alternate"} {:hreflang "en" :href http://www.foo.com/en"})])
;;=> "<xhtml:link href=\"http://www.foo.com/en\" hreflang=\"en\" rel=\"alternate\"></xhtml:link>" INCORRECT, empty body and closing tag
(hic/html {:mode :xhtml} [:xhtml:link (merge {:rel "alternate"} {:hreflang "en" :href "http://www.foo.com/en"})])
;;=> "<xhtml:link href=\"http://www.foo.com/en\" hreflang=\"en\" rel=\"alternate\"></xhtml:link>" INCORRECT, empty body and closing tag
(hic/html {:mode :xml} [:xhtml:link (merge {:rel "alternate"} {:hreflang "en" :href "http://www.foo.com/en"})])
;;=> "<xhtml:link href=\"http://www.foo.com/en\" hreflang=\"en\" rel=\"alternate\" />" CORRECT
A problem arises when hic/html
is being called on a larger collection of tag vectors, most of which render as desired, but we want some local overrides for the links of [:xhtml:link ...]
See https://github.com/hashobject/sitemap and in particular https://github.com/hashobject/sitemap/blob/master/src/sitemap/core.clj
Any solutions/suggestions? Thanks!
I don't understand when the problem arise here. But this Issue benefited me by documenting the :mode
option 🙏