diff options
| author | (quasar) nebula <qznebula@protonmail.com> | 2025-12-10 17:32:11 -0400 |
|---|---|---|
| committer | (quasar) nebula <qznebula@protonmail.com> | 2025-12-10 17:32:11 -0400 |
| commit | 69ae43806f57daf9a29caf5ee3de14ec53bcaac1 (patch) | |
| tree | 5d4bbd1aafe9a2c0b91b4e13aef349f3762dbb4a /src | |
| parent | 6b440b13585fd90614df42752a56d895c805256f (diff) | |
data, content: TrackSection.hasTrackNumbers
closes #566 PRETTY SWEET !!! examples here: https://discord.com/channels/749042497610842152/779895315750715422/1448422818944647429
Diffstat (limited to 'src')
| -rw-r--r-- | src/content/dependencies/generateAlbumSidebarTrackSection.js | 2 | ||||
| -rw-r--r-- | src/content/dependencies/generateAlbumTrackList.js | 40 | ||||
| -rw-r--r-- | src/data/things/album.js | 51 |
3 files changed, 51 insertions, 42 deletions
diff --git a/src/content/dependencies/generateAlbumSidebarTrackSection.js b/src/content/dependencies/generateAlbumSidebarTrackSection.js index 68281bfe..3ceab866 100644 --- a/src/content/dependencies/generateAlbumSidebarTrackSection.js +++ b/src/content/dependencies/generateAlbumSidebarTrackSection.js @@ -15,7 +15,7 @@ export default { const data = {}; data.hasTrackNumbers = - album.hasTrackNumbers && + trackSection.hasTrackNumbers && !empty(trackSection.tracks); data.isTrackPage = !!track; diff --git a/src/content/dependencies/generateAlbumTrackList.js b/src/content/dependencies/generateAlbumTrackList.js index 93cb420b..d40fb259 100644 --- a/src/content/dependencies/generateAlbumTrackList.js +++ b/src/content/dependencies/generateAlbumTrackList.js @@ -76,7 +76,7 @@ export default { const data = {}; data.displayMode = query.displayMode; - data.hasTrackNumbers = album.hasTrackNumbers; + data.albumHasTrackNumbers = album.hasTrackNumbers; switch (query.displayMode) { case 'trackSections': @@ -93,15 +93,16 @@ export default { album.trackSections .map(section => section.tracks.length > 1); - if (album.hasTrackNumbers) { - data.trackSectionsStartCountingFrom = - album.trackSections - .map(section => section.startCountingFrom); - } else { - data.trackSectionsStartCountingFrom = - album.trackSections - .map(() => null); - } + data.trackSectionsHaveTrackNumbers = + album.trackSections + .map(section => section.hasTrackNumbers); + + data.trackSectionsStartCountingFrom = + album.trackSections + .map(section => + (section.hasTrackNumbers + ? section.startCountingFrom + : null)); break; } @@ -119,8 +120,6 @@ export default { }, generate(data, relations, slots, {html, language}) { - const listTag = (data.hasTrackNumbers ? 'ol' : 'ul'); - const slotItems = items => items.map(item => item.slots({ @@ -139,6 +138,7 @@ export default { name: data.trackSectionNames, duration: data.trackSectionDurations, durationApproximate: data.trackSectionDurationsApproximate, + hasTrackNumbers: data.trackSectionsHaveTrackNumbers, startCountingFrom: data.trackSectionsStartCountingFrom, }).map(({ heading, @@ -148,6 +148,7 @@ export default { name, duration, durationApproximate, + hasTrackNumbers, startCountingFrom, }) => [ language.encapsulate('trackList.section', capsule => @@ -180,16 +181,19 @@ export default { {[html.onlyIfContent]: true}, description), - html.tag(listTag, - data.hasTrackNumbers && - {start: startCountingFrom}, - - slotItems(items)), + (hasTrackNumbers + ? html.tag('ol', {start: startCountingFrom}, + slotItems(items)) + : html.tag('ul', slotItems(items))), ]), ])); case 'tracks': - return html.tag(listTag, slotItems(relations.items)); + if (data.albumHasTrackNumbers) { + return html.tag('ol', slotItems(relations.items)); + } else { + return html.tag('ul', slotItems(relations.items)); + } default: return html.blank(); diff --git a/src/data/things/album.js b/src/data/things/album.js index f9d7a3a3..31d94ef1 100644 --- a/src/data/things/album.js +++ b/src/data/things/album.js @@ -979,20 +979,24 @@ export class TrackSection extends Thing { exposeDependency({dependency: '#album.color'}), ], + hasTrackNumbers: [ + exposeUpdateValueOrContinue({ + validate: input.value(isBoolean), + }), + + withPropertyFromObject('album', V('hasTrackNumbers')), + exposeDependency('#album.hasTrackNumbers'), + ], + startCountingFrom: [ exposeUpdateValueOrContinue({ validate: input.value(isNumber), }), - exitWithoutDependency({ - dependency: 'album', - value: input.value(1), - }), + withPropertyFromObject('album', V('hasTrackNumbers')), + exitWithoutDependency('#album.hasTrackNumbers', V(1), V('falsy')), - withPropertyFromObject({ - object: 'album', - property: input.value('trackSections'), - }), + withPropertyFromObject('album', V('trackSections')), withNearbyItemFromList({ list: '#album.trackSections', @@ -1002,19 +1006,10 @@ export class TrackSection extends Thing { '#nearbyItem': '#previousTrackSection', }), - exitWithoutDependency({ - dependency: '#previousTrackSection', - value: input.value(1), - }), - - withPropertyFromObject({ - object: '#previousTrackSection', - property: input.value('continueCountingFrom'), - }), + exitWithoutDependency('#previousTrackSection', V(1)), - exposeDependency({ - dependency: '#previousTrackSection.continueCountingFrom', - }), + withPropertyFromObject('#previousTrackSection', V('continueCountingFrom')), + exposeDependency('#previousTrackSection.continueCountingFrom'), ], dateOriginallyReleased: simpleDate(), @@ -1071,9 +1066,18 @@ export class TrackSection extends Thing { ], continueCountingFrom: [ - withLengthOfList({ - list: 'tracks', - }), + withPropertyFromObject('album', V('hasTrackNumbers')), + exitWithoutDependency('#album.hasTrackNumbers', V(null), V('falsy')), + + { + dependencies: ['hasTrackNumbers', 'startCountingFrom'], + compute: (continuation, {hasTrackNumbers, startCountingFrom}) => + (hasTrackNumbers + ? continuation() + : continuation.exit(startCountingFrom)), + }, + + withLengthOfList('tracks'), { dependencies: ['startCountingFrom', '#tracks.length'], @@ -1104,6 +1108,7 @@ export class TrackSection extends Thing { 'Suffix Track Directories': {property: 'suffixTrackDirectories'}, 'Color': {property: 'color'}, + 'Has Track Numbers': {property: 'hasTrackNumbers'}, 'Start Counting From': {property: 'startCountingFrom'}, 'Date Originally Released': { |