change #:splice to #:splice? in `->html`

pull/110/head
Matthew Butterick 9 years ago
parent 63eb8a74ff
commit a895c0dde1

@ -114,7 +114,7 @@ Note that if @racket[_meta-source] is a relative path or pagenode, it is treated
@section{HTML templates} @section{HTML}
@defmodule[pollen/template/html] @defmodule[pollen/template/html]
@ -125,7 +125,7 @@ Functions specific to HTML templates.
[xexpr-or-xexprs (or/c xexpr? (listof xexpr?))] [xexpr-or-xexprs (or/c xexpr? (listof xexpr?))]
[#:tag html-tag (or/c #f txexpr-tag?) #f] [#:tag html-tag (or/c #f txexpr-tag?) #f]
[#:attrs html-attrs (or/c #f txexpr-attrs?) #f] [#:attrs html-attrs (or/c #f txexpr-attrs?) #f]
[#:splice splice-html? boolean? #f]) [#:splice? splice-html? boolean? #f])
string?] string?]
Convert @racket[_xexpr-or-xexprs] to an HTML string. Similar to @racket[xexpr->string], but consistent with the HTML spec, text that appears within @code{script} or @code{style} blocks will not be escaped. Convert @racket[_xexpr-or-xexprs] to an HTML string. Similar to @racket[xexpr->string], but consistent with the HTML spec, text that appears within @code{script} or @code{style} blocks will not be escaped.
@ -161,13 +161,13 @@ If the generated HTML has an outer tag, the @racket[_splice-html?] option will s
@examples[#:eval my-eval @examples[#:eval my-eval
(define tx '(root (p "Chicken nuggets"))) (define tx '(root (p "Chicken nuggets")))
(->html tx) (->html tx)
(->html tx #:splice #t) (->html tx #:splice? #t)
(define x "Fancy sauce") (define x "Fancy sauce")
(->html x) (->html x)
(code:comment @#,t{This next one won't do anything}) (code:comment @#,t{This next one won't do anything})
(->html x #:splice #t) (->html x #:splice? #t)
(code:comment @#,t{Adds the outer tag, but then #:splice removes it}) (code:comment @#,t{Adds the outer tag, but then #:splice? removes it})
(->html x #:tag 'div #:attrs '((id "doback")) #:splice #t) (->html x #:tag 'div #:attrs '((id "doback")) #:splice? #t)
] ]

@ -7,8 +7,8 @@
paren-match) paren-match)
(define+provide/contract (->html x-arg #:tag [tag #f] #:attrs [attrs #f] #:splice [splice? #f]) (define+provide/contract (->html x-arg #:tag [tag #f] #:attrs [attrs #f] #:splice? [splice? #f] #:splice [bwc-splice? #f])
(((or/c txexpr-element? txexpr-elements?)) (#:tag (or/c #f txexpr-tag?) #:attrs (or/c #f txexpr-attrs?) #:splice boolean?) . ->* . string?) (((or/c txexpr-element? txexpr-elements?)) (#:tag (or/c #f txexpr-tag?) #:attrs (or/c #f txexpr-attrs?) #:splice? boolean? #:splice boolean?) . ->* . string?)
(define x (cond (define x (cond
[(txexpr? x-arg) x-arg] [(txexpr? x-arg) x-arg]
@ -24,7 +24,7 @@
(define html-attrs (or attrs (and (txexpr? x) (get-attrs x)) null)) (define html-attrs (or attrs (and (txexpr? x) (get-attrs x)) null))
(define html-elements (or (and (txexpr? x) (get-elements x)) (list x))) (define html-elements (or (and (txexpr? x) (get-elements x)) (list x)))
(define html (xexpr->html (txexpr html-tag html-attrs html-elements))) (define html (xexpr->html (txexpr html-tag html-attrs html-elements)))
(if (or splice? (and (list? x-arg) (not (txexpr? x-arg)) (not tag))) (if (or splice? bwc-splice? (and (list? x-arg) (not (txexpr? x-arg)) (not tag)))
(trim-outer-tag html) (trim-outer-tag html)
html)] html)]
[else (xexpr->html x)])) [else (xexpr->html x)]))
@ -34,18 +34,18 @@
(check-equal? (->html tx) "<root><p>hello</p></root>") (check-equal? (->html tx) "<root><p>hello</p></root>")
(check-equal? (->html #:tag 'brennan tx) "<brennan><p>hello</p></brennan>") (check-equal? (->html #:tag 'brennan tx) "<brennan><p>hello</p></brennan>")
(check-equal? (->html #:attrs '((id "dale")) tx) "<root id=\"dale\"><p>hello</p></root>") (check-equal? (->html #:attrs '((id "dale")) tx) "<root id=\"dale\"><p>hello</p></root>")
(check-equal? (->html #:splice #t tx) "<p>hello</p>") (check-equal? (->html #:splice? #t tx) "<p>hello</p>")
(check-equal? (->html #:tag 'brennan #:attrs '((id "dale")) tx) "<brennan id=\"dale\"><p>hello</p></brennan>") (check-equal? (->html #:tag 'brennan #:attrs '((id "dale")) tx) "<brennan id=\"dale\"><p>hello</p></brennan>")
(check-equal? (->html #:tag 'brennan #:attrs '((id "dale")) #:splice #t tx) "<p>hello</p>") (check-equal? (->html #:tag 'brennan #:attrs '((id "dale")) #:splice #t tx) "<p>hello</p>")
(define x "hello") (define x "hello")
(check-equal? (->html x) "hello") (check-equal? (->html x) "hello")
(check-equal? (->html #:tag 'brennan x) "<brennan>hello</brennan>") (check-equal? (->html #:tag 'brennan x) "<brennan>hello</brennan>")
(check-exn exn:fail? (λ() (->html #:attrs '((id "dale")) x) "hello")) ;; won't work without tag (check-exn exn:fail? (λ() (->html #:attrs '((id "dale")) x) "hello")) ;; won't work without tag
(check-equal? (->html #:splice #t x) "hello") (check-equal? (->html #:splice? #t x) "hello")
(check-equal? (->html #:tag 'brennan #:attrs '((id "dale")) x) "<brennan id=\"dale\">hello</brennan>") (check-equal? (->html #:tag 'brennan #:attrs '((id "dale")) x) "<brennan id=\"dale\">hello</brennan>")
(check-equal? (->html #:tag 'brennan #:attrs '((id "dale")) #:splice #t x) "hello") (check-equal? (->html #:tag 'brennan #:attrs '((id "dale")) #:splice? #t x) "hello")
(define xs '("hello " (em "you") " " 42)) (define xs '("hello " (em "you") " " 42))
(check-equal? (->html xs) "hello <em>you</em> &#42;") (check-equal? (->html xs) "hello <em>you</em> &#42;")
(check-equal? (->html #:splice #t xs) "hello <em>you</em> &#42;") (check-equal? (->html #:splice? #t xs) "hello <em>you</em> &#42;")
(check-equal? (->html #:tag 'div xs) "<div>hello <em>you</em> &#42;</div>")) (check-equal? (->html #:tag 'div xs) "<div>hello <em>you</em> &#42;</div>"))

Loading…
Cancel
Save