diff --git a/yesod-core/Yesod/Core.hs b/yesod-core/Yesod/Core.hs index 39d20db0..bb65446b 100644 --- a/yesod-core/Yesod/Core.hs +++ b/yesod-core/Yesod/Core.hs @@ -98,7 +98,6 @@ import Yesod.Core.Widget import Yesod.Core.Json import Yesod.Core.Types import Yesod.Core.Internal.Util (formatW3 , formatRFC1123 , formatRFC822) -import Yesod.Core.Widget import Text.Blaze.Html (Html, toHtml, preEscapedToMarkup) import Control.Monad.Logger diff --git a/yesod-core/Yesod/Core/Widget.hs b/yesod-core/Yesod/Core/Widget.hs index 61fc86be..5dc94262 100644 --- a/yesod-core/Yesod/Core/Widget.hs +++ b/yesod-core/Yesod/Core/Widget.hs @@ -66,6 +66,8 @@ module Yesod.Core.Widget , widgetToPageContentUnbound -- Formerly Yesod.Core.Handler + -- * Redirecting + , redirectToPost -- * Streaming , sendChunkHtml -- * Messages @@ -121,6 +123,7 @@ import System.Log.FastLogger (toLogStr) import qualified Data.Text.Lazy as TL import Yesod.Core.Types +import Yesod.Core.Handler (sendResponse, RedirectUrl(..)) import Yesod.Core.Class.Handler import Yesod.Core.Handler (setSession, lookupSession, deleteSession, withUrlRenderer, sendChunk, getUrlRenderParams, getYesod) import Yesod.Core.Content (ToContent(..), ToTypedContent(..), HasContentType(..), ToFlushBuilder(..), typeHtml) @@ -501,6 +504,40 @@ hamletToRepHtml :: MonadHandler m => HtmlUrl (Route (HandlerSite m)) -> m Html hamletToRepHtml = withUrlRenderer {-# DEPRECATED hamletToRepHtml "Use withUrlRenderer instead" #-} +-- | Redirect to a POST resource. +-- +-- This is not technically a redirect; instead, it returns an HTML page with a +-- POST form, and some Javascript to automatically submit the form. This can be +-- useful when you need to post a plain link somewhere that needs to cause +-- changes on the server. +redirectToPost :: (MonadHandler m, RedirectUrl (HandlerSite m) url) + => url + -> m a +redirectToPost url = do + urlText <- toTextUrl url + withUrlRenderer (htmlTemplate urlText) >>= sendResponse + where + {- equivalent to + [hamlet| + $newline never + $doctype 5 + + +
+