diff --git a/sources.txt b/sources.txt index 1452bfc6..eb7aeb70 100644 --- a/sources.txt +++ b/sources.txt @@ -1,4 +1,5 @@ ./yesod-core +./yesod-shakespeare ./yesod-static ./yesod-persistent ./yesod-newsfeed diff --git a/stack.yaml b/stack.yaml index 0560587e..9150af5f 100644 --- a/stack.yaml +++ b/stack.yaml @@ -13,5 +13,6 @@ packages: - ./yesod - ./yesod-eventsource - ./yesod-websockets + - ./yesod-shakespeare extra-deps: - wai-app-static-3.1.0 diff --git a/yesod-auth-oauth/Yesod/Auth/OAuth.hs b/yesod-auth-oauth/Yesod/Auth/OAuth.hs index 79ab12ac..b48a0608 100644 --- a/yesod-auth-oauth/Yesod/Auth/OAuth.hs +++ b/yesod-auth-oauth/Yesod/Auth/OAuth.hs @@ -24,6 +24,7 @@ import Web.Authenticate.OAuth import Yesod.Auth import Yesod.Form import Yesod.Core +import Yesod.Shakespeare data YesodOAuthException = CredentialError String Credential | SessionError String diff --git a/yesod-auth-oauth/yesod-auth-oauth.cabal b/yesod-auth-oauth/yesod-auth-oauth.cabal index be3659ef..f63632a2 100644 --- a/yesod-auth-oauth/yesod-auth-oauth.cabal +++ b/yesod-auth-oauth/yesod-auth-oauth.cabal @@ -24,6 +24,7 @@ library build-depends: authenticate-oauth >= 1.5 && < 1.6 , bytestring >= 0.9.1.4 , yesod-core >= 1.4 && < 1.5 + , yesod-shakespeare >= 1.5 && < 1.6 , yesod-auth >= 1.4 && < 1.5 , text >= 0.7 , yesod-form >= 1.4 && < 1.5 diff --git a/yesod-auth/Yesod/Auth.hs b/yesod-auth/Yesod/Auth.hs index 197f7244..c7b82c46 100644 --- a/yesod-auth/Yesod/Auth.hs +++ b/yesod-auth/Yesod/Auth.hs @@ -63,6 +63,7 @@ import qualified Network.Wai as W import Yesod.Core import Yesod.Persist +import Yesod.Shakespeare import Yesod.Auth.Message (AuthMessage, defaultMessage) import qualified Yesod.Auth.Message as Msg import Yesod.Form (FormMessage) @@ -146,7 +147,7 @@ class (Yesod master, PathPiece (AuthId master), RenderMessage master FormMessage authPlugins :: master -> [AuthPlugin master] -- | What to show on the login page. - -- + -- -- Default handler concatenates plugin widgets and wraps the result -- in 'authLayout'. Override if you need fancy widget containers -- or entirely custom page. diff --git a/yesod-auth/Yesod/Auth/Email.hs b/yesod-auth/Yesod/Auth/Email.hs index 3829bb1e..00e1d26a 100644 --- a/yesod-auth/Yesod/Auth/Email.hs +++ b/yesod-auth/Yesod/Auth/Email.hs @@ -61,6 +61,7 @@ import Data.Text.Encoding (encodeUtf8, decodeUtf8With) import Data.Text.Encoding.Error (lenientDecode) import Data.Text (Text) import Yesod.Core +import Yesod.Shakespeare import qualified Yesod.PasswordStore as PS import qualified Text.Email.Validate import qualified Yesod.Auth.Message as Msg diff --git a/yesod-auth/Yesod/Auth/GoogleEmail.hs b/yesod-auth/Yesod/Auth/GoogleEmail.hs index 509ea283..d9f481c0 100644 --- a/yesod-auth/Yesod/Auth/GoogleEmail.hs +++ b/yesod-auth/Yesod/Auth/GoogleEmail.hs @@ -21,6 +21,7 @@ import Yesod.Auth import qualified Web.Authenticate.OpenId as OpenId import Yesod.Core +import Yesod.Shakespeare import Data.Text (Text) import qualified Yesod.Auth.Message as Msg import qualified Data.Text as T diff --git a/yesod-auth/Yesod/Auth/GoogleEmail2.hs b/yesod-auth/Yesod/Auth/GoogleEmail2.hs index 92608623..b5ee0666 100644 --- a/yesod-auth/Yesod/Auth/GoogleEmail2.hs +++ b/yesod-auth/Yesod/Auth/GoogleEmail2.hs @@ -83,8 +83,9 @@ import Yesod.Core (HandlerSite, MonadHandler, getYesod, invalidArgs, lift, lookupGetParam, lookupSession, notFound, redirect, - setSession, whamlet, (.:), + setSession, (.:), TypedContent, HandlerT, liftIO) +import Yesod.Shakespeare (whamlet) pid :: Text pid = "googleemail2" diff --git a/yesod-auth/Yesod/Auth/OpenId.hs b/yesod-auth/Yesod/Auth/OpenId.hs index 387454eb..3af0db98 100644 --- a/yesod-auth/Yesod/Auth/OpenId.hs +++ b/yesod-auth/Yesod/Auth/OpenId.hs @@ -17,6 +17,7 @@ import qualified Web.Authenticate.OpenId as OpenId import Yesod.Form import Yesod.Core +import Yesod.Shakespeare import Text.Cassius (cassius) import Data.Text (Text, isPrefixOf) import qualified Yesod.Auth.Message as Msg @@ -92,7 +93,7 @@ completeHelper idType gets' = do eres <- try $ OpenId.authenticateClaimed gets' (authHttpManager master) either onFailure onSuccess eres where - onFailure err = do + onFailure err = do tm <- getRouteToParent lift $ loginErrorMessage (tm LoginR) $ T.pack $ show (err :: SomeException) diff --git a/yesod-auth/yesod-auth.cabal b/yesod-auth/yesod-auth.cabal index bae4db4f..656576e0 100644 --- a/yesod-auth/yesod-auth.cabal +++ b/yesod-auth/yesod-auth.cabal @@ -24,6 +24,7 @@ library , authenticate >= 1.3 , bytestring >= 0.9.1.4 , yesod-core >= 1.4 && < 1.5 + , yesod-shakespeare >= 1.5 && < 1.6 , wai >= 1.4 , template-haskell , base16-bytestring diff --git a/yesod-core/test/YesodCoreTest.hs b/yesod-core/test/YesodCoreTest.hs index 9d40de40..5778086f 100644 --- a/yesod-core/test/YesodCoreTest.hs +++ b/yesod-core/test/YesodCoreTest.hs @@ -1,10 +1,8 @@ {-# LANGUAGE CPP #-} -module YesodCoreTest (specs) where +module YesodCoreTest (specs) where import YesodCoreTest.CleanPath import YesodCoreTest.Exceptions -import YesodCoreTest.Widget -import YesodCoreTest.Media import YesodCoreTest.Links import YesodCoreTest.NoOverloadedStrings import YesodCoreTest.InternalRequest @@ -28,8 +26,6 @@ specs :: Spec specs = do cleanPathTest exceptionsTest - widgetTest - mediaTest linksTest noOverloadedTest internalRequestTest diff --git a/yesod-core/test/YesodCoreTest/ErrorHandling.hs b/yesod-core/test/YesodCoreTest/ErrorHandling.hs index 27217d71..abc184fd 100644 --- a/yesod-core/test/YesodCoreTest/ErrorHandling.hs +++ b/yesod-core/test/YesodCoreTest/ErrorHandling.hs @@ -5,7 +5,7 @@ module YesodCoreTest.ErrorHandling ( errorHandlingTest ) where import Yesod.Core -import Yesod.Shakespeare (whamlet) +import Text.Hamlet (hamlet) import Yesod.Core.Widget import Test.Hspec import Network.Wai @@ -81,7 +81,7 @@ postAfterRunRequestBodyR = do getErrorInBodyR :: Handler Html getErrorInBodyR = do let foo = error "error in body 19328" :: String - defaultLayout [whamlet|#{foo}|] + defaultLayout $ toWidget [hamlet|#{foo}|] getErrorInBodyNoEvalR :: Handler (DontFullyEvaluate Html) getErrorInBodyNoEvalR = fmap DontFullyEvaluate getErrorInBodyR diff --git a/yesod-core/test/YesodCoreTest/NoOverloadedStrings.hs b/yesod-core/test/YesodCoreTest/NoOverloadedStrings.hs index 14092664..803b723a 100644 --- a/yesod-core/test/YesodCoreTest/NoOverloadedStrings.hs +++ b/yesod-core/test/YesodCoreTest/NoOverloadedStrings.hs @@ -8,7 +8,7 @@ import YesodCoreTest.NoOverloadedStringsSub import Yesod.Core import Yesod.Core.Widget -import Yesod.Shakespeare +import Text.Hamlet (hamlet) import Network.Wai.Test import Network.Wai (pathInfo) import Data.Monoid (mempty) @@ -22,11 +22,11 @@ getBarR :: Monad m => m T.Text getBarR = return $ T.pack "BarR" getBazR :: Yesod master => HandlerT Subsite (HandlerT master IO) Html -getBazR = lift $ defaultLayout [whamlet|Used Default Layout|] +getBazR = lift $ defaultLayout $ toWidget [hamlet|Used Default Layout|] getBinR :: Yesod master => HandlerT Subsite (HandlerT master IO) Html getBinR = do - widget <- widgetToParentWidget [whamlet| + widget <- widgetToParentWidget $ toWidget [hamlet|

Used defaultLayoutT Baz |] diff --git a/yesod-core/test/YesodCoreTest/StubSslOnly.hs b/yesod-core/test/YesodCoreTest/StubSslOnly.hs index 1b242ea0..2a13307f 100644 --- a/yesod-core/test/YesodCoreTest/StubSslOnly.hs +++ b/yesod-core/test/YesodCoreTest/StubSslOnly.hs @@ -2,7 +2,7 @@ module YesodCoreTest.StubSslOnly ( App ( App ) ) where import Yesod.Core -import Yesod.Shakespeare +import Text.Hamlet (hamlet) import qualified Web.ClientSession as CS data App = App @@ -17,8 +17,8 @@ instance Yesod App where fmap Just $ defaultClientSessionBackend 120 CS.defaultKeyFile getHomeR :: Handler Html -getHomeR = defaultLayout - [whamlet| +getHomeR = defaultLayout $ toWidget + [hamlet|

Welcome to my test application. |] diff --git a/yesod-core/test/YesodCoreTest/StubUnsecured.hs b/yesod-core/test/YesodCoreTest/StubUnsecured.hs index d6d195b6..41586e31 100644 --- a/yesod-core/test/YesodCoreTest/StubUnsecured.hs +++ b/yesod-core/test/YesodCoreTest/StubUnsecured.hs @@ -2,7 +2,7 @@ module YesodCoreTest.StubUnsecured ( App ( App ) ) where import Yesod.Core -import Yesod.Shakespeare +import Text.Hamlet (hamlet) data App = App @@ -13,8 +13,8 @@ mkYesod "App" [parseRoutes| instance Yesod App getHomeR :: Handler Html -getHomeR = defaultLayout - [whamlet| +getHomeR = defaultLayout $ toWidget + [hamlet|

Welcome to my test application. |] diff --git a/yesod-core/yesod-core.cabal b/yesod-core/yesod-core.cabal index d7eef6c3..0133d440 100644 --- a/yesod-core/yesod-core.cabal +++ b/yesod-core/yesod-core.cabal @@ -16,7 +16,6 @@ extra-source-files: test/YesodCoreTest.hs test/YesodCoreTest/*.hs test/YesodCoreTest/JsLoaderSites/Bottom.hs - test/en.msg test/test.hs ChangeLog.md README.md @@ -68,7 +67,6 @@ library , word8 , auto-update , semigroups - , shakespeare exposed-modules: Yesod.Core Yesod.Core.Content @@ -80,7 +78,6 @@ library Yesod.Core.Types Yesod.Core.Unsafe Yesod.Routes.TH.Types - Yesod.Shakespeare other-modules: Yesod.Core.Internal.Session Yesod.Core.Internal.Request Yesod.Core.Class.Handler @@ -104,7 +101,7 @@ library Yesod.Routes.TH.ParseRoute Yesod.Routes.TH.RouteAttrs - ghc-options: -Wall -ddump-splices -ddump-to-file + ghc-options: -Wall -- Following line added due to: https://github.com/yesodweb/yesod/issues/545 -- This looks like a GHC bug extensions: MultiParamTypeClasses @@ -167,19 +164,6 @@ test-suite tests ghc-options: -Wall -fno-warn-unused-binds extensions: TemplateHaskell -benchmark widgets - type: exitcode-stdio-1.0 - hs-source-dirs: bench - build-depends: base - , criterion - , bytestring - , text - , transformers - , yesod-core - , blaze-html - main-is: widget.hs - ghc-options: -Wall -O2 - source-repository head type: git location: https://github.com/yesodweb/yesod diff --git a/yesod-form/Yesod/Form/Bootstrap3.hs b/yesod-form/Yesod/Form/Bootstrap3.hs index 8377a68f..0d45a515 100644 --- a/yesod-form/Yesod/Form/Bootstrap3.hs +++ b/yesod-form/Yesod/Form/Bootstrap3.hs @@ -33,6 +33,7 @@ import Control.Monad (liftM) import Data.Text (Text) import Data.String (IsString(..)) import Yesod.Core +import Yesod.Shakespeare import qualified Data.Text as T @@ -314,4 +315,4 @@ bootstrapSubmitId = "b:ootstrap___unique__:::::::::::::::::submit-id" -- > <$> areq textField nameSettings Nothing -- > where nameSettings = withAutofocus $ -- > withPlaceholder "First name" $ --- > (bfs ("Name" :: Text)) \ No newline at end of file +-- > (bfs ("Name" :: Text)) diff --git a/yesod-form/Yesod/Form/Fields.hs b/yesod-form/Yesod/Form/Fields.hs index 5fe123ee..50a14ec0 100644 --- a/yesod-form/Yesod/Form/Fields.hs +++ b/yesod-form/Yesod/Form/Fields.hs @@ -62,6 +62,7 @@ import Yesod.Form.Types import Yesod.Form.I18n.English import Yesod.Form.Functions (parseHelper) import Yesod.Core +import Yesod.Shakespeare import Text.Hamlet import Text.Blaze (ToMarkup (toMarkup), unsafeByteString) #define ToHtml ToMarkup @@ -91,7 +92,7 @@ import qualified Data.ByteString.Lazy as L import Data.Text as T ( Text, append, concat, cons, head , intercalate, isPrefixOf, null, unpack, pack, splitOn ) -import qualified Data.Text as T (drop, dropWhile) +import qualified Data.Text as T (drop, dropWhile) import qualified Data.Text.Read import qualified Data.Map as Map @@ -161,15 +162,15 @@ timeField = timeFieldTypeText {-# DEPRECATED timeField "'timeField' currently defaults to an input of type=\"text\". In the next major release, it will default to type=\"time\". To opt in to the new functionality, use 'timeFieldTypeTime'. To keep the existing behavior, use 'timeFieldTypeText'. See 'https://github.com/yesodweb/yesod/pull/874' for details." #-} -- | Creates an input with @type="time"@. will fallback to a text field, and Yesod will parse the time as described in 'timeFieldTypeText'. --- +-- -- Add the @time@ package and import the "Data.Time.LocalTime" module to use this function. -- -- Since 1.4.2 -timeFieldTypeTime :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m TimeOfDay +timeFieldTypeTime :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m TimeOfDay timeFieldTypeTime = timeFieldOfType "time" -- | Creates an input with @type="text"@, parsing the time from an [H]H:MM[:SS] format, with an optional AM or PM (if not given, AM is assumed for compatibility with the 24 hour clock system). --- +-- -- Add the @time@ package and import the "Data.Time.LocalTime" module to use this function. -- -- Since 1.4.2 @@ -205,7 +206,7 @@ $newline never where showVal = either id (pack . renderHtml) -- | A newtype wrapper around a 'Text' whose 'ToMarkup' instance converts newlines to HTML @\
@ tags. --- +-- -- (When text is entered into a @\