[web-devel] Wrapping the widget generated by the authEmail backend.

Christian Klauser ch27k89 at gmail.com
Tue Jan 4 11:38:00 CET 2011

---------- Forwarded message ----------
From: Christian Klauser <ch27k89 at gmail.com>
Date: 4 January 2011 11:35
Subject: Re: [web-devel] Wrapping the widget generated by the authEmail backend.
To: Nubis <nubis at woobiz.com.ar>

I hit the very same problem a couple of days ago. You can certainly
just build a "compatible" form (with the same field names) and that
will just work fine. If you want to use the hamlet provided by the
plugins, here is what I did:

loginHandler = defaultLayout $ do
       setTitle $ string "Login"
       tm <- liftHandler getRouteToMaster
       let renderPlugin :: AuthPlugin YourSiteHere -> SubWidget Auth
() -- necessary
           renderPlugin = flip apLogin tm
           openidForm = renderPlugin authOpenId
           emailForm = renderPlugin authEmail
       addWidget $(widgetFile "login")

In 'login.hamlet' I can then use ^openidForm^ and ^emailForm^ like any
other widget. Neat as it is, you'll still have a hard time styling
these login forms, as don't have any CSS classes assigned to them. It
will be difficult to distinguish between %input!type=text and
%input!type=submit, so you might end up re-creating those forms anyway

Hope this helps


On 4 January 2011 03:38, Nubis <nubis at woobiz.com.ar> wrote:
> Hi guys,
> I'm trying to build a good looking login page, but I noticed the
> loginHandler that comes with yesod-auth just concatenates all the widgets
> from all the used auth backends. To make matters worse, the markup some of
> the backends generate is not even my preferred brand! :)
> So I try to at least wrap the authEmail widget inside my own html, with a
> login.hamlet file that looks a bit like this:
> .box
>   %h1 Login
>   .wrapper
>     ^email^
> I manage to get the widget out of the authEmail backend, but then I can't
> use it inside my hamlet file that I add using addHamlet b/c it doesn't
> typecheck.
> loginHandler = do
>   let tm = liftHandler getRouteToMaster
>   let email = tm >>= apLogin authEmail
>   defaultLayout $ do
>     setTitle $ string "Login"
>     addHamlet $(Settings.hamletFile "login")
> Is there any way around this? Am I approaching this the wrong way?
> This could also be solved if instead of a widget I could get the url and
> fieldname information from the backend, so I can use those things inside my
> ad-hoc html.
> Moreso, as a way to customize the html I'm tempted to override or redefine
> apLogin inside my app's domain so I can customize the html it generates. But
> just to keep taking advantage of haskell's strenghts it would be nice to
> formalize this idea a bit more (and I don't know how to approach that).
> thanks in advance for your help
> cheers!
> ----nubis :)
> _______________________________________________
> web-devel mailing list
> web-devel at haskell.org
> http://www.haskell.org/mailman/listinfo/web-devel

More information about the web-devel mailing list