Добавлена опция relatedfinity для формирования непрерывной ленты статей

This commit is contained in:
la
2018-05-30 14:53:25 +03:00
parent 4b0f033aa9
commit c65b6ccc12
5 changed files with 66 additions and 19 deletions

View File

@@ -17,22 +17,27 @@ function ifTruePush(condition, array, data) {
/** /**
* @param related * @param related
* @param itemValues * @param itemValues
* @param relatedfinity
*/ */
function addRelated(related, itemValues) { function addRelated(related, itemValues, relatedfinity) {
ifTruePush(related, itemValues, { let relatedResult = related.map(function (rel) {
'yandex:related': related.map( return {
function (rel) { link: [{
return { _attr: {
link: [{ 'url': rel.link,
_attr: { 'img': rel.image_url
'url': rel.link, }
'img': rel.image_url }, rel.text]
} };
}, rel.text]
};
}
)
}); });
if (relatedfinity) {
relatedResult.push({
_attr: {'type': 'infinity'}
});
}
ifTruePush(related, itemValues, {'yandex:related': relatedResult});
} }
/** /**
@@ -66,7 +71,7 @@ function items(items, channel) {
item_values.push({'turbo:content': {_cdata: fullContent}}); item_values.push({'turbo:content': {_cdata: fullContent}});
if (typeof item.related !== 'undefined') { if (typeof item.related !== 'undefined') {
addRelated(item.related, item_values); addRelated(item.related, item_values, item.relatedfinity);
} }
channel.push({item: item_values}); channel.push({item: item_values});
@@ -128,7 +133,8 @@ function YTurbo(options, items) {
date: data.date || data.pubDate, date: data.date || data.pubDate,
content: data.content, content: data.content,
menu: data.menu, menu: data.menu,
related: data.related related: data.related,
relatedfinity: data.relatedfinity || false,
}; };
this.items.push(item); this.items.push(item);

View File

@@ -45,10 +45,18 @@ feed.item(itemOptions);
* `author` _optional_ **string** Автор статьи, размещенной на странице. * `author` _optional_ **string** Автор статьи, размещенной на странице.
* `date` **string** Время публикации контента на сайте источника. * `date` **string** Время публикации контента на сайте источника.
* `content` **string** Содержимое страницы * `content` **string** Содержимое страницы
* `related` _optional_ **object** Аффилированные ссылки `yandex:related` в конце статьи. * `related` _optional_ **array** Аффилированные ссылки `yandex:related` в конце статьи.
* `relatedfinity` _optional_ **bool** Непрерывная лента статей
*Будет добавлено в новых версиях turbo:source, turbo:topic, menu, pubDate как алиас date* *Будет добавлено в новых версиях turbo:source, turbo:topic, menu, pubDate как алиас date*
###### related array
related должен содержать массив объектов со следующими опциями:
* `link` **string** ссылка на статью'
* `image_url` **string** ссылка на изображение к статье
* `text` **string** текст ссылки
##### Получение XML ##### Получение XML
```js ```js

View File

@@ -1 +1 @@
<rss xmlns:yandex="http://news.yandex.ru" xmlns:media="http://search.yahoo.com/mrss/" xmlns:turbo="http://turbo.yandex.ru" version="2.0"><channel><title><![CDATA[title]]></title><link>http://example.com/rss.xml</link><description><![CDATA[description]]></description><language>ru</language><item turbo="true"><link>http://example.com/article4?this&amp;that</link><turbo:source>http://example.com/article4?this&amp;that</turbo:source><pubDate>Sat, 26 May 2018 21:00:00 GMT</pubDate><author>LightAir</author><turbo:content><![CDATA[<header><figure><img src="http://example.com/example.png" /></figure> <h1>item title</h1></header><p>hello</p>]]></turbo:content><yandex:related><link url="http://example.com/related/post1" img="http://example.com/i/img1.jpg">related link text 1</link><link url="http://example.com/related/post2" img="http://example.com/i/img2.jpg">related link text 2</link></yandex:related></item></channel></rss> <rss xmlns:yandex="http://news.yandex.ru" xmlns:media="http://search.yahoo.com/mrss/" xmlns:turbo="http://turbo.yandex.ru" version="2.0"><channel><title><![CDATA[title]]></title><link>http://example.com/rss.xml</link><description><![CDATA[description]]></description><language>ru</language><item turbo="true"><link>http://example.com/article4?this&amp;that</link><turbo:source>http://example.com/article4?this&amp;that</turbo:source><pubDate>Sat, 26 May 2018 21:00:00 GMT</pubDate><author>LightAir</author><turbo:content><![CDATA[<header><figure><img src="http://example.com/example.png" /></figure> <h1>item title</h1><menu><a href="http://example.com/page1.html">Текст ссылки</a> <a href="http://example.com/page2.html">Текст ссылки</a></menu></header><p>hello</p>]]></turbo:content><yandex:related><link url="http://example.com/related/post1" img="http://example.com/i/img1.jpg">related link text 1</link><link url="http://example.com/related/post2" img="http://example.com/i/img2.jpg">related link text 2</link></yandex:related></item></channel></rss>

View File

@@ -0,0 +1 @@
<rss xmlns:yandex="http://news.yandex.ru" xmlns:media="http://search.yahoo.com/mrss/" xmlns:turbo="http://turbo.yandex.ru" version="2.0"><channel><title><![CDATA[title]]></title><link>http://example.com/rss.xml</link><description><![CDATA[description]]></description><language>ru</language><item turbo="true"><link>http://example.com/article4?this&amp;that</link><turbo:source>http://example.com/article4?this&amp;that</turbo:source><pubDate>Sat, 26 May 2018 21:00:00 GMT</pubDate><author>LightAir</author><turbo:content><![CDATA[<header><figure><img src="http://example.com/example.png" /></figure> <h1>item title</h1></header><p>hello</p>]]></turbo:content><yandex:related type="infinity"><link url="http://example.com/related/post1" img="http://example.com/i/img1.jpg">related link text 1</link><link url="http://example.com/related/post2" img="http://example.com/i/img2.jpg">related link text 2</link></yandex:related></item></channel></rss>

View File

@@ -46,6 +46,7 @@ test('related item', function(t) {
url: 'http://example.com/article4?this&that', url: 'http://example.com/article4?this&that',
author: 'LightAir', author: 'LightAir',
date: 'May 27, 2018 00:00 AM', date: 'May 27, 2018 00:00 AM',
menu: '<a href="http://example.com/page1.html">Текст ссылки</a> <a href="http://example.com/page2.html">Текст ссылки</a>',
content: '<p>hello</p>', content: '<p>hello</p>',
related: [{ related: [{
link: 'http://example.com/related/post1', link: 'http://example.com/related/post1',
@@ -60,3 +61,34 @@ test('related item', function(t) {
t.equal(feed.xml(), expectedOutput.relatedItem.trim()); t.equal(feed.xml(), expectedOutput.relatedItem.trim());
}); });
test('related item', function(t) {
t.plan(1);
let feed = new YTurbo({
title: 'title',
description: 'description',
link: 'http://example.com/rss.xml',
site_url: 'http://example.com'
});
feed.item({
title: 'item title',
image_url: 'http://example.com/example.png',
url: 'http://example.com/article4?this&that',
author: 'LightAir',
date: 'May 27, 2018 00:00 AM',
content: '<p>hello</p>',
relatedfinity: true,
related: [{
link: 'http://example.com/related/post1',
image_url: 'http://example.com/i/img1.jpg',
text: 'related link text 1'
}, {
link: 'http://example.com/related/post2',
image_url: 'http://example.com/i/img2.jpg',
text: 'related link text 2'
}]
});
t.equal(feed.xml(), expectedOutput.relatedItemInfinity.trim());
});