« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/content/dependencies
diff options
context:
space:
mode:
Diffstat (limited to 'src/content/dependencies')
-rw-r--r--src/content/dependencies/generateDividedFeaturedInFlashesList.js92
-rw-r--r--src/content/dependencies/generateDividedTrackList.js4
2 files changed, 50 insertions, 46 deletions
diff --git a/src/content/dependencies/generateDividedFeaturedInFlashesList.js b/src/content/dependencies/generateDividedFeaturedInFlashesList.js
index 93e29991..c4f5e445 100644
--- a/src/content/dependencies/generateDividedFeaturedInFlashesList.js
+++ b/src/content/dependencies/generateDividedFeaturedInFlashesList.js
@@ -14,13 +14,26 @@ export default {
 
   query(sprawl, features, _contextTrack) {
     if (!sprawl.enableFlashesAndGames) {
-      return {dividingSides: [], dividedFeatures: []};
+      return {
+        dividingSides: [], dividingLabels: [],
+        dividedFeatures: [],
+        undividedFeatures: [],
+      };
+    }
+
+    if (empty(sprawl.divideFlashListsBySides)) {
+      return {
+        dividingSides: [], dividingLabels: [],
+        dividedFeatures: [],
+        undividedFeatures: features,
+      };
     }
 
     const {allSides} = sprawl;
 
     const divisions = new Map();
     const dividingSideIndices = [];
+    const undividedFeatures = [];
     for (const {side, label} of sprawl.divideFlashListsBySides) {
       divisions.set(side, {label, features: []});
       dividingSideIndices.push(allSides.indexOf(side));
@@ -33,11 +46,13 @@ export default {
       const closestDividingSideIndex =
         dividingSideIndices.findLast(i => i <= sideIndex);
 
-      const closestDividingSide =
-        allSides.at(closestDividingSideIndex);
+      if (typeof closestDividingSideIndex === 'number') {
+        const closestDividingSide =
+          allSides.at(closestDividingSideIndex);
 
-      if (closestDividingSide) {
         divisions.get(closestDividingSide).features.push(feature);
+      } else {
+        undividedFeatures.push(feature);
       }
     }
 
@@ -51,12 +66,16 @@ export default {
       dividedFeatures,
       (_side, _label, dividedFeatures) => !empty(dividedFeatures));
 
-    return {dividingSides, dividingLabels, dividedFeatures};
+    return {
+      dividingSides, dividingLabels,
+      dividedFeatures,
+      undividedFeatures,
+    };
   },
 
-  relations: (relation, query, sprawl, features, contextTrack) => ({
+  relations: (relation, query, _sprawl, features, contextTrack) => ({
     flatList:
-      (empty(sprawl.divideFlashListsBySides)
+      (empty(query.dividedFeatures)
         ? relation('generateTrackFeaturedInFlashesList', features, contextTrack)
         : null),
 
@@ -70,24 +89,19 @@ export default {
     dividedFlashLists:
       query.dividedFeatures
         .map(features => relation('generateTrackFeaturedInFlashesList', features, contextTrack)),
+
+    undividedFlashList:
+      (empty(query.undividedFeatures)
+        ? null
+        : relation('generateTrackFeaturedInFlashesList', query.undividedFeatures, contextTrack)),
   }),
 
   data: (query, _sprawl, _tracks) => ({
-    dividingSideNames:
-      query.dividingSides
-        .map(side => side.name),
-
     dividingLabels:
       query.dividingLabels,
   }),
 
-  slots: {
-    headingString: {
-      type: 'string',
-    },
-  },
-
-  generate(data, relations, slots, {html, language}) {
+  generate(data, relations, {html, language}) {
     if (relations.flatList) {
       return relations.flatList;
     }
@@ -107,36 +121,26 @@ export default {
       html.tag('dl', {class: 'division-list'},
         {[html.onlyIfContent]: true},
 
-        language.encapsulate('flashList', listCapsule =>
+        language.encapsulate('flashList', listCapsule => [
           stitchArrays({
             sideLink: relations.dividingSideLinks,
             flashList: relations.dividedFlashLists,
-            sideName: data.dividingSideNames,
-            label: data.dividingLabels,
-          }).map(({sideLink, flashList, sideName, label}) => [
-              language.encapsulate(listCapsule, 'underSide', capsule =>
-                (slots.headingString
-                  ? relations.contentHeading.clone().slots({
-                      tag: 'dt',
-
-                      title:
-                        language.$(capsule, {side: sideLink}),
-
-                      stickyTitle:
-                        language.$(slots.headingString, 'sticky', 'fromGroup', {
-                          side:
-                            (label
-                              ? language.sanitize(label)
-                              : language.sanitize(sideName)),
-                        }),
-                    })
-
-                  : html.tag('dt',
-                      language.$(capsule, {
-                        side: sideLink,
-                      })))),
+          }).map(({sideLink, flashList}) => [
+              html.tag('dt',
+                language.$(listCapsule, 'underSide', {side: sideLink})),
 
               html.tag('dd', flashList),
-            ]))));
+            ]),
+
+          html.tags([
+            html.tag('dt',
+              {[html.onlyIfSiblings]: true},
+              language.$(listCapsule, 'underOther')),
+
+            html.tag('dd',
+              {[html.onlyIfContent]: true},
+              relations.undividedFlashList),
+          ]),
+        ])));
   },
 };
diff --git a/src/content/dependencies/generateDividedTrackList.js b/src/content/dependencies/generateDividedTrackList.js
index e89f08db..870c8156 100644
--- a/src/content/dependencies/generateDividedTrackList.js
+++ b/src/content/dependencies/generateDividedTrackList.js
@@ -85,9 +85,9 @@ export default {
     return {groupingGroups, groupedTracks, ungroupedTracks};
   },
 
-  relations: (relation, query, sprawl, tracks, contextTrack) => ({
+  relations: (relation, query, _sprawl, tracks, contextTrack) => ({
     flatList:
-      (empty(sprawl.divideTrackListsByGroups)
+      (empty(query.groupedTracks)
         ? relation('generateNearbyTrackList', tracks, contextTrack, [])
         : null),