diff options
Diffstat (limited to 'src/content/dependencies/generateTrackListDividedByGroups.js')
-rw-r--r-- | src/content/dependencies/generateTrackListDividedByGroups.js | 121 |
1 files changed, 67 insertions, 54 deletions
diff --git a/src/content/dependencies/generateTrackListDividedByGroups.js b/src/content/dependencies/generateTrackListDividedByGroups.js index 327865f0..230868d6 100644 --- a/src/content/dependencies/generateTrackListDividedByGroups.js +++ b/src/content/dependencies/generateTrackListDividedByGroups.js @@ -7,9 +7,16 @@ export default { 'linkGroup', ], - extraDependencies: ['html', 'language'], + extraDependencies: ['html', 'language', 'wikiData'], + + sprawl: ({wikiInfo}) => ({ + divideTrackListsByGroups: + wikiInfo.divideTrackListsByGroups, + }), + + query(sprawl, tracks) { + const dividingGroups = sprawl.divideTrackListsByGroups; - query(tracks, dividingGroups) { const groupings = new Map(); const ungroupedTracks = []; @@ -43,9 +50,9 @@ export default { return {groups, groupedTracks, ungroupedTracks}; }, - relations: (relation, query, tracks, groups) => ({ + relations: (relation, query, sprawl, tracks) => ({ flatList: - (empty(groups) + (empty(sprawl.divideTrackListsByGroups) ? relation('generateTrackList', tracks) : null), @@ -66,7 +73,7 @@ export default { : relation('generateTrackList', query.ungroupedTracks)), }), - data: (query) => ({ + data: (query, _sprawl, _tracks) => ({ groupNames: query.groups .map(group => group.name), @@ -80,53 +87,59 @@ export default { generate: (data, relations, slots, {html, language}) => relations.flatList ?? - html.tag('dl', [ - stitchArrays({ - groupName: data.groupNames, - groupLink: relations.groupLinks, - trackList: relations.groupedTrackLists, - }).map(({ - groupName, - groupLink, - trackList, - }) => [ - (slots.headingString - ? relations.contentHeading.clone().slots({ - tag: 'dt', - - title: - language.$('trackList.fromGroup', { - group: groupLink - }), - - stickyTitle: - language.$(slots.headingString, 'sticky', 'fromGroup', { - group: groupName, - }), - }) - : html.tag('dt', - language.$('trackList.fromGroup', { - group: groupLink - }))), - - html.tag('dd', trackList), - ]), - - relations.ungroupedTrackList && [ - (slots.headingString - ? relations.contentHeading.clone().slots({ - tag: 'dt', - - title: - language.$('trackList.fromOther'), - - stickyTitle: - language.$(slots.headingString, 'sticky', 'fromOther'), - }) - : html.tag('dt', - language.$('trackList.fromOther'))), - - html.tag('dd', relations.ungroupedTrackList), - ], - ]), + + html.tag('dl', + {[html.onlyIfContent]: true}, + + language.encapsulate('trackList', listCapsule => [ + stitchArrays({ + groupName: data.groupNames, + groupLink: relations.groupLinks, + trackList: relations.groupedTrackLists, + }).map(({ + groupName, + groupLink, + trackList, + }) => [ + language.encapsulate(listCapsule, 'fromGroup', capsule => + (slots.headingString + ? relations.contentHeading.clone().slots({ + tag: 'dt', + + title: + language.$(capsule, { + group: groupLink + }), + + stickyTitle: + language.$(slots.headingString, 'sticky', 'fromGroup', { + group: groupName, + }), + }) + : html.tag('dt', + language.$(capsule, { + group: groupLink + })))), + + html.tag('dd', trackList), + ]), + + relations.ungroupedTrackList && [ + language.encapsulate(listCapsule, 'fromOther', capsule => + (slots.headingString + ? relations.contentHeading.clone().slots({ + tag: 'dt', + + title: + language.$(capsule), + + stickyTitle: + language.$(slots.headingString, 'sticky', 'fromOther'), + }) + : html.tag('dt', + language.$(capsule)))), + + html.tag('dd', relations.ungroupedTrackList), + ], + ])), }; |