[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>
Hi,
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
Regards
Chris
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