From 6c256d71e923b6301037c843a34f4a893f787b96 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Wed, 31 Jul 2024 09:28:25 -0300 Subject: [PATCH 1/3] data: TrackSection.description --- src/data/things/album.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/data/things/album.js b/src/data/things/album.js index 9c4416b65..ee99c8144 100644 --- a/src/data/things/album.js +++ b/src/data/things/album.js @@ -31,6 +31,7 @@ import { commentary, color, commentatorArtists, + contentString, contribsPresent, contributionList, dimensions, @@ -524,6 +525,8 @@ export class TrackSection extends Thing { isDefaultTrackSection: flag(false), + description: contentString(), + album: [ withAlbum(), exposeDependency({dependency: '#album'}), @@ -637,6 +640,8 @@ export class TrackSection extends Thing { property: 'dateOriginallyReleased', transform: parseDate, }, + + 'Description': {property: 'description'}, }, }; From dd3ab6268bc13d259e6d5fe38bb326d50291b227 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Wed, 31 Jul 2024 09:33:35 -0300 Subject: [PATCH 2/3] content, css: generateAlbumTrackList: track section descriptions --- .../dependencies/generateAlbumTrackList.js | 22 ++++++++++++++++--- src/static/css/site.css | 14 ++++++++++++ 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/content/dependencies/generateAlbumTrackList.js b/src/content/dependencies/generateAlbumTrackList.js index a3435beac..9743c750d 100644 --- a/src/content/dependencies/generateAlbumTrackList.js +++ b/src/content/dependencies/generateAlbumTrackList.js @@ -35,7 +35,12 @@ function getDisplayMode(album) { } export default { - contentDependencies: ['generateAlbumTrackListItem', 'generateContentHeading'], + contentDependencies: [ + 'generateAlbumTrackListItem', + 'generateContentHeading', + 'transformContent', + ], + extraDependencies: ['html', 'language'], query(album) { @@ -53,6 +58,10 @@ export default { album.trackSections.map(() => relation('generateContentHeading')); + relations.trackSectionDescriptions = + album.trackSections.map(section => + relation('transformContent', section.description)); + relations.trackSectionItems = album.trackSections.map(section => section.tracks.map(track => @@ -132,6 +141,7 @@ export default { return html.tag('dl', {class: 'album-group-list'}, stitchArrays({ heading: relations.trackSectionHeadings, + description: relations.trackSectionDescriptions, items: relations.trackSectionItems, name: data.trackSectionNames, @@ -140,6 +150,7 @@ export default { startIndex: data.trackSectionStartIndices, }).map(({ heading, + description, items, name, @@ -172,12 +183,17 @@ export default { }), })), - html.tag('dd', + html.tag('dd', [ + html.tag('blockquote', + {[html.onlyIfContent]: true}, + description), + html.tag(listTag, data.hasTrackNumbers && {start: startIndex + 1}, - slotItems(items))), + slotItems(items)), + ]), ])); case 'tracks': diff --git a/src/static/css/site.css b/src/static/css/site.css index 8d3ab0aec..927491100 100644 --- a/src/static/css/site.css +++ b/src/static/css/site.css @@ -1528,6 +1528,20 @@ ul > li.has-details { margin-left: 0; } +.album-group-list blockquote { + max-width: 540px; + margin-bottom: 9px; + margin-top: 3px; +} + +.album-group-list blockquote p:first-child { + margin-top: 0; +} + +.album-group-list blockquote p:last-child { + margin-bottom: 0; +} + .group-chronology-link { font-style: oblique; } From 4c3caa297be6f73f07821d2dab4071cf239712b4 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Wed, 31 Jul 2024 09:33:53 -0300 Subject: [PATCH 3/3] test: generateAlbumTrackList: track sections (snapshot) --- .../generateAlbumTrackList.js.test.cjs | 25 +++++++++++++++++++ test/snapshot/generateAlbumTrackList.js | 18 +++++++++++++ 2 files changed, 43 insertions(+) diff --git a/tap-snapshots/test/snapshot/generateAlbumTrackList.js.test.cjs b/tap-snapshots/test/snapshot/generateAlbumTrackList.js.test.cjs index 10ab17c46..40a8017dc 100644 --- a/tap-snapshots/test/snapshot/generateAlbumTrackList.js.test.cjs +++ b/tap-snapshots/test/snapshot/generateAlbumTrackList.js.test.cjs @@ -14,6 +14,31 @@ exports[`test/snapshot/generateAlbumTrackList.js > TAP > generateAlbumTrackList ` +exports[`test/snapshot/generateAlbumTrackList.js > TAP > generateAlbumTrackList (snapshot) > basic behavior, with descriptions 1`] = ` +
+
+ First section: (~1:00) + +
+
+

Why yes!

+
    +
  • (0:20) Track 1
  • +
  • [mocked: generateAlbumTrackListMissingDuration - slots: {}] Track 2
  • +
  • (0:40) Track 3
  • +
+
+
+ Second section: + +
+
+

How contentful, this is.

+ +
+
+` + exports[`test/snapshot/generateAlbumTrackList.js > TAP > generateAlbumTrackList (snapshot) > basic behavior, with track sections 1`] = `
diff --git a/test/snapshot/generateAlbumTrackList.js b/test/snapshot/generateAlbumTrackList.js index a7c3f591d..e09f1c4a4 100644 --- a/test/snapshot/generateAlbumTrackList.js +++ b/test/snapshot/generateAlbumTrackList.js @@ -6,6 +6,9 @@ testContentFunctions(t, 'generateAlbumTrackList (snapshot)', async (t, evaluate) mock: { generateAlbumTrackListMissingDuration: evaluate.stubContentFunction('generateAlbumTrackListMissingDuration'), + + image: + evaluate.stubContentFunction('image'), }, }); @@ -46,6 +49,16 @@ testContentFunctions(t, 'generateAlbumTrackList (snapshot)', async (t, evaluate) tracks, }; + const albumWithTrackSectionDescriptions = { + color: color1, + artistContribs: contribs1, + trackSections: [ + {name: 'First section', tracks: tracks.slice(0, 3), description: `Why yes!`}, + {name: 'Second section', tracks: tracks.slice(3), description: `How *contentful,* this is.`}, + ], + tracks, + }; + const albumWithNoDuration = { color: color1, artistContribs: contribs1, @@ -63,6 +76,11 @@ testContentFunctions(t, 'generateAlbumTrackList (snapshot)', async (t, evaluate) args: [albumWithoutTrackSections], }); + evaluate.snapshot(`basic behavior, with descriptions`, { + name: 'generateAlbumTrackList', + args: [albumWithTrackSectionDescriptions], + }); + evaluate.snapshot(`collapseDurationScope: never`, { name: 'generateAlbumTrackList', slots: {collapseDurationScope: 'never'},