{-# LANGUAGE QuasiQuotes #-} ------------------------------------------------------------------------------- -- -- Module : Yesod.RssFeed -- Copyright : Patrick Brisbin -- License : as-is -- -- Maintainer : Patrick Brisbin -- Stability : Stable -- Portability : Portable -- ------------------------------------------------------------------------------- module Yesod.RssFeed ( rssFeed , rssLink , RepRss (..) , module Yesod.FeedTypes ) where import Yesod.Core import Yesod.FeedTypes import Text.Hamlet (HtmlUrl, xhamlet, hamlet) import qualified Data.ByteString.Char8 as S8 import Control.Monad (liftM) import Data.Text (Text) newtype RepRss = RepRss Content instance HasReps RepRss where chooseRep (RepRss c) _ = return (typeRss, c) -- | Generate the feed rssFeed :: Feed (Route master) -> GHandler sub master RepRss rssFeed = liftM RepRss . hamletToContent . template template :: Feed url -> HtmlUrl url template arg = [xhamlet| \ #{feedTitle arg} <link> @{feedLinkHome arg} <description> #{feedDescription arg} <lastBuildDate>#{formatRFC822 $ feedUpdated arg} <language> #{feedLanguage arg} $forall entry <- feedEntries arg ^{entryTemplate entry} |] entryTemplate :: FeedEntry url -> HtmlUrl url entryTemplate arg = [xhamlet| <item> <title> #{feedEntryTitle arg} <link> @{feedEntryLink arg} <guid> @{feedEntryLink arg} <pubDate> #{formatRFC822 $ feedEntryUpdated arg} <description>#{feedEntryContent arg} |] -- | Generates a link tag in the head of a widget. rssLink :: Route m -> Text -- ^ title -> GWidget s m () rssLink r title = toWidgetHead [hamlet| <link href=@{r} type=#{S8.unpack typeRss} rel="alternate" title=#{title}> |]