« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/data/things/Track.js10
-rw-r--r--src/data/things/album/TrackSection.js7
-rw-r--r--src/data/yaml.js15
3 files changed, 24 insertions, 8 deletions
diff --git a/src/data/things/Track.js b/src/data/things/Track.js
index 785d0080..8752b2bb 100644
--- a/src/data/things/Track.js
+++ b/src/data/things/Track.js
@@ -10,6 +10,7 @@ import Thing from '#thing';
 import {compareKebabCase} from '#wiki-data';
 
 import {
+  anyOf,
   is,
   isBoolean,
   isColor,
@@ -385,7 +386,10 @@ export class Track extends Thing {
 
     excludingURLs: [
       exposeUpdateValueOrContinue({
-        validate: input.value(isExcludingURLsReason),
+        validate: input.value(
+          anyOf(
+            is(false),
+            isExcludingURLsReason)),
       }),
 
       withPropertyFromObject('trackSection', V('excludingTrackURLs')),
@@ -1184,9 +1188,9 @@ export class Track extends Thing {
         ],
       },
 
-      {message: `Don't include URLs alongside Excluding URLs`, fields: [
+      {message: `Don't include URLs alongside Excluding URLs, unless Excluding URLs is false`, fields: [
         'URLs',
-        'Excluding URLs',
+        ['Excluding URLs', v => v !== false],
       ]},
     ],
   };
diff --git a/src/data/things/album/TrackSection.js b/src/data/things/album/TrackSection.js
index 1e901a09..451f8f7b 100644
--- a/src/data/things/album/TrackSection.js
+++ b/src/data/things/album/TrackSection.js
@@ -6,6 +6,8 @@ import Thing from '#thing';
 import {parseDate, parseExcludingURLs} from '#yaml';
 
 import {
+  anyOf,
+  is,
   isBoolean,
   isColor,
   isDirectory,
@@ -121,7 +123,10 @@ export class TrackSection extends Thing {
 
     excludingTrackURLs: [
       exposeUpdateValueOrContinue({
-        validate: input.value(isExcludingURLsReason),
+        validate: input.value(
+          anyOf(
+            is(false),
+            isExcludingURLsReason)),
       }),
 
       withPropertyFromObject('album', V('excludingTrackURLs')),
diff --git a/src/data/yaml.js b/src/data/yaml.js
index ba627b29..5ddeb63e 100644
--- a/src/data/yaml.js
+++ b/src/data/yaml.js
@@ -762,12 +762,19 @@ export function parseURLs(entries) {
 }
 
 export function parseExcludingURLs(value) {
-  if (typeof value !== 'string') {
-    return value;
+  if (typeof value === 'boolean') {
+    switch (value) {
+      case true: return 'generic';
+      case false: return false;
+      // False is for nullifying an inherited reason for exclusion.
+    }
   }
 
-  switch (value) {
-    case 'paid bonus tracks': return 'paid bonus track';
+  if (typeof value === 'string') {
+    switch (value) {
+      case 'paid bonus tracks': return 'paid bonus track';
+      default: return value;
+    }
   }
 
   return value;