[removed cruft Jeremy Shaw **20091105234911 Ignore-this: d7087d5cea687382ff2bbc0afe376c8e ] hunk ./Web.hs 268 -{- -web facebookConfig W_Homepage = - msum [ do methodM GET - withFacebookConnect facebookConfig $ msum - [ do createURL <- showURL W_CreateArgument - fbml $ appTemplate "Homepage" () -
-

Seereason.com: Yo mama so reasonable...

- p

Build Your Argument

- -
- ] - ] -web facebookConfig here@W_CreateArgument = - withFacebookConnect facebookConfig $ requireSession here $ editArgumentPage here Nothing -web facebookConfig here@(W_EditProposition revision) = - withFacebookConnect facebookConfig $ requireSession here $ msum - [ do eProp <- invoke (PropositionByRev revision) - case eProp of - (Left db_error) -> - fbml $ appTemplate "Invalid Proposition" () -
-

Error Retrieving Proposition Revision <% show revision %>

-

<% show db_error %>

-
- (Right proposition) -> editArgumentPage here (Just proposition) - ] - - -editArgumentPage :: - ( Functor m - , MonadPlus m - , MonadIO m - , XMLGenerator m - , EmbedAsChild m () - , EmbedAsChild m XML - , EmbedAsAttr m (Attr (String, String) String) - , ServerMonad m - , FilterMonad Response m - , WebMonad Response m - , ShowURL m - , HasFacebookConfig m - , HasUser m - , URL m ~ WebURL - , HSX.XML m ~ XML - ) - => WebURL -> Maybe Proposition -> m Response -editArgumentPage here {-@W_CreateArgument-} mProposition = - msum $ - [ do hereURL <- showURL here - let expr = maybe (A (Private "unspecified") Empty) expression mProposition - fbml $ appTemplate "Build Your Argument" () -
-

Build Your Argument

-

<% formletPart "create" hereURL handleSuccess handleFailure' $ - (plug (\markup -> toXML (markupXForm [] markup)) (formlet [] expr)) %>

-
- ] - where - handleSuccess expr = - case mProposition of - Nothing -> - do user <- askUser - eProposition <- invoke (CreateProposition (FB_User user) expr) - case eProposition of - (Left e) -> appTemplate "Error creating Proposition" ()

<% show e %>

- (Right proposition) -> - do editURL <- showURL (W_EditProposition (revision $ getRevisionInfo proposition)) - seeOtherXML editURL - (Just oldProposition) -> - do user <- askUser - eProposition <- invoke (UpdateProposition (FB_User user) (revision (getRevisionInfo oldProposition)) (oldProposition {expression = expr})) - case eProposition of - (Left e) -> appTemplate "Error Updating Proposition" ()

<% show e %>

- (Right proposition) -> - do editURL <- showURL (W_EditProposition (revision $ getRevisionInfo proposition)) - seeOtherXML editURL - handleFailure' errs frmXML = handleFailure (\t b -> appTemplate t () b) errs frmXML - -requireSession :: - ( HasFacebookConfig (FacebookT (s d) m) - , HasFacebookData d (FacebookT (s d) m) - , HasFacebookData FacebookConnectData (FacebookT (s d) m) - , HasFacebookData FacebookConnectData (FacebookT (FacebookStateU d) m) - , MonadPlus m - , WebMonad Response m - , FilterMonad Response m - ) - => WebURL - -> FacebookT (FacebookStateS d) m a - -> FacebookT (s d) m a -requireSession continueTo m = - msum [ withSessionSP m - , Happstack.escape $ fbml $ appTemplate "Login Required." () -
-

To enjoy this awesome site you must first Connect with Facebook Connect.

- -
- ] - -seeOtherXML :: - ( HSX.XML m ~ XML - , Functor m - , XMLGenerator m - , FilterMonad Response m - ) - => String -> XMLGenT m FbXML -seeOtherXML loc = XMLGenT $ fmap FbXML $ unXMLGenT (seeOther loc =<< (<% loc %>)) - -fbml :: - ( Functor m - , FilterMonad Response m - , XMLGenerator m - ) - => XMLGenT m FbXML - -> m Response -fbml xml = toResponse <$> (unXMLGenT xml) - --- http://wiki.developers.facebook.com/index.php/Connect/Setting_Up_Your_Site -appTemplate :: - ( Functor m - , HasFacebookConfig m - , XMLGenerator m - , EmbedAsChild m headers - , EmbedAsChild m body - , EmbedAsAttr m (Attr (String, String) String) - , (HSX.XML m) ~ XML - ) - => String -- ^ title - -> headers -- ^ extra tags to include in \ - -> body -- ^ contents to put inside \ - -> XMLGenT m FbXML -appTemplate title headers body = do - c <- askFacebookConfig - XMLGenT $ (fmap FbXML) $ unXMLGenT $ - ( - - <% headers %> - - - - <% title %> - - - <% fbFeatureLoader %> -- enables XFBML, Facebook Javascript calls, etc - <% body %> - <% fbInit' =<< (apiKey <$> askFacebookConfig) %> -- script which causes XFBML to be rendered - <% analytics seereasonUACCT %> - - ) - -fbInit' :: (XMLGenerator m, HasFacebookConfig m) => ApiKey -> XMLGenT m (HSX.XML m) -fbInit' (ApiKey apiKey)= - do config <- askFacebookConfig - let path = (uriPath (connectURL config)) "xd_receiver.htm" - --} -