From f78559d7ed5615722bbf36185806164cd8008ec3 Mon Sep 17 00:00:00 2001 From: Michael Snoyman Date: Tue, 15 Jan 2013 11:23:21 +0200 Subject: [PATCH] Remove deprecated Yesod.Widget functions (fixes #469) --- yesod-core/Yesod/Widget.hs | 80 ++++++-------------------- yesod-core/test/YesodCoreTest/Media.hs | 2 +- 2 files changed, 17 insertions(+), 65 deletions(-) diff --git a/yesod-core/Yesod/Widget.hs b/yesod-core/Yesod/Widget.hs index bd94bd39..2a4ec532 100644 --- a/yesod-core/Yesod/Widget.hs +++ b/yesod-core/Yesod/Widget.hs @@ -6,8 +6,6 @@ {-# LANGUAGE TypeSynonymInstances #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE CPP #-} --- FIXME Should we remove the older names here (addJulius, etc)? - -- | Widgets combine HTML with JS and CSS dependencies with a unique identifier -- generator, allowing you to create truly modular HTML components. module Yesod.Widget @@ -22,22 +20,14 @@ module Yesod.Widget , ToWidget (..) , ToWidgetHead (..) , ToWidgetBody (..) + , ToWidgetMedia (..) -- * Creating -- ** Head of page , setTitle , setTitleI - , addHamletHead - , addHtmlHead -- ** Body - , addHamlet - , addHtml - , addWidget , addSubWidget -- ** CSS - , addCassius - , addCassiusMedia - , addLucius - , addLuciusMedia , addStylesheet , addStylesheetAttrs , addStylesheetRemote @@ -45,8 +35,6 @@ module Yesod.Widget , addStylesheetEither , CssBuilder (..) -- ** Javascript - , addJulius - , addJuliusBody , addScript , addScriptAttrs , addScriptRemote @@ -139,6 +127,21 @@ instance (sub' ~ sub, master' ~ master) => ToWidget sub' master' (GWidget sub ma instance ToWidget sub master Html where toWidget = toWidget . const +-- | Allows adding some CSS to the page with a specific media type. +-- +-- Since 1.2 +class ToWidgetMedia sub master a where + -- | Add the given content to the page, but only for the given media type. + -- + -- Since 1.2 + toWidgetMedia :: Text -- ^ media value + -> a + -> GWidget sub master () +instance render ~ RY master => ToWidgetMedia sub master (render -> Css) where + toWidgetMedia media x = toWidgetMedia media $ CssBuilder . fromLazyText . renderCss . x +instance render ~ RY master => ToWidgetMedia sub master (render -> CssBuilder) where + toWidgetMedia media x = tell $ GWData mempty mempty mempty mempty (Map.singleton (Just media) $ unCssBuilder . x) mempty mempty + class ToWidgetBody sub master a where toWidgetBody :: a -> GWidget sub master () @@ -175,48 +178,6 @@ setTitleI msg = do mr <- lift getMessageRender setTitle $ toHtml $ mr msg -{-# DEPRECATED addHamletHead, addHtmlHead "Use toWidgetHead instead" #-} -{-# DEPRECATED addHamlet, addHtml, addCassius, addLucius, addJulius "Use toWidget instead" #-} -{-# DEPRECATED addJuliusBody "Use toWidgetBody instead" #-} -{-# DEPRECATED addWidget "addWidget can be omitted" #-} - --- | Add a 'Hamlet' to the head tag. -addHamletHead :: HtmlUrl (Route master) -> GWidget sub master () -addHamletHead = toWidgetHead - --- | Add a 'Html' to the head tag. -addHtmlHead :: Html -> GWidget sub master () -addHtmlHead = toWidgetHead . const - --- | Add a 'Hamlet' to the body tag. -addHamlet :: HtmlUrl (Route master) -> GWidget sub master () -addHamlet = toWidget - --- | Add a 'Html' to the body tag. -addHtml :: Html -> GWidget sub master () -addHtml = toWidget - --- | Add another widget. This is defined as 'id', by can help with types, and --- makes widget blocks look more consistent. -addWidget :: GWidget sub master () -> GWidget sub master () -addWidget = id - --- | Add some raw CSS to the style tag. Applies to all media types. -addCassius :: CssUrl (Route master) -> GWidget sub master () -addCassius = toWidget - --- | Identical to 'addCassius'. -addLucius :: CssUrl (Route master) -> GWidget sub master () -addLucius = toWidget - --- | Add some raw CSS to the style tag, for a specific media type. -addCassiusMedia :: Text -> CssUrl (Route master) -> GWidget sub master () -addCassiusMedia m x = tell $ GWData mempty mempty mempty mempty (Map.singleton (Just m) $ \r -> fromLazyText $ renderCss $ x r) mempty mempty - --- | Identical to 'addCassiusMedia'. -addLuciusMedia :: Text -> CssUrl (Route master) -> GWidget sub master () -addLuciusMedia = addCassiusMedia - -- | Link to the specified local stylesheet. addStylesheet :: Route master -> GWidget sub master () addStylesheet = flip addStylesheetAttrs [] @@ -255,15 +216,6 @@ addScriptRemote = flip addScriptRemoteAttrs [] addScriptRemoteAttrs :: Text -> [(Text, Text)] -> GWidget sub master () addScriptRemoteAttrs x y = tell $ GWData mempty mempty (toUnique $ Script (Remote x) y) mempty mempty mempty mempty --- | Include raw Javascript in the page's script tag. -addJulius :: JavascriptUrl (Route master) -> GWidget sub master () -addJulius = toWidget - --- | Add a new script tag to the body with the contents of this 'Julius' --- template. -addJuliusBody :: JavascriptUrl (Route master) -> GWidget sub master () -addJuliusBody = toWidgetBody - -- | Content for a web page. By providing this datatype, we can easily create -- generic site templates, which would have the type signature: -- diff --git a/yesod-core/test/YesodCoreTest/Media.hs b/yesod-core/test/YesodCoreTest/Media.hs index 490b6bdb..09bd1d2f 100644 --- a/yesod-core/test/YesodCoreTest/Media.hs +++ b/yesod-core/test/YesodCoreTest/Media.hs @@ -27,7 +27,7 @@ instance Yesod Y where getRootR :: Handler RepHtml getRootR = defaultLayout $ do toWidget [lucius|foo1{bar:baz}|] - addCassiusMedia "screen" [lucius|foo2{bar:baz}|] + toWidgetMedia "screen" [lucius|foo2{bar:baz}|] toWidget [lucius|foo3{bar:baz}|] getStaticR :: Handler RepHtml