« get me outta code hell

content: encapsulate everything - 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:
author(quasar) nebula <qznebula@protonmail.com>2024-06-14 22:10:12 -0300
committer(quasar) nebula <qznebula@protonmail.com>2024-06-18 22:56:12 -0300
commit99261a74b1f3298144d8c5c6d676d63ad27a1299 (patch)
tree953c14b248dbc1ead549d717369c6d6155d11f19 /src/content/dependencies/generateTrackInfoPage.js
parent53b65bd2cbfb1001194d67f57780e92c6c8c5aaf (diff)
content: encapsulate everything
Diffstat (limited to 'src/content/dependencies/generateTrackInfoPage.js')
-rw-r--r--src/content/dependencies/generateTrackInfoPage.js449
1 files changed, 238 insertions, 211 deletions
diff --git a/src/content/dependencies/generateTrackInfoPage.js b/src/content/dependencies/generateTrackInfoPage.js
index 1cbbc8a8..95eaf35b 100644
--- a/src/content/dependencies/generateTrackInfoPage.js
+++ b/src/content/dependencies/generateTrackInfoPage.js
@@ -134,251 +134,278 @@ export default {
   }),
 
   generate: (data, relations, {html, language}) =>
-    relations.layout.slots({
-      title: language.$('trackPage.title', {track: data.name}),
-      headingMode: 'sticky',
-
-      additionalNames: relations.additionalNamesBox,
-
-      color: data.color,
-      styleRules: [relations.albumStyleRules],
-
-      cover:
-        (relations.cover
-          ? relations.cover.slots({
-              alt: language.$('misc.alt.trackCover'),
-            })
-          : null),
-
-      mainContent: [
-        relations.releaseInfo,
-
-        html.tag('p',
-          {[html.onlyIfContent]: true},
-          {[html.joinChildren]: html.tag('br')},
-
-          [
-            !html.isBlank(relations.sheetMusicFilesList) &&
-              language.$('releaseInfo.sheetMusicFiles.shortcut', {
-                link: html.tag('a',
-                  {href: '#sheet-music-files'},
-                  language.$('releaseInfo.sheetMusicFiles.shortcut.link')),
-              }),
+    language.encapsulate('trackPage', pageCapsule =>
+      relations.layout.slots({
+        title:
+          language.$(pageCapsule, 'title', {
+            track: data.name,
+          }),
 
-            !html.isBlank(relations.midiProjectFilesList) &&
-              language.$('releaseInfo.midiProjectFiles.shortcut', {
-                link: html.tag('a',
-                  {href: '#midi-project-files'},
-                  language.$('releaseInfo.midiProjectFiles.shortcut.link')),
-              }),
+        headingMode: 'sticky',
 
-            !html.isBlank(relations.additionalFilesList) &&
-              language.$('releaseInfo.additionalFiles.shortcut', {
-                link: html.tag('a',
-                  {href: '#midi-project-files'},
-                  language.$('releaseInfo.additionalFiles.shortcut.link')),
-              }),
+        additionalNames: relations.additionalNamesBox,
+
+        color: data.color,
+        styleRules: [relations.albumStyleRules],
+
+        cover:
+          (relations.cover
+            ? relations.cover.slots({
+                alt: language.$('misc.alt.trackCover'),
+              })
+            : null),
+
+        mainContent: [
+          relations.releaseInfo,
 
-            !html.isBlank(relations.artistCommentarySection) &&
-              language.$('releaseInfo.readCommentary', {
-                link: html.tag('a',
-                  {href: '#artist-commentary'},
-                  language.$('releaseInfo.readCommentary.link')),
+          html.tag('p',
+            {[html.onlyIfContent]: true},
+            {[html.joinChildren]: html.tag('br')},
+
+            language.encapsulate('releaseInfo', capsule => [
+              !html.isBlank(relations.sheetMusicFilesList) &&
+                language.encapsulate(capsule, 'sheetMusicFiles.shortcut', capsule =>
+                  language.$(capsule, {
+                    link:
+                      html.tag('a',
+                        {href: '#sheet-music-files'},
+                        language.$(capsule, 'link')),
+                  })),
+
+              !html.isBlank(relations.midiProjectFilesList) &&
+                language.encapsulate(capsule, 'midiProjectFiles.shortcut', capsule =>
+                  language.$(capsule, {
+                    link:
+                      html.tag('a',
+                        {href: '#midi-project-files'},
+                        language.$(capsule, 'link')),
+                  })),
+
+              !html.isBlank(relations.additionalFilesList) &&
+                language.encapsulate(capsule, 'additionalFiles.shortcut', capsule =>
+                  language.$(capsule, {
+                    link:
+                      html.tag('a',
+                        {href: '#midi-project-files'},
+                        language.$(capsule, 'link')),
+                  })),
+
+              !html.isBlank(relations.artistCommentarySection) &&
+                language.encapsulate(capsule, 'readCommentary', capsule =>
+                  language.$(capsule, {
+                    link:
+                      html.tag('a',
+                        {href: '#artist-commentary'},
+                        language.$(capsule, 'link')),
+                  })),
+            ])),
+
+          html.tags([
+            relations.contentHeading.clone()
+              .slots({
+                attributes: {id: 'also-released-as'},
+                title: language.$('releaseInfo.alsoReleasedAs'),
               }),
+
+            relations.otherReleasesList,
           ]),
 
-        html.tags([
-          relations.contentHeading.clone()
-            .slots({
-              attributes: {id: 'also-released-as'},
-              title: language.$('releaseInfo.alsoReleasedAs'),
-            }),
-
-          relations.otherReleasesList,
-        ]),
-
-        html.tags([
-          relations.contentHeading.clone()
-            .slots({
-              attributes: {id: 'contributors'},
-              title: language.$('releaseInfo.contributors'),
-            }),
-
-          relations.contributorContributionList,
-        ]),
-
-        html.tags([
-          relations.contentHeading.clone()
-            .slots({
-              attributes: {id: 'references'},
-
-              title:
-                language.$('releaseInfo.tracksReferenced', {
-                  track: html.tag('i', data.name),
-                }),
+          html.tags([
+            relations.contentHeading.clone()
+              .slots({
+                attributes: {id: 'contributors'},
+                title: language.$('releaseInfo.contributors'),
+              }),
 
-              stickyTitle:
-                language.$('releaseInfo.tracksReferenced.sticky'),
-            }),
+            relations.contributorContributionList,
+          ]),
 
-          relations.referencedTracksList,
-        ]),
+          html.tags([
+            language.encapsulate('releaseInfo.tracksReferenced', capsule =>
+              relations.contentHeading.clone()
+                .slots({
+                  attributes: {id: 'references'},
 
-        html.tags([
-          relations.contentHeading.clone()
-            .slots({
-              attributes: {id: 'samples'},
+                  title:
+                    language.$(capsule, {
+                      track:
+                        html.tag('i', data.name),
+                    }),
 
-              title:
-                language.$('releaseInfo.tracksSampled', {
-                  track: html.tag('i', data.name),
-                }),
+                  stickyTitle:
+                    language.$(capsule, 'sticky'),
+                })),
 
-              stickyTitle:
-                language.$('releaseInfo.tracksSampled.sticky'),
-            }),
+            relations.referencedTracksList,
+          ]),
 
-          relations.sampledTracksList,
-        ]),
+          html.tags([
+            language.encapsulate('releaseInfo.tracksSampled', capsule =>
+              relations.contentHeading.clone()
+                .slots({
+                  attributes: {id: 'samples'},
 
-        html.tags([
-          relations.contentHeading.clone()
-            .slots({
-              attributes: {id: 'referenced-by'},
+                  title:
+                    language.$(capsule, {
+                      track:
+                        html.tag('i', data.name),
+                    }),
 
-              title:
-                language.$('releaseInfo.tracksThatReference', {
-                  track: html.tag('i', data.name),
-                }),
+                  stickyTitle:
+                    language.$(capsule, 'sticky'),
+                })),
 
-              stickyTitle:
-                language.$('releaseInfo.tracksThatReference.sticky'),
-            }),
+            relations.sampledTracksList,
+          ]),
 
-          relations.referencedByTracksList
-            .slots({
-              headingString: 'releaseInfo.tracksThatReference',
-            }),
-        ]),
+          language.encapsulate('releaseInfo.tracksThatReference', capsule =>
+            html.tags([
+              relations.contentHeading.clone()
+                .slots({
+                  attributes: {id: 'referenced-by'},
 
-        html.tags([
-          relations.contentHeading.clone()
-            .slots({
-              attributes: {id: 'sampled-by'},
+                  title:
+                    language.$(capsule, {
+                      track: html.tag('i', data.name),
+                    }),
 
-              title:
-                language.$('releaseInfo.tracksThatSample', {
-                  track: html.tag('i', data.name),
+                  stickyTitle:
+                    language.$(capsule, 'sticky'),
                 }),
 
-              stickyTitle:
-                language.$('releaseInfo.tracksThatSample.sticky'),
-            }),
+              relations.referencedByTracksList
+                .slots({
+                  headingString: capsule,
+                }),
+            ])),
 
-          relations.sampledByTracksList
-            .slots({
-              headingString: 'releaseInfo.tracksThatSample',
-            }),
-        ]),
+          language.encapsulate('releaseInfo.tracksThatSample', capsule =>
+            html.tags([
+              relations.contentHeading.clone()
+                .slots({
+                  attributes: {id: 'sampled-by'},
 
-        html.tags([
-          relations.contentHeading.clone()
-            .slots({
-              attributes: {id: 'featured-in'},
+                  title:
+                    language.$(capsule, {
+                      track: html.tag('i', data.name),
+                    }),
 
-              title:
-                language.$('releaseInfo.flashesThatFeature', {
-                  track: html.tag('i', data.name),
+                  stickyTitle:
+                    language.$(capsule, 'sticky'),
                 }),
 
-              stickyTitle:
-                language.$('releaseInfo.flashesThatFeature.sticky'),
-            }),
+              relations.sampledByTracksList
+                .slots({
+                  headingString: capsule,
+                }),
+            ])),
 
-          relations.flashesThatFeatureList,
-        ]),
+          html.tags([
+            language.encapsulate('releaseInfo.flashesThatFeature', capsule =>
+              relations.contentHeading.clone()
+                .slots({
+                  attributes: {id: 'featured-in'},
 
-        html.tags([
-          relations.contentHeading.clone()
-            .slots({
-              attributes: {id: 'lyrics'},
-              title: language.$('releaseInfo.lyrics'),
-            }),
+                  title:
+                    language.$(capsule, {
+                      track: html.tag('i', data.name),
+                    }),
 
-          html.tag('blockquote',
-            {[html.onlyIfContent]: true},
-            relations.lyrics.slot('mode', 'lyrics')),
-        ]),
-
-        html.tags([
-          relations.contentHeading.clone()
-            .slots({
-              attributes: {id: 'sheet-music-files'},
-              title: language.$('releaseInfo.sheetMusicFiles.heading'),
-            }),
-
-          relations.sheetMusicFilesList,
-        ]),
-
-        html.tags([
-          relations.contentHeading.clone()
-            .slots({
-              attributes: {id: 'midi-project-files'},
-              title: language.$('releaseInfo.midiProjectFiles.heading'),
-            }),
-
-          relations.midiProjectFilesList,
-        ]),
-
-        html.tags([
-          relations.contentHeading.clone()
-            .slots({
-              attributes: {id: 'additional-files'},
-              title: language.$('releaseInfo.additionalFiles.heading'),
-            }),
-
-          relations.additionalFilesList,
-        ]),
-
-        relations.artistCommentarySection,
-      ],
-
-      navLinkStyle: 'hierarchical',
-      navLinks: [
-        {auto: 'home'},
-        {html: relations.albumLink.slot('color', false)},
-        {
-          html:
-            (data.hasTrackNumbers
-              ? language.$('trackPage.nav.track.withNumber', {
-                  number: data.trackNumber,
-                  track: relations.trackLink
-                    .slot('attributes', {class: 'current'}),
-                })
-              : language.$('trackPage.nav.track', {
-                  track: relations.trackLink
-                    .slot('attributes', {class: 'current'}),
+                  stickyTitle:
+                    language.$(capsule, 'sticky'),
                 })),
-        },
-      ],
 
-      navBottomRowContent:
-        relations.albumNavAccent.slots({
-          showTrackNavigation: true,
-          showExtraLinks: false,
-        }),
+            relations.flashesThatFeatureList,
+          ]),
 
-      navContent:
-        relations.chronologyLinks,
+          html.tags([
+            relations.contentHeading.clone()
+              .slots({
+                attributes: {id: 'lyrics'},
+                title: language.$('releaseInfo.lyrics'),
+              }),
 
-      secondaryNav:
-        relations.secondaryNav
-          .slot('mode', 'track'),
+            html.tag('blockquote',
+              {[html.onlyIfContent]: true},
+              relations.lyrics.slot('mode', 'lyrics')),
+          ]),
 
-      leftSidebar: relations.sidebar,
+          html.tags([
+            relations.contentHeading.clone()
+              .slots({
+                attributes: {id: 'sheet-music-files'},
+                title: language.$('releaseInfo.sheetMusicFiles.heading'),
+              }),
 
-      socialEmbed: relations.socialEmbed,
-    }),
+            relations.sheetMusicFilesList,
+          ]),
+
+          html.tags([
+            relations.contentHeading.clone()
+              .slots({
+                attributes: {id: 'midi-project-files'},
+                title: language.$('releaseInfo.midiProjectFiles.heading'),
+              }),
+
+            relations.midiProjectFilesList,
+          ]),
+
+          html.tags([
+            relations.contentHeading.clone()
+              .slots({
+                attributes: {id: 'additional-files'},
+                title: language.$('releaseInfo.additionalFiles.heading'),
+              }),
+
+            relations.additionalFilesList,
+          ]),
+
+          relations.artistCommentarySection,
+        ],
+
+        navLinkStyle: 'hierarchical',
+
+        navLinks: [
+          {auto: 'home'},
+
+          {html: relations.albumLink.slot('color', false)},
+
+          {
+            html:
+              language.encapsulate(pageCapsule, 'nav.track', capsule => {
+                const options = {};
+
+                options.track =
+                  relations.trackLink
+                    .slot('attributes', {class: 'current'});
+
+                if (data.hasTrackNumbers) {
+                  capsule += '.withNumber';
+                  options.number = data.trackNumber;
+                }
+
+                return language.$(capsule, options);
+              }),
+          },
+        ],
+
+        navBottomRowContent:
+          relations.albumNavAccent.slots({
+            showTrackNavigation: true,
+            showExtraLinks: false,
+          }),
+
+        navContent:
+          relations.chronologyLinks,
+
+        secondaryNav:
+          relations.secondaryNav
+            .slot('mode', 'track'),
+
+        leftSidebar: relations.sidebar,
+
+        socialEmbed: relations.socialEmbed,
+      })),
 };
 
 /*