mirror of
https://github.com/withastro/astro.git
synced 2024-12-16 21:46:22 -05:00
fix missing type-attribute for xsl stylesheets (#5600)
This commit is contained in:
parent
d7da0996b6
commit
c4155daeab
3 changed files with 35 additions and 1 deletions
5
.changeset/five-moose-push.md
Normal file
5
.changeset/five-moose-push.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
'@astrojs/rss': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Fix missing type-attribute in xml-stylesheet
|
|
@ -104,7 +104,8 @@ export async function generateRSS({ rssOptions, items }: GenerateRSSArgs): Promi
|
||||||
const parser = new XMLParser(xmlOptions);
|
const parser = new XMLParser(xmlOptions);
|
||||||
const root: any = { '?xml': { '@_version': '1.0', '@_encoding': 'UTF-8' } };
|
const root: any = { '?xml': { '@_version': '1.0', '@_encoding': 'UTF-8' } };
|
||||||
if (typeof rssOptions.stylesheet === 'string') {
|
if (typeof rssOptions.stylesheet === 'string') {
|
||||||
root['?xml-stylesheet'] = { '@_href': rssOptions.stylesheet, '@_encoding': 'UTF-8' };
|
const isXSL = /\.xsl$/i.test(rssOptions.stylesheet);
|
||||||
|
root['?xml-stylesheet'] = { '@_href': rssOptions.stylesheet, ...(isXSL && { '@_type': 'text/xsl' }) };
|
||||||
}
|
}
|
||||||
root.rss = { '@_version': '2.0' };
|
root.rss = { '@_version': '2.0' };
|
||||||
if (items.find((result) => result.content)) {
|
if (items.find((result) => result.content)) {
|
||||||
|
|
|
@ -47,6 +47,10 @@ const validXmlResult = `<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
|
||||||
const validXmlWithContentResult = `<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title><![CDATA[${title}]]></title><description><![CDATA[${description}]]></description><link>${site}/</link><item><title><![CDATA[${phpFeedItemWithContent.title}]]></title><link>${site}${phpFeedItemWithContent.link}/</link><guid>${site}${phpFeedItemWithContent.link}/</guid><description><![CDATA[${phpFeedItemWithContent.description}]]></description><pubDate>${new Date(phpFeedItemWithContent.pubDate).toUTCString()}</pubDate><content:encoded><![CDATA[${phpFeedItemWithContent.content}]]></content:encoded></item><item><title><![CDATA[${web1FeedItemWithContent.title}]]></title><link>${site}${web1FeedItemWithContent.link}/</link><guid>${site}${web1FeedItemWithContent.link}/</guid><description><![CDATA[${web1FeedItemWithContent.description}]]></description><pubDate>${new Date(web1FeedItemWithContent.pubDate).toUTCString()}</pubDate><content:encoded><![CDATA[${web1FeedItemWithContent.content}]]></content:encoded></item></channel></rss>`;
|
const validXmlWithContentResult = `<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title><![CDATA[${title}]]></title><description><![CDATA[${description}]]></description><link>${site}/</link><item><title><![CDATA[${phpFeedItemWithContent.title}]]></title><link>${site}${phpFeedItemWithContent.link}/</link><guid>${site}${phpFeedItemWithContent.link}/</guid><description><![CDATA[${phpFeedItemWithContent.description}]]></description><pubDate>${new Date(phpFeedItemWithContent.pubDate).toUTCString()}</pubDate><content:encoded><![CDATA[${phpFeedItemWithContent.content}]]></content:encoded></item><item><title><![CDATA[${web1FeedItemWithContent.title}]]></title><link>${site}${web1FeedItemWithContent.link}/</link><guid>${site}${web1FeedItemWithContent.link}/</guid><description><![CDATA[${web1FeedItemWithContent.description}]]></description><pubDate>${new Date(web1FeedItemWithContent.pubDate).toUTCString()}</pubDate><content:encoded><![CDATA[${web1FeedItemWithContent.content}]]></content:encoded></item></channel></rss>`;
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
const validXmlWithCustomDataResult = `<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title><![CDATA[${title}]]></title><description><![CDATA[${description}]]></description><link>${site}/</link><item><title><![CDATA[${phpFeedItemWithCustomData.title}]]></title><link>${site}${phpFeedItemWithCustomData.link}/</link><guid>${site}${phpFeedItemWithCustomData.link}/</guid><description><![CDATA[${phpFeedItemWithCustomData.description}]]></description><pubDate>${new Date(phpFeedItemWithCustomData.pubDate).toUTCString()}</pubDate>${phpFeedItemWithCustomData.customData}</item><item><title><![CDATA[${web1FeedItemWithContent.title}]]></title><link>${site}${web1FeedItemWithContent.link}/</link><guid>${site}${web1FeedItemWithContent.link}/</guid><description><![CDATA[${web1FeedItemWithContent.description}]]></description><pubDate>${new Date(web1FeedItemWithContent.pubDate).toUTCString()}</pubDate><content:encoded><![CDATA[${web1FeedItemWithContent.content}]]></content:encoded></item></channel></rss>`;
|
const validXmlWithCustomDataResult = `<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title><![CDATA[${title}]]></title><description><![CDATA[${description}]]></description><link>${site}/</link><item><title><![CDATA[${phpFeedItemWithCustomData.title}]]></title><link>${site}${phpFeedItemWithCustomData.link}/</link><guid>${site}${phpFeedItemWithCustomData.link}/</guid><description><![CDATA[${phpFeedItemWithCustomData.description}]]></description><pubDate>${new Date(phpFeedItemWithCustomData.pubDate).toUTCString()}</pubDate>${phpFeedItemWithCustomData.customData}</item><item><title><![CDATA[${web1FeedItemWithContent.title}]]></title><link>${site}${web1FeedItemWithContent.link}/</link><guid>${site}${web1FeedItemWithContent.link}/</guid><description><![CDATA[${web1FeedItemWithContent.description}]]></description><pubDate>${new Date(web1FeedItemWithContent.pubDate).toUTCString()}</pubDate><content:encoded><![CDATA[${web1FeedItemWithContent.content}]]></content:encoded></item></channel></rss>`;
|
||||||
|
// prettier-ignore
|
||||||
|
const validXmlWithStylesheet = `<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/feedstylesheet.css"?><rss version="2.0"><channel><title><![CDATA[${title}]]></title><description><![CDATA[${description}]]></description><link>${site}/</link></channel></rss>`;
|
||||||
|
// prettier-ignore
|
||||||
|
const validXmlWithXSLStylesheet = `<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/feedstylesheet.xsl" type="text/xsl"?><rss version="2.0"><channel><title><![CDATA[${title}]]></title><description><![CDATA[${description}]]></description><link>${site}/</link></channel></rss>`;
|
||||||
|
|
||||||
describe('rss', () => {
|
describe('rss', () => {
|
||||||
it('should generate on valid RSSFeedItem array', async () => {
|
it('should generate on valid RSSFeedItem array', async () => {
|
||||||
|
@ -85,6 +89,30 @@ describe('rss', () => {
|
||||||
chai.expect(body).xml.to.equal(validXmlWithCustomDataResult);
|
chai.expect(body).xml.to.equal(validXmlWithCustomDataResult);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should include xml-stylesheet instruction when stylesheet is defined', async () => {
|
||||||
|
const { body } = await rss({
|
||||||
|
title,
|
||||||
|
description,
|
||||||
|
items: [],
|
||||||
|
site,
|
||||||
|
stylesheet: '/feedstylesheet.css',
|
||||||
|
});
|
||||||
|
|
||||||
|
chai.expect(body).xml.to.equal(validXmlWithStylesheet);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should include xml-stylesheet instruction with xsl type when stylesheet is set to xsl file', async () => {
|
||||||
|
const { body } = await rss({
|
||||||
|
title,
|
||||||
|
description,
|
||||||
|
items: [],
|
||||||
|
site,
|
||||||
|
stylesheet: '/feedstylesheet.xsl',
|
||||||
|
});
|
||||||
|
|
||||||
|
chai.expect(body).xml.to.equal(validXmlWithXSLStylesheet);
|
||||||
|
});
|
||||||
|
|
||||||
describe('glob result', () => {
|
describe('glob result', () => {
|
||||||
it('should generate on valid result', async () => {
|
it('should generate on valid result', async () => {
|
||||||
const globResult = {
|
const globResult = {
|
||||||
|
|
Loading…
Reference in a new issue