diff --git a/yesod-core/ChangeLog.md b/yesod-core/ChangeLog.md index 5e6826ec..f32ee0e3 100644 --- a/yesod-core/ChangeLog.md +++ b/yesod-core/ChangeLog.md @@ -1,3 +1,7 @@ +## 1.4.30 + +* Add `defaultMessageWidget` + ## 1.4.29 * Exports some internals and fix version bounds [#1318](https://github.com/yesodweb/yesod/pull/1318) diff --git a/yesod-core/Yesod/Core/Class/Yesod.hs b/yesod-core/Yesod/Core/Class/Yesod.hs index 91b0fa95..78e0413d 100644 --- a/yesod-core/Yesod/Core/Class/Yesod.hs +++ b/yesod-core/Yesod/Core/Class/Yesod.hs @@ -319,6 +319,19 @@ class RenderRoute site => Yesod site where yesodWithInternalState :: site -> Maybe (Route site) -> (InternalState -> IO a) -> IO a yesodWithInternalState _ _ = bracket createInternalState closeInternalState {-# INLINE yesodWithInternalState #-} + + -- | Convert a title and HTML snippet into a 'Widget'. Used + -- primarily for wrapping up error messages for better display. + -- + -- @since 1.4.30 + defaultMessageWidget :: Html -> HtmlUrl (Route site) -> WidgetT site IO () + defaultMessageWidget title body = do + setTitle title + toWidget + [hamlet| +
#{path'} - |] + defaultMessageWidget "Not Found" [hamlet|
#{path'}|] provideRep $ return $ object ["message" .= ("Not Found" :: Text)] -- For API requests. @@ -648,12 +657,9 @@ defaultErrorHandler NotFound = selectRep $ do -- if you specify an authRoute the user will be redirected there and -- this page will not be shown. defaultErrorHandler NotAuthenticated = selectRep $ do - provideRep $ defaultLayout $ do - setTitle "Not logged in" - toWidget [hamlet| -
#{msg} - |] + provideRep $ defaultLayout $ defaultMessageWidget + "Permission Denied" + [hamlet|
#{msg}|] provideRep $ return $ object ["message" .= ("Permission Denied. " <> msg)] defaultErrorHandler (InvalidArgs ia) = selectRep $ do - provideRep $ defaultLayout $ do - setTitle "Invalid Arguments" - toWidget [hamlet| -
#{e}
- |]
+ provideRep $ defaultLayout $ defaultMessageWidget
+ "Internal Server Error"
+ [hamlet|#{e}|]
provideRep $ return $ object ["message" .= ("Internal Server Error" :: Text), "error" .= e]
defaultErrorHandler (BadMethod m) = selectRep $ do
- provideRep $ defaultLayout $ do
- setTitle"Bad Method"
- toWidget [hamlet|
- Method Not Supported
-
Method #{S8.unpack m} not supported
- |]
+ provideRep $ defaultLayout $ defaultMessageWidget
+ "Method Not Supported"
+ [hamlet|
Method #{S8.unpack m} not supported|]
provideRep $ return $ object ["message" .= ("Bad method" :: Text), "method" .= TE.decodeUtf8With TEE.lenientDecode m]
asyncHelper :: (url -> [x] -> Text)
diff --git a/yesod-core/yesod-core.cabal b/yesod-core/yesod-core.cabal
index f2a34d91..491a23ed 100644
--- a/yesod-core/yesod-core.cabal
+++ b/yesod-core/yesod-core.cabal
@@ -1,5 +1,5 @@
name: yesod-core
-version: 1.4.29
+version: 1.4.30
license: MIT
license-file: LICENSE
author: Michael Snoyman