diff options
Diffstat (limited to 'src/content/dependencies/generateAlbumCommentarySidebar.js')
-rw-r--r-- | src/content/dependencies/generateAlbumCommentarySidebar.js | 62 |
1 files changed, 43 insertions, 19 deletions
diff --git a/src/content/dependencies/generateAlbumCommentarySidebar.js b/src/content/dependencies/generateAlbumCommentarySidebar.js index 435860cb..8313e6de 100644 --- a/src/content/dependencies/generateAlbumCommentarySidebar.js +++ b/src/content/dependencies/generateAlbumCommentarySidebar.js @@ -6,7 +6,7 @@ export default { 'linkAlbum', ], - extraDependencies: ['html'], + extraDependencies: ['html', 'language'], relations: (relation, album) => ({ sidebar: @@ -26,22 +26,46 @@ export default { trackSection)), }), - generate: (relations, {html}) => - relations.sidebar.slots({ - stickyMode: 'column', - boxes: [ - relations.sidebarBox.slots({ - attributes: {class: 'commentary-track-list-sidebar-box'}, - content: [ - html.tag('h1', relations.albumLink), - relations.trackSections.map(section => - section.slots({ - anchor: true, - open: true, - mode: 'commentary', - })), - ], - }), - ] - }), + data: (album) => ({ + albumHasCommentary: + !!album.commentary, + + anyTrackHasCommentary: + album.tracks.some(track => track.commentary), + }), + + generate: (data, relations, {html, language}) => + language.encapsulate('albumCommentaryPage', pageCapsule => + relations.sidebar.slots({ + stickyMode: 'column', + boxes: [ + relations.sidebarBox.slots({ + attributes: {class: 'commentary-track-list-sidebar-box'}, + content: [ + html.tag('h1', relations.albumLink), + + html.tag('p', {[html.onlyIfContent]: true}, + language.encapsulate(pageCapsule, 'sidebar', workingCapsule => { + if (data.anyTrackHasCommentary) return html.blank(); + + if (data.albumHasCommentary) { + workingCapsule += '.noTrackCommentary'; + } else { + workingCapsule += '.noCommentary'; + } + + return language.$(workingCapsule); + })), + + data.anyTrackHasCommentary && + relations.trackSections.map(section => + section.slots({ + anchor: true, + open: true, + mode: 'commentary', + })), + ], + }), + ] + })), } |