// News entry & index page specifications.
// Imports
import fixWS from 'fix-whitespace';
// Page exports
export function condition({wikiData}) {
return wikiData.wikiInfo.features.news;
}
export function targets({wikiData}) {
return wikiData.newsData;
}
export function write(entry, {wikiData}) {
const page = {
type: 'page',
path: ['newsEntry', entry.directory],
page: ({
generatePreviousNextLinks,
link,
strings,
transformMultiline,
}) => ({
title: strings('newsEntryPage.title', {entry: entry.name}),
main: {
content: fixWS`
${strings('newsEntryPage.title', {entry: entry.name})}
${strings('newsEntryPage.published', {date: strings.count.date(entry.date)})}
${transformMultiline(entry.body)}
`
},
nav: generateNewsEntryNav(entry, {
generatePreviousNextLinks,
link,
strings,
wikiData
})
})
};
return [page];
}
export function writeTargetless({wikiData}) {
const { newsData } = wikiData;
const page = {
type: 'page',
path: ['newsIndex'],
page: ({
link,
strings,
transformMultiline
}) => ({
title: strings('newsIndex.title'),
main: {
content: fixWS`
${strings('newsIndex.title')}
${newsData.map(entry => fixWS`
${link.newsEntry(entry)}
${transformMultiline(entry.bodyShort)}
${entry.bodyShort !== entry.body && `${link.newsEntry(entry, {
text: strings('newsIndex.entry.viewRest')
})}
`}
`).join('\n')}
`
},
nav: {simple: true}
})
};
return [page];
}
// Utility functions
function generateNewsEntryNav(entry, {
generatePreviousNextLinks,
link,
strings,
wikiData
}) {
const { wikiInfo, newsData } = wikiData;
// The newsData list is sorted reverse chronologically (newest ones first),
// so the way we find next/previous entries is flipped from normal.
const previousNextLinks = generatePreviousNextLinks(entry, {
link, strings,
data: newsData.slice().reverse(),
linkKey: 'newsEntry'
});
return {
links: [
{
path: ['localized.home'],
title: wikiInfo.shortName
},
{
path: ['localized.newsIndex'],
title: strings('newsEntryPage.nav.news')
},
{
html: strings('newsEntryPage.nav.entry', {
date: strings.count.date(entry.date),
entry: link.newsEntry(entry, {class: 'current'})
})
},
previousNextLinks &&
{
divider: false,
html: `(${previousNextLinks})`
}
]
};
}