packages feed

yesod-newsfeed 0.4.1 → 1.0.0

raw patch · 3 files changed

+80/−96 lines, 3 filesdep +blaze-htmldep +xml-conduitdep ~hamletdep ~yesod-corePVP ok

version bump matches the API change (PVP)

Dependencies added: blaze-html, xml-conduit

Dependency ranges changed: hamlet, yesod-core

API changes (from Hackage documentation)

- Yesod.AtomFeed: atomLink :: Route m -> String -> GWidget s m ()
+ Yesod.AtomFeed: atomLink :: Route m -> Text -> GWidget s m ()
- Yesod.RssFeed: rssLink :: Route m -> String -> GWidget s m ()
+ Yesod.RssFeed: rssLink :: Route m -> Text -> GWidget s m ()

Files

Yesod/AtomFeed.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE QuasiQuotes #-}-{-# LANGUAGE CPP #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE OverloadedStrings #-} --------------------------------------------------------- -- -- Module        : Yesod.AtomFeed@@ -24,62 +25,52 @@  import Yesod.Core import Yesod.FeedTypes-import Text.Hamlet (HtmlUrl, xhamlet, hamlet)+import Text.Hamlet (hamlet) import qualified Data.ByteString.Char8 as S8-import Control.Monad (liftM)+import Data.Text (Text)+import Data.Text.Lazy (toStrict)+import Text.XML+import Text.Blaze.Renderer.Text (renderHtml)  newtype RepAtom = RepAtom Content instance HasReps RepAtom where     chooseRep (RepAtom c) _ = return (typeAtom, c)  atomFeed :: Feed (Route master) -> GHandler sub master RepAtom-atomFeed = liftM RepAtom . hamletToContent . template+atomFeed feed = do+    render <- getUrlRender+    return $ RepAtom $ toContent $ renderLBS def $ template feed render -template :: Feed url -> HtmlUrl url-template arg =-#if __GLASGOW_HASKELL__ >= 700-                [xhamlet|-#else-                [$xhamlet|-#endif-\<?xml version="1.0" encoding="utf-8"?>-<feed xmlns="http://www.w3.org/2005/Atom"-    <title>#{feedTitle arg}-    <link rel=self href=@{feedLinkSelf arg}-    <link href=@{feedLinkHome arg}-    <updated>#{formatW3 $ feedUpdated arg}-    <id>@{feedLinkHome arg}-    $forall entry <- feedEntries arg-        ^{entryTemplate entry}-|]+template :: Feed url -> (url -> Text) -> Document+template Feed {..} render =+    Document (Prologue [] Nothing []) (addNS root) []+  where+    addNS (Element (Name ln _ _) as ns) = Element (Name ln (Just namespace) Nothing) as (map addNS' ns)+    addNS' (NodeElement e) = NodeElement $ addNS e+    addNS' n = n+    namespace = "http://www.w3.org/2005/Atom" -entryTemplate :: FeedEntry url -> HtmlUrl url-entryTemplate arg =-#if __GLASGOW_HASKELL__ >= 700-                [xhamlet|-#else-                [$xhamlet|-#endif-<entry-    <id>@{feedEntryLink arg}-    <link href=@{feedEntryLink arg}-    <updated>#{formatW3 $ feedEntryUpdated arg}-    <title>#{feedEntryTitle arg}-    <content type=html>-        \<![CDATA[-        \#{feedEntryContent arg}-        ]]>-|]+    root = Element "feed" [] $ map NodeElement+        $ Element "title" [] [NodeContent feedTitle]+        : Element "link" [("rel", "self"), ("href", render feedLinkSelf)] []+        : Element "link" [("href", render feedLinkHome)] []+        : Element "updated" [] [NodeContent $ formatW3 feedUpdated]+        : Element "id" [] [NodeContent $ render feedLinkHome]+        : map (flip entryTemplate render) feedEntries +entryTemplate :: FeedEntry url -> (url -> Text) -> Element+entryTemplate FeedEntry {..} render = Element "entry" [] $ map NodeElement+    [ Element "id" [] [NodeContent $ render feedEntryLink]+    , Element "link" [("href", render feedEntryLink)] []+    , Element "updated" [] [NodeContent $ formatW3 feedEntryUpdated]+    , Element "title" [] [NodeContent feedEntryTitle]+    , Element "content" [("type", "html")] [NodeContent $ toStrict $ renderHtml feedEntryContent]+    ]+ -- | Generates a link tag in the head of a widget. atomLink :: Route m-         -> String -- ^ title+         -> Text -- ^ title          -> GWidget s m ()-atomLink r title = addHamletHead-#if __GLASGOW_HASKELL__ >= 700-                [hamlet|-#else-                [$hamlet|-#endif-<link href=@{r} type=#{S8.unpack typeAtom} rel="alternate" title=#{title}+atomLink r title = toWidgetHead [hamlet|+<link href=@{r} type=#{S8.unpack typeAtom} rel="alternate" title=#{title}> |]
Yesod/RssFeed.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE QuasiQuotes #-}-{-# LANGUAGE CPP #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE OverloadedStrings #-} ------------------------------------------------------------------------------- -- -- Module        : Yesod.RssFeed@@ -20,9 +21,12 @@  import Yesod.Core import Yesod.FeedTypes-import Text.Hamlet (HtmlUrl, xhamlet, hamlet)+import Text.Hamlet (hamlet) import qualified Data.ByteString.Char8 as S8-import Control.Monad (liftM)+import Data.Text (Text, pack)+import Data.Text.Lazy (toStrict)+import Text.XML+import Text.Blaze.Renderer.Text (renderHtml)  newtype RepRss = RepRss Content instance HasReps RepRss where@@ -30,53 +34,40 @@  -- | Generate the feed rssFeed :: Feed (Route master) -> GHandler sub master RepRss-rssFeed = liftM RepRss . hamletToContent . template--template :: Feed url -> HtmlUrl url-template arg = -#if __GLASGOW_HASKELL__ >= 700-    [xhamlet|-#else-    [$xhamlet|-#endif-    \<?xml version="1.0" encoding="utf-8"?> -    <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"-        <channel-            <atom:link href=@{feedLinkSelf arg} rel="self" type=#{S8.unpack typeRss}-            <title>        #{feedTitle arg}-            <link>         @{feedLinkHome arg}-            <description>  #{feedDescription arg}-            <lastBuildDate>#{formatRFC822 $ feedUpdated arg}-            <language>     #{feedLanguage arg}+rssFeed feed = do+    render <- getUrlRender+    return $ RepRss $ toContent $ renderLBS def $ template feed render -            $forall entry <- feedEntries arg-                ^{entryTemplate entry}-    |]+template :: Feed url -> (url -> Text) -> Document+template Feed {..} render =+    Document (Prologue [] Nothing []) root []+  where+    root = Element "rss" [("version", "2.0")] $ return $ NodeElement $ Element "channel" [] $ map NodeElement+        $ Element "{http://www.w3.org/2005/Atom}link"+            [ ("href", render feedLinkSelf)+            , ("rel", "self")+            , ("type", pack $ S8.unpack typeRss)+            ] []+        : Element "title" [] [NodeContent feedTitle]+        : Element "link" [] [NodeContent $ render feedLinkHome]+        : Element "description" [] [NodeContent $ toStrict $ renderHtml feedDescription]+        : Element "lastBuildDate" [] [NodeContent $ formatRFC822 feedUpdated]+        : Element "language" [] [NodeContent feedLanguage]+        : map (flip entryTemplate render) feedEntries -entryTemplate :: FeedEntry url -> HtmlUrl url-entryTemplate arg = -#if __GLASGOW_HASKELL__ >= 700-    [xhamlet|-#else-    [$xhamlet|-#endif-    <item-        <title>      #{feedEntryTitle arg}-        <link>       @{feedEntryLink arg}-        <guid>       @{feedEntryLink arg}-        <pubDate>    #{formatRFC822 $ feedEntryUpdated arg}-        <description>#{feedEntryContent arg}-    |]+entryTemplate :: FeedEntry url -> (url -> Text) -> Element+entryTemplate FeedEntry {..} render = Element "item" [] $ map NodeElement+    [ Element "title" [] [NodeContent feedEntryTitle]+    , Element "link" [] [NodeContent $ render feedEntryLink]+    , Element "guid" [] [NodeContent $ render feedEntryLink]+    , Element "pubDate" [] [NodeContent $ formatRFC822 feedEntryUpdated]+    , Element "description" [] [NodeContent $ toStrict $ renderHtml feedEntryContent]+    ]  -- | Generates a link tag in the head of a widget. rssLink :: Route m-        -> String -- ^ title+        -> Text -- ^ title         -> GWidget s m ()-rssLink r title = addHamletHead-#if __GLASGOW_HASKELL__ >= 700-    [hamlet|-#else-    [$hamlet|-#endif-    <link href=@{r} type=#{S8.unpack typeRss} rel="alternate" title=#{title}+rssLink r title = toWidgetHead [hamlet|+    <link href=@{r} type=#{S8.unpack typeRss} rel="alternate" title=#{title}>     |]
yesod-newsfeed.cabal view
@@ -1,6 +1,6 @@ name:            yesod-newsfeed-version:         0.4.1-license:         BSD3+version:         1.0.0+license:         MIT license-file:    LICENSE author:          Michael Snoyman, Patrick Brisbin maintainer:      Michael Snoyman <michael@snoyman.com>@@ -14,11 +14,13 @@  library     build-depends:   base                 >= 4        && < 5-                   , yesod-core           >= 0.10.1   && < 0.11+                   , yesod-core           >= 1.0      && < 1.1                    , time                 >= 1.1.4-                   , hamlet               >= 0.10     && < 0.11+                   , hamlet               >= 1.0      && < 1.1                    , bytestring           >= 0.9.1.4  && < 0.10                    , text                 >= 0.9      && < 0.12+                   , xml-conduit          >= 0.7      && < 0.8+                   , blaze-html           >= 0.4      && < 0.5     exposed-modules: Yesod.AtomFeed                    , Yesod.RssFeed                    , Yesod.Feed