diff options
| author | (quasar) nebula <qznebula@protonmail.com> | 2026-06-10 10:32:21 -0300 |
|---|---|---|
| committer | (quasar) nebula <qznebula@protonmail.com> | 2026-06-10 10:32:21 -0300 |
| commit | 8ac83829b4f1add4c57504210d08758e63540853 (patch) | |
| tree | 1a5f793d626f51ad405d49680c254a964f3c038c /src/data/things/album | |
| parent | 52272a8da9a798803abd1176a8294845e8567641 (diff) | |
data: Track: 'Name Detail: section'
Diffstat (limited to 'src/data/things/album')
| -rw-r--r-- | src/data/things/album/TrackSection.js | 46 |
1 files changed, 36 insertions, 10 deletions
diff --git a/src/data/things/album/TrackSection.js b/src/data/things/album/TrackSection.js index 00963d1b..0e6adb6d 100644 --- a/src/data/things/album/TrackSection.js +++ b/src/data/things/album/TrackSection.js @@ -13,6 +13,7 @@ import { isDirectory, isExcludingURLsReason, isNumber, + isString, } from '#validators'; import {withLengthOfList, withNearbyItemFromList, withPropertyFromObject} @@ -48,6 +49,22 @@ export class TrackSection extends Thing { name: name(V('Unnamed Track Section')), + // Track sections don't have a Name Detail themselves, but they do provide + // a value which tracks can reference via 'Name Detail: section'. + nameDetailForTracks: { + flags: {update: true, expose: true}, + + update: {validate: isString}, + + expose: { + dependencies: ['name'], + transform: (value, {name}) => + (value + ? value + : name), + }, + }, + unqualifiedDirectory: directory(), directorySuffixForTracks: [ @@ -55,18 +72,25 @@ export class TrackSection extends Thing { validate: input.value(isDirectory), }), - withPropertyFromObject('album', V('directorySuffixForTracks')), - exposeDependency('#album.directorySuffixForTracks'), + { + dependencies: ['unqualifiedDirectory', 'name', 'nameDetailForTracks'], + compute: ({unqualifiedDirectory, name, nameDetailForTracks}) => + (nameDetailForTracks === name + ? unqualifiedDirectory + : getKebabCase(nameDetailForTracks)), + }, ], - suffixTrackDirectoriesByDefault: [ - exposeUpdateValueOrContinue({ - validate: input.value(isBoolean), - }), - - withPropertyFromObject('album', V('suffixTrackDirectoriesByDefault')), - exposeDependency('#album.suffixTrackDirectoriesByDefault'), - ], + // Not quite a flag, because it supports (and defaults to) null. + // The value false means to explicitly ignore that the album is + // providing Suffix Track Directories: true. The value true means + // to use the TRACK SECTION's own directory suffix. The value null + // defers to the album's suffixTrackDirectoriesByDefault, which is + // simply true or false. + suffixTrackDirectoriesByDefault: { + flags: {expose: true, update: true}, + update: {validate: isBoolean}, + }, color: [ exposeUpdateValueOrContinue({ @@ -204,6 +228,8 @@ export class TrackSection extends Thing { static [Thing.yamlDocumentSpec] = { fields: { 'Section': {property: 'name'}, + 'Name Detail For Tracks': {property: 'nameDetailForTracks'}, + 'Directory Suffix': {property: 'directorySuffixForTracks'}, 'Suffix Track Directories': {property: 'suffixTrackDirectoriesByDefault'}, |