diff options
author | (quasar) nebula <towerofnix@gmail.com> | 2021-06-04 16:27:15 -0300 |
---|---|---|
committer | (quasar) nebula <towerofnix@gmail.com> | 2021-06-04 16:27:15 -0300 |
commit | 9fb4baa667f76c51abc0c6469d95351f90266a6a (patch) | |
tree | 0a6e55cd98275e1a66af6abeaf082c4c10df7fc7 /src/page | |
parent | c60b3722f23d88680c7ceee72c32ef87545752ea (diff) |
module-ify tag pages
Diffstat (limited to 'src/page')
-rw-r--r-- | src/page/index.js | 3 | ||||
-rw-r--r-- | src/page/tag.js | 76 |
2 files changed, 78 insertions, 1 deletions
diff --git a/src/page/index.js b/src/page/index.js index 101a1688..f580cbea 100644 --- a/src/page/index.js +++ b/src/page/index.js @@ -47,6 +47,7 @@ export * as flash from './flash.js'; export * as group from './group.js'; export * as homepage from './homepage.js'; export * as listing from './listing.js'; -export * as static from './static.js'; export * as news from './news.js'; +export * as static from './static.js'; +export * as tag from './tag.js'; export * as track from './track.js'; diff --git a/src/page/tag.js b/src/page/tag.js new file mode 100644 index 00000000..c6f64bfc --- /dev/null +++ b/src/page/tag.js @@ -0,0 +1,76 @@ +// Art tag page specification. + +// Imports + +import fixWS from 'fix-whitespace'; + +import { + getThemeString +} from '../util/colors.js'; + +// Page exports + +export function condition({wikiData}) { + return wikiData.wikiInfo.features.artTagUI; +} + +export function targets({wikiData}) { + return wikiData.tagData.filter(tag => !tag.isCW); +} + +export function write(tag, {wikiData}) { + const { wikiInfo } = wikiData; + const { things } = tag; + + const page = { + type: 'page', + path: ['tag', tag.directory], + page: ({ + getAlbumCover, + getGridHTML, + getTrackCover, + link, + strings, + to + }) => ({ + title: strings('tagPage.title', {tag: tag.name}), + theme: getThemeString(tag.color), + + main: { + classes: ['top-index'], + content: fixWS` + <h1>${strings('tagPage.title', {tag: tag.name})}</h1> + <p class="quick-info">${strings('tagPage.infoLine', { + coverArts: strings.count.coverArts(things.length, {unit: true}) + })}</p> + <div class="grid-listing"> + ${getGridHTML({ + entries: things.map(item => ({item})), + srcFn: thing => (thing.album + ? getTrackCover(thing) + : getAlbumCover(thing)), + hrefFn: thing => (thing.album + ? to('localized.track', thing.directory) + : to('localized.album', thing.directory)) + })} + </div> + ` + }, + + nav: { + links: [ + {toHome: true}, + wikiInfo.features.listings && + { + path: ['localized.listingIndex'], + title: strings('listingIndex.title') + }, + {toCurrentPage: true} + ] + } + }) + }; + + return [page]; +} + |