yesod-newsfeed 1.6.1.0 → 1.7.0.0
raw patch · 5 files changed
+45/−1 lines, 5 files
Files
- ChangeLog.md +7/−0
- Yesod/AtomFeed.hs +10/−0
- Yesod/FeedTypes.hs +20/−0
- Yesod/RssFeed.hs +7/−0
- yesod-newsfeed.cabal +1/−1
ChangeLog.md view
@@ -1,5 +1,12 @@ # Changelog +## 1.7++* Add support for Feed Categories+ * RSS: http://www.rssboard.org/rss-specification#ltcategorygtSubelementOfLtitemgt+ * Atom: https://tools.ietf.org/html/rfc4287#section-4.2.2+ * Create the `EntryCategory` datatype+ ## 1.6.1 * Upgrade to yesod-core 1.6.0
Yesod/AtomFeed.hs view
@@ -74,6 +74,15 @@ Nothing -> [] Just (route, _) -> [Element "logo" Map.empty [NodeContent $ render route]] +entryCategoryTemplate :: EntryCategory -> Element+entryCategoryTemplate (EntryCategory mdomain mlabel category) =+ Element "category" (Map.fromList ([("term",category)]+ ++ (maybe [] (\d -> [("scheme",d)]) mdomain)+ ++ (maybe [] (\l -> [("label",l)]) mlabel)+ )++ ) []+ entryTemplate :: FeedEntry url -> (url -> Text) -> Element entryTemplate FeedEntry {..} render = Element "entry" Map.empty $ map NodeElement $ [ Element "id" Map.empty [NodeContent $ render feedEntryLink]@@ -82,6 +91,7 @@ , Element "title" Map.empty [NodeContent feedEntryTitle] , Element "content" (Map.singleton "type" "html") [NodeContent $ toStrict $ renderHtml feedEntryContent] ]+ ++ map entryCategoryTemplate feedEntryCategories ++ case feedEntryEnclosure of Nothing -> []
Yesod/FeedTypes.hs view
@@ -2,6 +2,7 @@ ( Feed (..) , FeedEntry (..) , EntryEnclosure (..)+ , EntryCategory (..) ) where import Text.Hamlet (Html)@@ -40,6 +41,20 @@ , enclosedMimeType :: Text } +-- | RSS 2.0 and Atom allow category in a feed entry.+--+-- * [RSS category](http://www.rssboard.org/rss-specification#ltcategorygtSubelementOfLtitemgt)+-- * [Atom category](https://tools.ietf.org/html/rfc4287#section-4.2.2)+--+-- RSS feeds ignore 'categoryLabel'+--+-- @since 1.7+data EntryCategory = EntryCategory+ { categoryDomain :: Maybe Text -- ^ category identifier+ , categoryLabel :: Maybe Text -- ^ Human-readable label Atom only+ , categoryValue :: Text -- ^ identified categorization scheme via URI+ }+ -- | Each feed entry data FeedEntry url = FeedEntry { feedEntryLink :: url@@ -51,4 +66,9 @@ -- rel=enclosure> -- -- @since 1.5+ , feedEntryCategories :: [EntryCategory]+ -- ^ Allows categories data: RSS \<category>+ -- or Atom \<link term=category>+ --+ -- @since 1.7 }
Yesod/RssFeed.hs view
@@ -75,6 +75,7 @@ ] ] + entryTemplate :: FeedEntry url -> (url -> Text) -> Element entryTemplate FeedEntry {..} render = Element "item" Map.empty $ map NodeElement $ [ Element "title" Map.empty [NodeContent feedEntryTitle]@@ -83,6 +84,7 @@ , Element "pubDate" Map.empty [NodeContent $ formatRFC822 feedEntryUpdated] , Element "description" Map.empty [NodeContent $ toStrict $ renderHtml feedEntryContent] ]+ ++ map entryCategoryTemplate feedEntryCategories ++ case feedEntryEnclosure of Nothing -> []@@ -91,6 +93,11 @@ (Map.fromList [("type", enclosedMimeType) ,("length", pack $ show enclosedSize) ,("url", render enclosedUrl)]) []]++entryCategoryTemplate :: EntryCategory -> Element+entryCategoryTemplate (EntryCategory mdomain _ category) =+ Element "category" prop [NodeContent category]+ where prop = maybe Map.empty (\domain -> Map.fromList [("domain",domain)]) mdomain -- | Generates a link tag in the head of a widget. rssLink :: MonadWidget m
yesod-newsfeed.cabal view
@@ -1,5 +1,5 @@ name: yesod-newsfeed-version: 1.6.1.0+version: 1.7.0.0 license: MIT license-file: LICENSE author: Michael Snoyman, Patrick Brisbin