From fbbafa606f12b0ecf3ac89918b424f0ec4a8de4e Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Fri, 7 Jul 2023 12:28:40 -0300 Subject: content: listGroupsByName, listing feature flags --- .../dependencies/generateListingIndexList.js | 7 +-- src/content/dependencies/listGroupsByName.js | 49 ++++++++++++++++++++ src/listing-spec.js | 52 +++++----------------- src/page/listing.js | 5 ++- 4 files changed, 68 insertions(+), 45 deletions(-) create mode 100644 src/content/dependencies/listGroupsByName.js diff --git a/src/content/dependencies/generateListingIndexList.js b/src/content/dependencies/generateListingIndexList.js index 32125955..e4a2f5c7 100644 --- a/src/content/dependencies/generateListingIndexList.js +++ b/src/content/dependencies/generateListingIndexList.js @@ -14,9 +14,10 @@ export default { const targetListings = sprawl.listingTargetSpec .map(({listings}) => - listings.filter(({condition: c}) => - !c || - c({wikiData: {wikiInfo: sprawl.wikiInfo}}))); + listings + .filter(listing => + !listing.featureFlag || + sprawl.wikiInfo[listing.featureFlag])); query.wikiColor = sprawl.wikiInfo.color; diff --git a/src/content/dependencies/listGroupsByName.js b/src/content/dependencies/listGroupsByName.js new file mode 100644 index 00000000..df35937b --- /dev/null +++ b/src/content/dependencies/listGroupsByName.js @@ -0,0 +1,49 @@ +import {stitchArrays} from '../../util/sugar.js'; +import {sortAlphabetically} from '../../util/wiki-data.js'; + +export default { + contentDependencies: ['generateListingPage', 'linkGroup', 'linkGroupGallery'], + extraDependencies: ['language', 'wikiData'], + + sprawl({groupData}) { + return {groupData}; + }, + + query({groupData}, spec) { + return { + spec, + + groups: sortAlphabetically(groupData.slice()), + }; + }, + + relations(relation, query) { + return { + page: relation('generateListingPage', query.spec), + + infoLinks: + query.groups + .map(group => relation('linkGroup', group)), + + galleryLinks: + query.groups + .map(group => relation('linkGroupGallery', group)), + }; + }, + + generate(relations, {language}) { + return relations.page.slots({ + type: 'rows', + rows: + stitchArrays({ + infoLink: relations.infoLinks, + galleryLink: relations.galleryLinks, + }).map(({infoLink, galleryLink}) => ({ + group: infoLink, + gallery: + galleryLink + .slot('content', language.$('listingPage.listGroups.byName.item.gallery')), + })), + }); + }, +}; diff --git a/src/listing-spec.js b/src/listing-spec.js index 17cde53f..88b0d9b4 100644 --- a/src/listing-spec.js +++ b/src/listing-spec.js @@ -89,28 +89,14 @@ listingSpec.push({ listingSpec.push({ directory: 'groups/by-name', stringsKey: 'listGroups.byName', - - condition: ({wikiData: {wikiInfo}}) => - wikiInfo.enableGroupUI, - - data: ({wikiData: {groupData}}) => - sortAlphabetically(groupData.slice()), - - row: (group, {language, link}) => - language.$('listingPage.listGroups.byCategory.group', { - group: link.groupInfo(group), - gallery: link.groupGallery(group, { - text: language.$('listingPage.listGroups.byCategory.group.gallery'), - }), - }), + contentFunction: 'listGroupsByName', + featureFlag: 'enableGroupUI', }); listingSpec.push({ directory: 'groups/by-category', stringsKey: 'listGroups.byCategory', - - condition: ({wikiData: {wikiInfo}}) => - wikiInfo.enableGroupUI, + featureFlag: 'enableGroupUI', data: ({wikiData: {groupCategoryData}}) => groupCategoryData @@ -150,9 +136,7 @@ listingSpec.push({ listingSpec.push({ directory: 'groups/by-albums', stringsKey: 'listGroups.byAlbums', - - condition: ({wikiData: {wikiInfo}}) => - wikiInfo.enableGroupUI, + featureFlag: 'enableGroupUI', data: ({wikiData: {groupData}}) => groupData @@ -172,9 +156,7 @@ listingSpec.push({ listingSpec.push({ directory: 'groups/by-tracks', stringsKey: 'listGroups.byTracks', - - condition: ({wikiData: {wikiInfo}}) => - wikiInfo.enableGroupUI, + featureFlag: 'enableGroupUI', data: ({wikiData: {groupData}}) => groupData @@ -196,9 +178,7 @@ listingSpec.push({ listingSpec.push({ directory: 'groups/by-duration', stringsKey: 'listGroups.byDuration', - - condition: ({wikiData: {wikiInfo}}) => - wikiInfo.enableGroupUI, + featureFlag: 'enableGroupUI', data: ({wikiData: {groupData}}) => groupData @@ -221,9 +201,7 @@ listingSpec.push({ listingSpec.push({ directory: 'groups/by-latest-album', stringsKey: 'listGroups.byLatest', - - condition: ({wikiData: {wikiInfo}}) => - wikiInfo.enableGroupUI, + featureFlag: 'enableGroupUI', data: ({wikiData: {groupData}}) => sortChronologically( @@ -403,9 +381,7 @@ listingSpec.push({ listingSpec.push({ directory: 'tracks/in-flashes/by-album', stringsKey: 'listTracks.inFlashes.byAlbum', - - condition: ({wikiData: {wikiInfo}}) => - wikiInfo.enableFlashesAndGames, + featureFlag: 'enableFlashesAndGames', data: ({wikiData: {trackData}}) => chunkByProperties( @@ -437,9 +413,7 @@ listingSpec.push({ listingSpec.push({ directory: 'tracks/in-flashes/by-flash', stringsKey: 'listTracks.inFlashes.byFlash', - - condition: ({wikiData: {wikiInfo}}) => - wikiInfo.enableFlashesAndGames, + featureFlag: 'enableFlashesAndGames', data: ({wikiData: {flashData}}) => sortFlashesChronologically(flashData.slice()) @@ -538,9 +512,7 @@ listingSpec.push(listTracksWithProperty('midiProjectFiles', { listingSpec.push({ directory: 'tags/by-name', stringsKey: 'listTags.byName', - - condition: ({wikiData: {wikiInfo}}) => - wikiInfo.enableArtTagUI, + featureFlag: 'enableArtTagUI', data: ({wikiData: {artTagData}}) => sortAlphabetically( @@ -565,9 +537,7 @@ listingSpec.push({ listingSpec.push({ directory: 'tags/by-uses', stringsKey: 'listTags.byUses', - - condition: ({wikiData: {wikiInfo}}) => - wikiInfo.enableArtTagUI, + featureFlag: 'enableArtTagUI', data: ({wikiData: {artTagData}}) => artTagData diff --git a/src/page/listing.js b/src/page/listing.js index c770f825..1db7aa7b 100644 --- a/src/page/listing.js +++ b/src/page/listing.js @@ -17,7 +17,10 @@ export const description = `wiki-wide listing pages & index`; export function targets({wikiData}) { return ( wikiData.listingSpec - .filter(listing => listing.contentFunction)); + .filter(listing => listing.contentFunction) + .filter(listing => + !listing.featureFlag || + wikiData.wikiInfo[listing.featureFlag])); } export function pathsForTarget(listing) { -- cgit 1.3.0-6-gf8a5