One possible way is to have the first case returns a list of one element,
and the else case returns an empty list. You then splice this list
into body via
,@.
`(body
(form ((action "") (method "post"))
(label ((for "username")) "Username:")
(input ((type "text") (name "username") (maxlength "64")))
(label ((for "password")) "Password:")
(input ((type "password") (name "password") (maxlength "64")))
(button ((type "submit") (value "Login")) "Login"))
,@(cond
[(not (eq? login-error "")) `((p ,login-error))]
[else '()]))
If the then branch is taken, the value will be:
`(body
(form ((action "") (method "post"))
(label ((for "username")) "Username:")
(input ((type "text") (name "username") (maxlength "64")))
(label ((for "password")) "Password:")
(input ((type "password") (name "password") (maxlength "64")))
(button ((type "submit") (value "Login")) "Login"))
(p ,login-error))
On the other hand, if the else branch is taken, the value will be:
`(body
(form ((action "") (method "post"))
(label ((for "username")) "Username:")
(input ((type "text") (name "username") (maxlength "64")))
(label ((for "password")) "Password:")
(input ((type "password") (name "password") (maxlength "64")))
(button ((type "submit") (value "Login")) "Login")))
On Sun, Mar 1, 2020 at 12:31 AM liendolucas84 <[email protected]>
wrote:
> Hi everyone! Just joined the Racket User's group. I'm trying to
> conditionally render a paragraph element using a cond and an xexpr but I
> can't make the "xexpr?" function return a #t value and of course the
> response/xexpr function call fails as well. I've kind of fix this by always
> returning a paragraph element regardless is needed or not (of course this
> is not what I want). Here's the working code:
>
> (define (login-template (login-error ""))
> `(html
> (head
> (link ((rel "icon") (href "data:,")))
> (title "Please login"))
> (body
> (form ((action "") (method "post"))
> (label ((for "username")) "Username:")
> (input ((type "text") (name "username") (maxlength "64")))
> (label ((for "password")) "Password:")
> (input ((type "password") (name "password") (maxlength "64")))
> (button ((type "submit") (value "Login")) "Login"))
> ,(cond
> ((not (eq? login-error "")) `(p, login-error))
> (else '(p "Enter your username/password."))))))
>
> However I don't want to display at all the "else" clause as is not needed
> at all, here's the failing code:
>
> (define (login-template (login-error ""))
> `(html
> (head
> (link ((rel "icon") (href "data:,")))
> (title "Please login"))
> (body
> (form ((action "") (method "post"))
> (label ((for "username")) "Username:")
> (input ((type "text") (name "username") (maxlength "64")))
> (label ((for "password")) "Password:")
> (input ((type "password") (name "password") (maxlength "64")))
> (button ((type "submit") (value "Login")) "Login"))
> ,(cond
> ((not (eq? login-error "")) `(p, login-error))))))
>
> The last example fails if the login-error is indeed "" (an empty string).
> Am I missing something like a "null xexpr" usage for the "else" clause or
> something different that needs to be used in these situations? Of the all
> examples out there that I could find and read none of them shows how to do
> something like this. Is there a doc page where can I read about caveats
> using xexprs (if any) or situations like the one I've described?
>
> Thanks for your time,
> Lucas.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Racket Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/racket-users/48f5b3c7-3ec2-43cc-8f01-60e36acb1e74%40googlegroups.com
> <https://groups.google.com/d/msgid/racket-users/48f5b3c7-3ec2-43cc-8f01-60e36acb1e74%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
--
You received this message because you are subscribed to the Google Groups
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/racket-users/CADcuegtDVCicm_FJwypt%2BVTMA_YvtaYMBK2ot4RVPDKnihjBWg%40mail.gmail.com.