« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data
diff options
context:
space:
mode:
Diffstat (limited to 'src/data')
-rw-r--r--src/data/composite/things/content/withAnnotationParts.js12
-rw-r--r--src/data/things/content.js4
-rw-r--r--src/data/things/track.js32
3 files changed, 46 insertions, 2 deletions
diff --git a/src/data/composite/things/content/withAnnotationParts.js b/src/data/composite/things/content/withAnnotationParts.js
index 6311b57a..0c5a0294 100644
--- a/src/data/composite/things/content/withAnnotationParts.js
+++ b/src/data/composite/things/content/withAnnotationParts.js
@@ -1,5 +1,5 @@
 import {input, templateCompositeFrom} from '#composite';
-import {transposeArrays} from '#sugar';
+import {empty, transposeArrays} from '#sugar';
 import {is} from '#validators';
 
 import {raiseOutputWithoutDependency} from '#composite/control-flow';
@@ -33,6 +33,16 @@ export default templateCompositeFrom({
     }),
 
     {
+      dependencies: ['#contentNodeLists'],
+      compute: (continuation, {
+        ['#contentNodeLists']: nodeLists,
+      }) => continuation({
+        ['#contentNodeLists']:
+          nodeLists.filter(list => !empty(list)),
+      }),
+    },
+
+    {
       dependencies: ['#contentNodeLists', input('mode')],
       compute: (continuation, {
         ['#contentNodeLists']: nodeLists,
diff --git a/src/data/things/content.js b/src/data/things/content.js
index d2cf32dc..a3dfc183 100644
--- a/src/data/things/content.js
+++ b/src/data/things/content.js
@@ -187,6 +187,10 @@ export class LyricsEntry extends ContentEntry {
       part: input.value('wiki lyrics'),
     }),
 
+    helpNeeded: hasAnnotationPart({
+      part: input.value('help needed'),
+    }),
+
     hasSquareBracketAnnotations: [
       withHasAnnotationPart({
         part: input.value('wiki lyrics'),
diff --git a/src/data/things/track.js b/src/data/things/track.js
index 18faebc3..da6b3227 100644
--- a/src/data/things/track.js
+++ b/src/data/things/track.js
@@ -22,7 +22,7 @@ import {
   parseLyrics,
 } from '#yaml';
 
-import {withPropertyFromObject} from '#composite/data';
+import {withPropertyFromList, withPropertyFromObject} from '#composite/data';
 
 import {
   exitWithoutDependency,
@@ -245,6 +245,32 @@ export class Track extends Thing {
       exposeDependency({dependency: '#album.color'}),
     ],
 
+    needsLyrics: [
+      exposeUpdateValueOrContinue({
+        mode: input.value('falsy'),
+        validate: input.value(isBoolean),
+      }),
+
+      exitWithoutDependency({
+        dependency: 'lyrics',
+        mode: input.value('empty'),
+        value: input.value(false),
+      }),
+
+      withPropertyFromList({
+        list: 'lyrics',
+        property: input.value('helpNeeded'),
+      }),
+
+      {
+        dependencies: ['#lyrics.helpNeeded'],
+        compute: ({
+          ['#lyrics.helpNeeded']: helpNeeded,
+        }) =>
+          helpNeeded.includes(true)
+      },
+    ],
+
     urls: urls(),
 
     // > Update & expose - Artworks
@@ -574,6 +600,10 @@ export class Track extends Thing {
 
       'Color': {property: 'color'},
 
+      'Needs Lyrics': {
+        property: 'needsLyrics',
+      },
+
       'URLs': {property: 'urls'},
 
       // Artworks