6.0.1.13
10.6 Template
Convenience functions for templates. These are automatically imported into the eval environment when rendering with a template (see render).
This module also provides everything from sugar/coerce/value.
Convert
xexpr to an HTML string. Similar to
xexpr->string, but consistent with the HTML spec, text that appears within
script or
style blocks will not be escaped.
Examples: |
> (define tx '(root (script "3 > 2") "Why is 3 > 2?")) | | > (xexpr->string tx) | "<root><script>3 > 2</script>Why is 3 > 2?</root>" | > (->html tx) | "<root><script>3 > 2</script>Why is 3 > 2?</root>" |
|
The optional keyword arguments html-tag and html-attrs let you set the outer tag and attributes for the generated HTML. If xexpr already has an outer tag or attributes, they will be replaced.
Examples: |
> (define tx '(root ((id "huff")) "Bunk beds")) | | > (->html tx) | "<root id=\"huff\">Bunk beds</root>" | > (->html tx #:tag 'div) | "<div id=\"huff\">Bunk beds</div>" | > (->html tx #:attrs '((id "doback"))) | "<root id=\"doback\">Bunk beds</root>" | > (->html tx #:tag 'div #:attrs '((id "doback"))) | "<div id=\"doback\">Bunk beds</div>" |
|
Whereas if xexpr has no tag or attributes, they will be added. If you supply attributes without a tag, you’ll get an error.
Examples: |
> (define x "Drum kit") | | > (->html x) | "Drum kit" | > (->html x #:tag 'div) | "<div>Drum kit</div>" | > (->html x #:tag 'div #:attrs '((id "doback"))) | "<div id=\"doback\">Drum kit</div>" | > (->html x #:attrs '((id "doback"))) | ->html: can't use attribute list '((id doback)) without a | #:tag argument |
|
If the generated HTML has an outer tag, the splice-html? option will strip it off. Otherwise this option has no effect.
Examples: |
> (define tx '(root (p "Chicken nuggets"))) | | > (->html tx) | "<root><p>Chicken nuggets</p></root>" | > (->html tx #:splice #t) | "<p>Chicken nuggets</p>" | > (define x "Fancy sauce") | | > (->html x) | "Fancy sauce" | ; This next one won't do anything | > (->html x #:splice #t) | "Fancy sauce" | ; Adds the outer tag, but then #:splice removes it | > (->html x #:tag 'div #:attrs '((id "doback")) #:splice #t) | "Fancy sauce" |
|
Be careful not to pass existing HTML strings into this function, because the angle brackets will be escaped. Fine if that’s what you want, but you probably don’t.
Examples: |
> (define tx '(p "You did" (em "what?"))) | | > (->html tx) | "<p>You did<em>what?</em></p>" | > (->html (->html tx)) | "<p>You did<em>what?</em></p>" |
|
Find matches for key in value-source, first by looking in its metas (using select-from-metas) and then by looking in its doc (using select-from-doc). With select, you get the first result; with select*, you get them all. In both cases, you get #f if there are no matches.
Look up the value of
key in
meta-source. The
meta-source argument can be either a set of metas (i.e., a
hash) or a
pagenode?, from which metas are pulled. If no value exists for
key, you get
#f.
Examples: |
> (module ice-cream pollen/markup | '(div (question "Flavor?") | (answer "Chocolate chip") (answer "Maple walnut")) | '(meta ((template "sub.xml.pt"))) | '(meta ((target "print")))) |
| | ; Import doc & metas from 'ice-cream submodule | > (require 'ice-cream) | | > (select-from-metas 'template metas) | "sub.xml.pt" | > ('target . select-from-metas . metas) | "print" | > (select-from-metas 'nonexistent-key metas) | #f |
|
Look up the value of
key in
doc-source. The
doc-source argument can be either be a
doc (i.e., a
txexpr) or a
pagenode?, from which doc is pulled. If no value exists for
key, you get
#f.
Examples: |
> (module gelato pollen/markup | '(div (question "Flavor?") | (answer "Nocciola") (answer "Pistachio")) | '(meta ((template "sub.xml.pt"))) | '(meta ((target "print")))) |
| | ; Import doc & metas from 'gelato submodule | > (require 'gelato) | | > (select-from-doc 'question doc) | '("Flavor?") | > ('answer . select-from-doc . doc) | '("Nocciola" "Pistachio") | > (select-from-doc 'nonexistent-key doc) | #f |
|
(when/block condition text-to-insert) → string?
|
condition : any/c |
text-to-insert : any/c |
Convenience function for templates that’s simpler to use than plain
when. If
condition is true, then put the
text-to-insert into the template at the current location. Within a template file, usually invoked like so:
◊when/block[condition]{The text to insert.} |
The inserted text can contain its own nested Pollen commands.