diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2023-07-26 10:13:46 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2023-07-26 10:15:23 -0300 |
commit | bce6a52f44b6be8de1d7ed42150d051c25e63fb7 (patch) | |
tree | 3cb4b95fe277c37b3bba540f866ab5a2f02525f1 /src/content/dependencies/generateWikiHomeNewsBox.js | |
parent | 40b607ef6f0500d36d1e7541b4229e45c866d5ae (diff) |
content: generateWikiHomePage (layout besides content)
Diffstat (limited to 'src/content/dependencies/generateWikiHomeNewsBox.js')
-rw-r--r-- | src/content/dependencies/generateWikiHomeNewsBox.js | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/content/dependencies/generateWikiHomeNewsBox.js b/src/content/dependencies/generateWikiHomeNewsBox.js new file mode 100644 index 00000000..a1efb810 --- /dev/null +++ b/src/content/dependencies/generateWikiHomeNewsBox.js @@ -0,0 +1,76 @@ +import {empty, stitchArrays} from '../../util/sugar.js'; + +export default { + contentDependencies: ['linkNewsEntry', 'transformContent'], + extraDependencies: ['html', 'language', 'wikiData'], + + sprawl({newsData}) { + return { + entries: newsData.slice(0, 3), + }; + }, + + relations(relation, sprawl) { + return { + entryContents: + sprawl.entries + .map(entry => relation('transformContent', entry.contentShort)), + + entryMainLinks: + sprawl.entries + .map(entry => relation('linkNewsEntry', entry)), + + entryReadMoreLinks: + sprawl.entries + .map(entry => + entry.contentShort !== entry.content && + relation('linkNewsEntry', entry)), + }; + }, + + data(sprawl) { + return { + entryDates: + sprawl.entries + .map(entry => entry.date), + } + }, + + generate(data, relations, {html, language}) { + if (empty(relations.entryContents)) { + return html.blank(); + } + + return { + content: [ + html.tag('h1', language.$('homepage.news.title')), + + stitchArrays({ + date: data.entryDates, + content: relations.entryContents, + mainLink: relations.entryMainLinks, + readMoreLink: relations.entryReadMoreLinks, + }).map(({ + date, + content, + mainLink, + readMoreLink, + }, index) => + html.tag('article', + {class: ['news-entry', index === 0 && 'first-news-entry']}, + [ + html.tag('h2', [ + html.tag('time', language.formatDate(date)), + mainLink, + ]), + + content.slot('thumb', 'medium'), + + readMoreLink?.slots({ + content: language.$('homepage.news.entry.viewRest'), + }), + ])), + ], + }; + }, +}; |