diff options
| author | (quasar) nebula <qznebula@protonmail.com> | 2025-11-25 17:05:17 -0400 |
|---|---|---|
| committer | (quasar) nebula <qznebula@protonmail.com> | 2025-11-25 17:05:17 -0400 |
| commit | 697a92ab17dda83b281329843eba8da626caf226 (patch) | |
| tree | 90d592621d15a510102fe64a995484ce1a89ca46 /src/data/things/track.js | |
| parent | 3d6e0377e01a6c8c05ab3725cc0c30d02f318d0f (diff) | |
data: Track: inline alwaysReferenceByDirectory
Diffstat (limited to 'src/data/things/track.js')
| -rw-r--r-- | src/data/things/track.js | 47 |
1 files changed, 45 insertions, 2 deletions
diff --git a/src/data/things/track.js b/src/data/things/track.js index 032171d0..f275b509 100644 --- a/src/data/things/track.js +++ b/src/data/things/track.js @@ -87,7 +87,6 @@ import { } from '#composite/wiki-properties'; import { - alwaysReferenceByDirectory, exitWithoutUniqueCoverArt, inheritContributionListFromMainRelease, inheritFromMainRelease, @@ -154,7 +153,51 @@ export class Track extends Thing { }), ], - alwaysReferenceByDirectory: alwaysReferenceByDirectory(), + // Controls how find.track works - it'll never be matched by + // a reference just to the track's name, which means you don't + // have to always reference some *other* (much more commonly + // referenced) track by directory instead of more naturally by name. + alwaysReferenceByDirectory: [ + exposeUpdateValueOrContinue({ + validate: input.value(isBoolean), + }), + + withPropertyFromAlbum({ + property: input.value('alwaysReferenceTracksByDirectory'), + }), + + // Falsy mode means this exposes true if the album's property is true, + // but continues if the property is false (which is also the default). + exposeDependencyOrContinue({ + dependency: '#album.alwaysReferenceTracksByDirectory', + mode: input.value('falsy'), + }), + + exitWithoutDependency({ + dependency: '_mainRelease', + value: input.value(false), + }), + + exitWithoutDependency({ + dependency: 'mainReleaseTrack', + value: input.value(false), + }), + + withPropertyFromObject({ + object: 'mainReleaseTrack', + property: input.value('name'), + }), + + { + dependencies: ['name', '#mainReleaseTrack.name'], + compute: ({ + ['name']: name, + ['#mainReleaseTrack.name']: mainReleaseName, + }) => + getKebabCase(name) === + getKebabCase(mainReleaseName), + }, + ], // Album or track. The exposed value is really just what's provided here, // whether or not a matching track is found on a provided album, for |