From 965884d675cf1656da27117ab48208508a41386a Mon Sep 17 00:00:00 2001 From: Michael Snoyman Date: Sat, 15 Oct 2011 21:46:46 +0200 Subject: [PATCH] Widgets use Builder for CSS --- yesod-core/Yesod/Internal.hs | 6 ++++-- yesod-core/Yesod/Internal/Core.hs | 3 +-- yesod-core/Yesod/Widget.hs | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/yesod-core/Yesod/Internal.hs b/yesod-core/Yesod/Internal.hs index bd1adc91..9b97cd6b 100644 --- a/yesod-core/Yesod/Internal.hs +++ b/yesod-core/Yesod/Internal.hs @@ -29,7 +29,6 @@ module Yesod.Internal ) where import Text.Hamlet (HtmlUrl, hamlet, Html) -import Text.Cassius (CssUrl) import Text.Julius (JavascriptUrl) import Data.Monoid (Monoid (..), Last) import Data.List (nub) @@ -44,6 +43,7 @@ import qualified Network.HTTP.Types as A import Data.CaseInsensitive (CI) import Data.String (IsString) import qualified Data.Map as Map +import Data.Text.Lazy.Builder (Builder) #if GHC7 #define HAMLET hamlet @@ -107,12 +107,14 @@ nonceKey = "_NONCE" sessionName :: IsString a => a sessionName = "_SESSION" +type CssBuilderUrl a = (a -> [(Text, Text)] -> Text) -> Builder + data GWData a = GWData !(Body a) !(Last Title) !(UniqueList (Script a)) !(UniqueList (Stylesheet a)) - !(Map.Map (Maybe Text) (CssUrl a)) -- media type + !(Map.Map (Maybe Text) (CssBuilderUrl a)) -- media type !(Maybe (JavascriptUrl a)) !(Head a) instance Monoid (GWData a) where diff --git a/yesod-core/Yesod/Internal/Core.hs b/yesod-core/Yesod/Internal/Core.hs index 5a38bd47..00d44867 100644 --- a/yesod-core/Yesod/Internal/Core.hs +++ b/yesod-core/Yesod/Internal/Core.hs @@ -50,7 +50,6 @@ import qualified Data.ByteString.Lazy as L import Data.Monoid import Control.Monad.Trans.RWS import Text.Hamlet -import Text.Cassius import Text.Julius import Text.Blaze ((!), customAttribute, textTag, toValue, unsafeLazyByteString) import qualified Text.Blaze.Html5 as TBH @@ -504,7 +503,7 @@ widgetToPageContent (GWidget w) = do Just (Left s) -> Just s Just (Right (u, p)) -> Just $ render u p css <- forM (Map.toList style) $ \(mmedia, content) -> do - let rendered = renderCssUrl render content + let rendered = toLazyText $ content render x <- addStaticContent "css" "text/css; charset=utf-8" $ encodeUtf8 rendered return (mmedia, diff --git a/yesod-core/Yesod/Widget.hs b/yesod-core/Yesod/Widget.hs index 141a8f2f..ead6e285 100644 --- a/yesod-core/Yesod/Widget.hs +++ b/yesod-core/Yesod/Widget.hs @@ -192,7 +192,7 @@ addWidget = id -- | Add some raw CSS to the style tag. Applies to all media types. addCassius :: Monad m => CssUrl (Route master) -> GGWidget master m () -addCassius x = GWidget $ tell $ GWData mempty mempty mempty mempty (Map.singleton Nothing x) mempty mempty +addCassius x = GWidget $ tell $ GWData mempty mempty mempty mempty (Map.singleton Nothing $ \r -> fromLazyText $ renderCss $ x r) mempty mempty -- | Identical to 'addCassius'. addLucius :: Monad m => CssUrl (Route master) -> GGWidget master m () @@ -200,7 +200,7 @@ addLucius = addCassius -- | Add some raw CSS to the style tag, for a specific media type. addCassiusMedia :: Monad m => Text -> CssUrl (Route master) -> GGWidget master m () -addCassiusMedia m x = GWidget $ tell $ GWData mempty mempty mempty mempty (Map.singleton (Just m) x) mempty mempty +addCassiusMedia m x = GWidget $ tell $ GWData mempty mempty mempty mempty (Map.singleton (Just m) $ \r -> fromLazyText $ renderCss $ x r) mempty mempty -- | Identical to 'addCassiusMedia'. addLuciusMedia :: Monad m => Text -> CssUrl (Route master) -> GGWidget master m ()