diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2025-02-11 11:12:07 -0400 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2025-02-12 07:43:59 -0400 |
commit | c45d45759395725128c030ac387bb20b80aada1e (patch) | |
tree | dd71e8354268ca5c48101b0b225144db982cc5cb /src/data | |
parent | 19d9c3a3d16ed08b2d0c9e09259ffb79a27cd3e9 (diff) |
content, data: generateWikiHomepageAlbum{Carousel,Grid}Row
Diffstat (limited to 'src/data')
-rw-r--r-- | src/data/checks.js | 7 | ||||
-rw-r--r-- | src/data/things/homepage-layout.js | 46 |
2 files changed, 37 insertions, 16 deletions
diff --git a/src/data/checks.js b/src/data/checks.js index e8a83c61..58f9daee 100644 --- a/src/data/checks.js +++ b/src/data/checks.js @@ -197,7 +197,12 @@ export function filterReferenceErrors(wikiData, { }], ['homepageLayout.sections.rows', { - _include: row => row.type === 'albums', + _include: row => row.type === 'album carousel', + albums: 'album', + }], + + ['homepageLayout.sections.rows', { + _include: row => row.type === 'album grid', sourceGroup: '_homepageSourceGroup', sourceAlbums: 'album', }], diff --git a/src/data/things/homepage-layout.js b/src/data/things/homepage-layout.js index fa352ae7..45059370 100644 --- a/src/data/things/homepage-layout.js +++ b/src/data/things/homepage-layout.js @@ -82,8 +82,10 @@ export class HomepageLayout extends Thing { switch (document['Row']) { case 'actions': return HomepageLayoutActionsRow; - case 'albums': - return HomepageLayoutAlbumsRow; + case 'album carousel': + return HomepageLayoutAlbumCarouselRow; + case 'album grid': + return HomepageLayoutAlbumGridRow; default: throw new TypeError(`Unrecognized row type ${document['Row']}`); } @@ -240,26 +242,41 @@ export class HomepageLayoutActionsRow extends HomepageLayoutRow { }); } -export class HomepageLayoutAlbumsRow extends HomepageLayoutRow { - static [Thing.friendlyName] = `Homepage Albums Row`; +export class HomepageLayoutAlbumCarouselRow extends HomepageLayoutRow { + static [Thing.friendlyName] = `Homepage Album Carousel Row`; static [Thing.getPropertyDescriptors] = (opts, {Album, Group} = opts) => ({ ...HomepageLayoutRow[Thing.getPropertyDescriptors](opts), // Update & expose - displayStyle: { - flags: {update: true, expose: true}, + albums: referenceList({ + class: input.value(Album), + find: soupyFind.input('album'), + }), - update: { - validate: is('grid', 'carousel'), - }, + // Expose only - expose: { - transform: (displayStyle) => - displayStyle ?? 'grid', - }, + type: { + flags: {expose: true}, + expose: {compute: () => 'album carousel'}, }, + }); + + static [Thing.yamlDocumentSpec] = Thing.extendDocumentSpec(HomepageLayoutRow, { + fields: { + 'Albums': {property: 'albums'}, + }, + }); +} + +export class HomepageLayoutAlbumGridRow extends HomepageLayoutRow { + static [Thing.friendlyName] = `Homepage Album Grid Row`; + + static [Thing.getPropertyDescriptors] = (opts, {Album, Group} = opts) => ({ + ...HomepageLayoutRow[Thing.getPropertyDescriptors](opts), + + // Update & expose sourceGroup: [ { @@ -302,13 +319,12 @@ export class HomepageLayoutAlbumsRow extends HomepageLayoutRow { type: { flags: {expose: true}, - expose: {compute: () => 'albums'}, + expose: {compute: () => 'album grid'}, }, }); static [Thing.yamlDocumentSpec] = Thing.extendDocumentSpec(HomepageLayoutRow, { fields: { - 'Display Style': {property: 'displayStyle'}, 'Group': {property: 'sourceGroup'}, 'Count': {property: 'countAlbumsFromGroup'}, 'Albums': {property: 'sourceAlbums'}, |