mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-01-06 22:40:14 -05:00
Add media:content support to RSS
refs #2263, #4888 - Adds media:content element to Ghost Rt pSS feeds containing the post cover image if one is available - Removes the prepending of the image to the `<description>` field - Keeps the prepending of the image in `<content:encoded>`
This commit is contained in:
parent
6db9826b23
commit
14134fb4b0
3 changed files with 38 additions and 17 deletions
|
@ -505,7 +505,8 @@ frontendControllers = {
|
|||
site_url: siteUrl,
|
||||
ttl: '60',
|
||||
custom_namespaces: {
|
||||
content: 'http://purl.org/rss/1.0/modules/content/'
|
||||
content: 'http://purl.org/rss/1.0/modules/content/',
|
||||
media: 'http://search.yahoo.com/mrss/'
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -525,14 +526,11 @@ frontendControllers = {
|
|||
url: config.urlFor('post', {post: post, permalinks: permalinks}, true),
|
||||
date: post.published_at,
|
||||
categories: _.pluck(post.tags, 'name'),
|
||||
author: post.author ? post.author.name : null
|
||||
author: post.author ? post.author.name : null,
|
||||
custom_elements: []
|
||||
},
|
||||
htmlContent = cheerio.load(post.html, {decodeEntities: false});
|
||||
|
||||
if (post.image) {
|
||||
htmlContent('p').first().before('<img src="' + post.image + '" />');
|
||||
htmlContent('img').attr('alt', post.title);
|
||||
}
|
||||
htmlContent = cheerio.load(post.html, {decodeEntities: false}),
|
||||
image;
|
||||
|
||||
// convert relative resource urls to absolute
|
||||
['href', 'src'].forEach(function (attributeName) {
|
||||
|
@ -572,13 +570,31 @@ frontendControllers = {
|
|||
});
|
||||
});
|
||||
|
||||
item.custom_elements = [{
|
||||
item.description = post.meta_description || downsize(htmlContent.html(), {words: 50});
|
||||
|
||||
if (post.image) {
|
||||
image = config.urlFor('image', {image: post.image}, true);
|
||||
|
||||
// Add a media content tag
|
||||
item.custom_elements.push({
|
||||
'media:content': {
|
||||
_attr: {
|
||||
url: image,
|
||||
medium: 'image'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Also add the image to the content, because not all readers support media:content
|
||||
htmlContent('p').first().before('<img src="' + image + '" />');
|
||||
htmlContent('img').attr('alt', post.title);
|
||||
}
|
||||
|
||||
item.custom_elements.push({
|
||||
'content:encoded': {
|
||||
_cdata: htmlContent.html()
|
||||
}
|
||||
}];
|
||||
|
||||
item.description = post.meta_description || downsize(htmlContent.html(), {words: 50});
|
||||
});
|
||||
|
||||
feed.item(item);
|
||||
});
|
||||
|
|
|
@ -443,7 +443,14 @@ describe('Frontend Routing', function () {
|
|||
}).catch(done);
|
||||
});
|
||||
|
||||
it('should use meta_description where available', function (done) {
|
||||
it('should use meta_description and image where available', function (done) {
|
||||
var post1End = 'you think :)</p>]]></content:encoded>',
|
||||
post3Title = '<title><![CDATA[Short and Sweet]]>',
|
||||
post3DescStart = '<description><![CDATA[test stuff',
|
||||
post3ContentStart = '<content:encoded><![CDATA[<h2 id=\"testing\">testing</h2>\n\n' +
|
||||
'<img src=\"http:\/\/placekitten.com\/500\/200\"',
|
||||
post3Image = '<media:content url=\"http:\/\/placekitten.com\/500\/200\" medium=\"image\"\/>';
|
||||
|
||||
request.get('/rss/')
|
||||
.expect('Content-Type', 'text/xml; charset=utf-8')
|
||||
.expect('Cache-Control', testUtils.cacheRules['public'])
|
||||
|
@ -454,10 +461,6 @@ describe('Frontend Routing', function () {
|
|||
}
|
||||
|
||||
var content = res.text,
|
||||
post1End = 'you think :)</p>]]></content:encoded>',
|
||||
post3Title = '<title><![CDATA[Short and Sweet\]\]>',
|
||||
post3DescStart = '<description><![CDATA[test stuff',
|
||||
post3ContentStart = '<content:encoded><![CDATA[<h2 id=\"testing\">testing</h2>',
|
||||
endIndex = content.indexOf(post1End);
|
||||
|
||||
content.indexOf('<rss').should.be.above(0);
|
||||
|
@ -465,6 +468,7 @@ describe('Frontend Routing', function () {
|
|||
content.indexOf(post3Title).should.be.above(endIndex);
|
||||
content.indexOf(post3DescStart).should.be.above(endIndex);
|
||||
content.indexOf(post3ContentStart).should.be.above(endIndex);
|
||||
content.indexOf(post3Image).should.be.above(endIndex);
|
||||
content.indexOf('</rss>').should.be.above(0);
|
||||
|
||||
done();
|
||||
|
|
|
@ -23,6 +23,7 @@ DataGenerator.Content = {
|
|||
slug: "short-and-sweet",
|
||||
markdown: "## testing\n\nmctesters\n\n- test\n- line\n- items",
|
||||
html: "<h2 id=\"testing\">testing</h2>\n\n<p>mctesters</p>\n\n<ul>\n<li>test</li>\n<li>line</li>\n<li>items</li>\n</ul>",
|
||||
image: "http://placekitten.com/500/200",
|
||||
meta_description: "test stuff",
|
||||
published_at: new Date("2015-01-03")
|
||||
},
|
||||
|
|
Loading…
Reference in a new issue