diff --git a/yesod-newsfeed/ChangeLog.md b/yesod-newsfeed/ChangeLog.md
index e69de29b..e2d022ec 100644
--- a/yesod-newsfeed/ChangeLog.md
+++ b/yesod-newsfeed/ChangeLog.md
@@ -0,0 +1,23 @@
+#Changelog
+
+##2015-09-30:
+
+###Yesod/FeedTypes.hs
+
+* added `feedLogo` field to `Feed` type as `Maybe (url, Text)`. Should this field result in `Nothing`, nothing will be added to the feed.
+ * `url`: Defines the URL to the logi image
+ * `Text`: Is the description of the logo image. Will only be used for RSS feeds
+* added `feedEntryEnclosure` field to `FeedEntry` type as `Maybe (url, Int, Text)`. Should this field result in `Nothing`, no data will be added to the feed entry.
+ * `url`: Defines the URL to the enclosed data
+ * `Int`: Is the content size in bytes. RSS requires this.
+ * `Text`: Is the MIME-type of the enclosed file. RSS requires this
+
+###Yesod/AtomFeed.hs
+
+* modified `template` function to append an `url` tag at the end of the feed, when the provided `feedLogo` is not `Nothing`. This might look awkward, since it will be appended *after* the entries.
+* modified `entryTemplate` to append an `` to the feed entry.
+
+###Yesod/RssFeed.hs
+
+* modified `template` function to append an `` tag with its three required components ``, `` and ``. `` and `` will be filled from `feedLogo`, `` will be `feedLinkHome`.
+* modified `entryTemplate` function to append an `` to the feed entry
diff --git a/yesod-newsfeed/Yesod/AtomFeed.hs b/yesod-newsfeed/Yesod/AtomFeed.hs
index 26b500cf..af6a9ae7 100644
--- a/yesod-newsfeed/Yesod/AtomFeed.hs
+++ b/yesod-newsfeed/Yesod/AtomFeed.hs
@@ -70,15 +70,23 @@ template Feed {..} render =
: Element "id" Map.empty [NodeContent $ render feedLinkHome]
: Element "author" Map.empty [NodeElement $ Element "name" Map.empty [NodeContent feedAuthor]]
: map (flip entryTemplate render) feedEntries
+ ++
+ case feedLogo of
+ Nothing -> []
+ Just (route, _) -> [Element "logo" Map.empty [NodeContent $ render route]]
entryTemplate :: FeedEntry url -> (url -> Text) -> Element
-entryTemplate FeedEntry {..} render = Element "entry" Map.empty $ map NodeElement
+entryTemplate FeedEntry {..} render = Element "entry" Map.empty $ map NodeElement $
[ Element "id" Map.empty [NodeContent $ render feedEntryLink]
, Element "link" (Map.singleton "href" $ render feedEntryLink) []
, Element "updated" Map.empty [NodeContent $ formatW3 feedEntryUpdated]
, Element "title" Map.empty [NodeContent feedEntryTitle]
, Element "content" (Map.singleton "type" "html") [NodeContent $ toStrict $ renderHtml feedEntryContent]
]
+ ++
+ case feedEntryEnclosure of
+ Nothing -> []
+ Just (route, _, _) -> [Element "link" (Map.fromList [("rel", "enclosure"), ("href", render route)]) []]
-- | Generates a link tag in the head of a widget.
atomLink :: MonadWidget m
diff --git a/yesod-newsfeed/Yesod/FeedTypes.hs b/yesod-newsfeed/Yesod/FeedTypes.hs
index 33760360..fdc5d84b 100644
--- a/yesod-newsfeed/Yesod/FeedTypes.hs
+++ b/yesod-newsfeed/Yesod/FeedTypes.hs
@@ -23,6 +23,7 @@ data Feed url = Feed
, feedLanguage :: Text
, feedUpdated :: UTCTime
+ , feedLogo :: Maybe (url, Text)
, feedEntries :: [FeedEntry url]
}
@@ -32,4 +33,5 @@ data FeedEntry url = FeedEntry
, feedEntryUpdated :: UTCTime
, feedEntryTitle :: Text
, feedEntryContent :: Html
+ , feedEntryEnclosure :: Maybe (url, Int, Text)
}
diff --git a/yesod-newsfeed/Yesod/RssFeed.hs b/yesod-newsfeed/Yesod/RssFeed.hs
index 05155fca..7963276b 100644
--- a/yesod-newsfeed/Yesod/RssFeed.hs
+++ b/yesod-newsfeed/Yesod/RssFeed.hs
@@ -66,15 +66,28 @@ template Feed {..} render =
: Element "lastBuildDate" Map.empty [NodeContent $ formatRFC822 feedUpdated]
: Element "language" Map.empty [NodeContent feedLanguage]
: map (flip entryTemplate render) feedEntries
+ ++
+ case feedLogo of
+ Nothing -> []
+ Just (route, desc) -> [Element "image" Map.empty
+ [ NodeElement $ Element "url" Map.empty [NodeContent $ render route]
+ , NodeElement $ Element "title" Map.empty [NodeContent desc]
+ , NodeElement $ Element "link" Map.empty [NodeContent $ render feedLinkHome]
+ ]
+ ]
entryTemplate :: FeedEntry url -> (url -> Text) -> Element
-entryTemplate FeedEntry {..} render = Element "item" Map.empty $ map NodeElement
+entryTemplate FeedEntry {..} render = Element "item" Map.empty $ map NodeElement $
[ Element "title" Map.empty [NodeContent feedEntryTitle]
, Element "link" Map.empty [NodeContent $ render feedEntryLink]
, Element "guid" Map.empty [NodeContent $ render feedEntryLink]
, Element "pubDate" Map.empty [NodeContent $ formatRFC822 feedEntryUpdated]
, Element "description" Map.empty [NodeContent $ toStrict $ renderHtml feedEntryContent]
]
+ ++
+ case feedEntryEnclosure of
+ Nothing -> []
+ Just (route, length, mime) -> [Element "enclosure" (Map.fromList [("type", mime), ("length", pack $ show length), ("url", render route)]) []]
-- | Generates a link tag in the head of a widget.
rssLink :: MonadWidget m