{-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE CPP #-} ------------------------------------------------------------------------------- -- -- Module : Yesod.Helpers.RssFeed -- Copyright : Patrick Brisbin -- License : as-is -- -- Maintainer : Patrick Brisbin -- Stability : Stable -- Portability : Portable -- ------------------------------------------------------------------------------- module Yesod.Helpers.RssFeed ( rssFeed , rssLink , RepRss (..) , module Yesod.Helpers.FeedTypes ) where import Yesod.Handler import Yesod.Content import Yesod.Widget import Yesod.Helpers.FeedTypes import Text.Hamlet (Hamlet, xhamlet, hamlet) import qualified Data.ByteString.Char8 as S8 import Control.Monad (liftM) newtype RepRss = RepRss Content instance HasReps RepRss where chooseRep (RepRss c) _ = return (typeRss, c) -- | Generate the feed rssFeed :: Monad mo => Feed (Route master) -> GGHandler sub master mo RepRss rssFeed = liftM RepRss . hamletToContent . template template :: Feed url -> Hamlet url template arg = #if __GLASGOW_HASKELL__ >= 700 [xhamlet| #else [$xhamlet| #endif \ #{feedTitle arg} @{feedLinkHome arg} #{feedDescription arg} #{formatRFC822 $ feedUpdated arg} #{feedLanguage arg} $forall entry <- feedEntries arg ^{entryTemplate entry} |] entryTemplate :: FeedEntry url -> Hamlet url entryTemplate arg = #if __GLASGOW_HASKELL__ >= 700 [xhamlet| #else [$xhamlet| #endif #{feedEntryTitle arg} @{feedEntryLink arg} @{feedEntryLink arg} #{formatRFC822 $ feedEntryUpdated arg} #{feedEntryContent arg} |] -- | Generates a link tag in the head of a widget. rssLink :: Route m -> String -- ^ title -> GWidget s m () rssLink u title = addHamletHead #if __GLASGOW_HASKELL__ >= 700 [hamlet| #else [$hamlet| #endif