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

---------- Forwarded message ----------
From: Christian Klauser
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@haskell.org http://www.haskell.org/mailman/listinfo/web-devel

Just to throw in my two cents here:
* I'm not able to test any code right now (not on my devel system),
but you may want to look at the addSubWidget function that Matt added,
it might help here[1]
* Making these forms more CSS friendly and easier to embed is
definitely something we should fix for the next version. If anyone
wants to submit a patch, that's appreciated. Otherwise, can someone
open up a Github issue so I don't forget about this by the time I get
home?
Michael
[1] http://hackage.haskell.org/packages/archive/yesod/0.6.7/doc/html/Yesod-Widge...
On Tue, Jan 4, 2011 at 12:38 PM, Christian Klauser
---------- Forwarded message ---------- From: Christian Klauser
Date: 4 January 2011 11:35 Subject: Re: [web-devel] Wrapping the widget generated by the authEmail backend. To: Nubis 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
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@haskell.org http://www.haskell.org/mailman/listinfo/web-devel
_______________________________________________ web-devel mailing list web-devel@haskell.org http://www.haskell.org/mailman/listinfo/web-devel
participants (2)
-
Christian Klauser
-
Michael Snoyman