« 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/generateTrackInfoPage.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/content/dependencies/generateTrackInfoPage.js')
-rw-r--r--src/content/dependencies/generateTrackInfoPage.js181
1 files changed, 86 insertions, 95 deletions
diff --git a/src/content/dependencies/generateTrackInfoPage.js b/src/content/dependencies/generateTrackInfoPage.js
index 64ed0cb4..6c16ce27 100644
--- a/src/content/dependencies/generateTrackInfoPage.js
+++ b/src/content/dependencies/generateTrackInfoPage.js
@@ -1,20 +1,24 @@
 export default {
   contentDependencies: [
-    'generateAlbumAdditionalFilesList',
+    'generateAdditionalFilesList',
+    'generateAdditionalNamesBox',
     'generateAlbumNavAccent',
     'generateAlbumSecondaryNav',
     'generateAlbumSidebar',
-    'generateAlbumStyleRules',
-    'generateCommentarySection',
+    'generateAlbumStyleTags',
+    'generateCommentaryEntry',
+    'generateContentContentHeading',
     'generateContentHeading',
     'generateContributionList',
+    'generateLyricsSection',
     'generatePageLayout',
-    'generateTrackAdditionalNamesBox',
-    'generateTrackCoverArtwork',
+    'generateTrackArtistCommentarySection',
+    'generateTrackArtworkColumn',
     'generateTrackInfoPageFeaturedByFlashesList',
     'generateTrackInfoPageOtherReleasesList',
     'generateTrackList',
     'generateTrackListDividedByGroups',
+    'generateTrackNavLinks',
     'generateTrackReleaseInfo',
     'generateTrackSocialEmbed',
     'linkAlbum',
@@ -22,28 +26,27 @@ export default {
     'transformContent',
   ],
 
-  extraDependencies: ['html', 'language', 'wikiData'],
+  extraDependencies: ['html', 'language'],
 
-  sprawl: ({wikiInfo}) => ({
-    divideTrackListsByGroups:
-      wikiInfo.divideTrackListsByGroups,
+  query: (track) => ({
+    mainReleaseTrack:
+      (track.isMainRelease
+        ? track
+        : track.mainReleaseTrack),
   }),
 
-  relations: (relation, sprawl, track) => ({
+  relations: (relation, query, track) => ({
     layout:
       relation('generatePageLayout'),
 
-    albumStyleRules:
-      relation('generateAlbumStyleRules', track.album, track),
+    albumStyleTags:
+      relation('generateAlbumStyleTags', track.album, track),
 
     socialEmbed:
       relation('generateTrackSocialEmbed', track),
 
-    albumLink:
-      relation('linkAlbum', track.album),
-
-    trackLink:
-      relation('linkTrack', track),
+    navLinks:
+      relation('generateTrackNavLinks', track),
 
     albumNavAccent:
       relation('generateAlbumNavAccent', track.album, track),
@@ -55,21 +58,22 @@ export default {
       relation('generateAlbumSidebar', track.album, track),
 
     additionalNamesBox:
-      relation('generateTrackAdditionalNamesBox', track),
+      relation('generateAdditionalNamesBox', track.additionalNames),
 
-    cover:
-      (track.hasUniqueCoverArt || track.album.hasCoverArt
-        ? relation('generateTrackCoverArtwork', track)
-        : null),
+    artworkColumn:
+      relation('generateTrackArtworkColumn', track),
 
     contentHeading:
       relation('generateContentHeading'),
 
+    contentContentHeading:
+      relation('generateContentContentHeading', track),
+
     releaseInfo:
       relation('generateTrackReleaseInfo', track),
 
     otherReleasesList:
-        relation('generateTrackInfoPageOtherReleasesList', track),
+      relation('generateTrackInfoPageOtherReleasesList', track),
 
     contributorContributionList:
       relation('generateContributionList', track.contributorContribs),
@@ -82,51 +86,45 @@ export default {
 
     referencedByTracksList:
       relation('generateTrackListDividedByGroups',
-        track.referencedByTracks,
-        sprawl.divideTrackListsByGroups),
+        query.mainReleaseTrack.referencedByTracks),
 
     sampledByTracksList:
       relation('generateTrackListDividedByGroups',
-        track.sampledByTracks,
-        sprawl.divideTrackListsByGroups),
+        query.mainReleaseTrack.sampledByTracks),
 
     flashesThatFeatureList:
       relation('generateTrackInfoPageFeaturedByFlashesList', track),
 
-    lyrics:
-      relation('transformContent', track.lyrics),
+    lyricsSection:
+      relation('generateLyricsSection', track.lyrics),
 
     sheetMusicFilesList:
-      relation('generateAlbumAdditionalFilesList',
-        track.album,
-        track.sheetMusicFiles),
+      relation('generateAdditionalFilesList', track.sheetMusicFiles),
 
     midiProjectFilesList:
-      relation('generateAlbumAdditionalFilesList',
-        track.album,
-        track.midiProjectFiles),
+      relation('generateAdditionalFilesList', track.midiProjectFiles),
 
     additionalFilesList:
-      relation('generateAlbumAdditionalFilesList',
-        track.album,
-        track.additionalFiles),
+      relation('generateAdditionalFilesList', track.additionalFiles),
 
     artistCommentarySection:
-      relation('generateCommentarySection', track.commentary),
+      relation('generateTrackArtistCommentarySection', track),
+
+    creditingSourceEntries:
+      track.creditingSources
+        .map(entry => relation('generateCommentaryEntry', entry)),
+
+    referencingSourceEntries:
+      track.referencingSources
+        .map(entry => relation('generateCommentaryEntry', entry)),
   }),
 
-  data: (sprawl, track) => ({
+  data: (_query, track) => ({
     name:
       track.name,
 
     color:
       track.color,
-
-    hasTrackNumbers:
-      track.album.hasTrackNumbers,
-
-    trackNumber:
-      track.album.tracks.indexOf(track) + 1,
   }),
 
   generate: (data, relations, {html, language}) =>
@@ -142,14 +140,10 @@ export default {
         additionalNames: relations.additionalNamesBox,
 
         color: data.color,
-        styleRules: [relations.albumStyleRules],
+        styleTags: relations.albumStyleTags,
 
-        cover:
-          (relations.cover
-            ? relations.cover.slots({
-                alt: language.$('misc.alt.trackCover'),
-              })
-            : null),
+        artworkColumnContent:
+          relations.artworkColumn,
 
         mainContent: [
           relations.releaseInfo,
@@ -194,17 +188,27 @@ export default {
                         {href: '#artist-commentary'},
                         language.$(capsule, 'link')),
                   })),
-            ])),
 
-          html.tags([
-            relations.contentHeading.clone()
-              .slots({
-                attributes: {id: 'also-released-as'},
-                title: language.$('releaseInfo.alsoReleasedAs'),
-              }),
+              !html.isBlank(relations.creditingSourceEntries) &&
+                language.encapsulate(capsule, 'readCreditingSources', capsule =>
+                  language.$(capsule, {
+                    link:
+                      html.tag('a',
+                        {href: '#crediting-sources'},
+                        language.$(capsule, 'link')),
+                  })),
 
-            relations.otherReleasesList,
-          ]),
+              !html.isBlank(relations.referencingSourceEntries) &&
+                language.encapsulate(capsule, 'readReferencingSources', capsule =>
+                  language.$(capsule, {
+                    link:
+                      html.tag('a',
+                        {href: '#referencing-sources'},
+                        language.$(capsule, 'link')),
+                  })),
+            ])),
+
+          relations.otherReleasesList,
 
           html.tags([
             relations.contentHeading.clone()
@@ -316,17 +320,7 @@ export default {
             relations.flashesThatFeatureList,
           ]),
 
-          html.tags([
-            relations.contentHeading.clone()
-              .slots({
-                attributes: {id: 'lyrics'},
-                title: language.$('releaseInfo.lyrics'),
-              }),
-
-            html.tag('blockquote',
-              {[html.onlyIfContent]: true},
-              relations.lyrics.slot('mode', 'lyrics')),
-          ]),
+          relations.lyricsSection,
 
           html.tags([
             relations.contentHeading.clone()
@@ -359,34 +353,31 @@ export default {
           ]),
 
           relations.artistCommentarySection,
-        ],
-
-        navLinkStyle: 'hierarchical',
-
-        navLinks: [
-          {auto: 'home'},
-
-          {html: relations.albumLink.slot('color', false)},
 
-          {
-            html:
-              language.encapsulate(pageCapsule, 'nav.track', workingCapsule => {
-                const workingOptions = {};
-
-                workingOptions.track =
-                  relations.trackLink
-                    .slot('attributes', {class: 'current'});
+          html.tags([
+            relations.contentContentHeading.clone()
+              .slots({
+                attributes: {id: 'crediting-sources'},
+                string: 'misc.creditingSources',
+              }),
 
-                if (data.hasTrackNumbers) {
-                  workingCapsule += '.withNumber';
-                  workingOptions.number = data.trackNumber;
-                }
+            relations.creditingSourceEntries,
+          ]),
 
-                return language.$(workingCapsule, workingOptions);
+          html.tags([
+            relations.contentContentHeading.clone()
+              .slots({
+                attributes: {id: 'referencing-sources'},
+                string: 'misc.referencingSources',
               }),
-          },
+
+            relations.referencingSourceEntries,
+          ]),
         ],
 
+        navLinkStyle: 'hierarchical',
+        navLinks: html.resolve(relations.navLinks),
+
         navBottomRowContent:
           relations.albumNavAccent.slots({
             showTrackNavigation: true,