« get me outta code hell

content, data: Track: Contributor Text - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2026-06-08 12:08:36 -0300
committer(quasar) nebula <qznebula@protonmail.com>2026-06-08 12:08:48 -0300
commitf10f5a187f26d08019e452e7fbd417b7f462faa4 (patch)
treea721a9413b90b7c2dbd22d76b0ab212ed9219c7f /src
parent6b858c651b55dc45ee5710c90389eb4b97069d54 (diff)
content, data: Track: Contributor Text preview
missing chronology link substitution
Diffstat (limited to 'src')
-rw-r--r--src/content/dependencies/generateContributionList.js63
-rw-r--r--src/content/dependencies/generateFlashInfoPage.js15
-rw-r--r--src/content/dependencies/generateTrackInfoPage.js18
-rw-r--r--src/content/dependencies/transformContent.js13
-rw-r--r--src/data/things/Track.js4
5 files changed, 72 insertions, 41 deletions
diff --git a/src/content/dependencies/generateContributionList.js b/src/content/dependencies/generateContributionList.js
index 4f68321f..4796cc02 100644
--- a/src/content/dependencies/generateContributionList.js
+++ b/src/content/dependencies/generateContributionList.js
@@ -1,30 +1,55 @@
 export default {
-  relations: (relation, contributions) => ({
+  relations: (relation, contributions, formatText) => ({
     contributionLinks:
       contributions
         .map(contrib => relation('linkContribution', contrib)),
+
+    formatText:
+      relation('transformContent', formatText),
   }),
 
   slots: {
+    attributes: {type: 'attributes', mutable: false},
+    title: {type: 'html', mutable: false},
+
     chronologyKind: {type: 'string'},
   },
 
-  generate: (relations, slots, {html, language}) =>
-    html.tag('ul',
-      {[html.onlyIfContent]: true},
-
-      relations.contributionLinks.length > 1 &&
-      language.$order('misc.artistLink.withContribution', 0) === 'ARTIST' &&
-        {class: 'offset-tooltips'},
-
-      relations.contributionLinks
-        .map(contributionLink =>
-          html.tag('li',
-            contributionLink.slots({
-              showAnnotation: true,
-              showExternalLinks: true,
-              showChronology: true,
-              preventWrapping: false,
-              chronologyKind: slots.chronologyKind,
-            })))),
+  generate(relations, slots, {html, language}) {
+    const {contributionLinks} = relations;
+
+    for (const link of contributionLinks) {
+      link.setSlots({
+        showAnnotation: true,
+        showExternalLinks: true,
+        showChronology: true,
+        preventWrapping: false,
+        chronologyKind: slots.chronologyKind,
+      });
+    }
+
+    if (!html.isBlank(relations.formatText)) {
+      return (
+        html.tag('div',
+          slots.attributes,
+          relations.formatText.slot('mode', 'contributors'))
+      );
+    }
+
+    return html.tags([
+      html.tag('p',
+        slots.attributes,
+        slots.title),
+
+      html.tag('ul',
+        {[html.onlyIfContent]: true},
+
+        relations.contributionLinks.length > 1 &&
+        language.$order('misc.artistLink.withContribution', 0) === 'ARTIST' &&
+          {class: 'offset-tooltips'},
+
+        contributionLinks
+          .map(link => html.tag('li', link)))
+    ]);
+  }
 };
diff --git a/src/content/dependencies/generateFlashInfoPage.js b/src/content/dependencies/generateFlashInfoPage.js
index 9f18f19a..ad464bd7 100644
--- a/src/content/dependencies/generateFlashInfoPage.js
+++ b/src/content/dependencies/generateFlashInfoPage.js
@@ -163,17 +163,12 @@ export default {
             relations.featuredTracksList,
           ]),
 
-          html.tags([
-            relations.contentHeading.clone()
-              .slots({
-                attributes: {id: 'contributors'},
-                title: language.$('releaseInfo.contributors'),
-              }),
+          relations.contributorContributionList.slots({
+            attributes: {id: 'contributors'},
+            title: language.$('releaseInfo.contributors'),
 
-            relations.contributorContributionList.slots({
-              chronologyKind: 'flash',
-            }),
-          ]),
+            chronologyKind: 'flash',
+          }),
 
           html.tags([
             relations.commentaryContentHeading,
diff --git a/src/content/dependencies/generateTrackInfoPage.js b/src/content/dependencies/generateTrackInfoPage.js
index ac96e072..3d06b364 100644
--- a/src/content/dependencies/generateTrackInfoPage.js
+++ b/src/content/dependencies/generateTrackInfoPage.js
@@ -92,7 +92,9 @@ export default {
       relation('generateTrackInfoPageOtherReleasesLines', track),
 
     contributorContributionList:
-      relation('generateContributionList', track.contributorContribs),
+      relation('generateContributionList',
+        track.contributorContribs,
+        track.contributorText),
 
     referencedTracksList:
       relation('generateReferencedTracksList', track),
@@ -264,16 +266,12 @@ export default {
             {[html.joinChildren]: html.tag('br')},
             relations.otherReleasesLines),
 
-          html.tags([
-            relations.contentHeading.clone().slots({
-              attributes: {id: 'contributors'},
-              title: language.$('releaseInfo.contributors'),
-            }),
+          relations.contributorContributionList.slots({
+            attributes: {id: 'contributors'},
+            title: language.$('releaseInfo.contributors'),
 
-            relations.contributorContributionList.slots({
-              chronologyKind: 'trackContribution',
-            }),
-          ]),
+            chronologyKind: 'trackContribution',
+          }),
 
           html.tags([
             relations.relationsContentHeading.clone().slots({
diff --git a/src/content/dependencies/transformContent.js b/src/content/dependencies/transformContent.js
index 243ab502..ad7530fe 100644
--- a/src/content/dependencies/transformContent.js
+++ b/src/content/dependencies/transformContent.js
@@ -302,7 +302,14 @@ export default {
 
   slots: {
     mode: {
-      validate: v => v.is('inline', 'multiline', 'lyrics', 'single-link'),
+      validate: v => v.is(...[
+        'inline',
+        'multiline',
+        'lyrics',
+        'contributors',
+        'single-link',
+      ]),
+
       default: 'multiline',
     },
 
@@ -932,8 +939,10 @@ export default {
     // differently. Instead of having each line get its own paragraph,
     // "adjacent" lines are joined together (with blank lines separating
     // each verse/paragraph).
+    //
+    // Also this formatting goes for contributors mode too.
 
-    if (slots.mode === 'lyrics') {
+    if (slots.mode === 'lyrics' || slots.mode === 'contributors') {
       // If it looks like old data, using <br> instead of bunched together
       // lines... then oh god... just use transformMultiline. Perishes.
       if (
diff --git a/src/data/things/Track.js b/src/data/things/Track.js
index 5c6a7a4e..1f7375be 100644
--- a/src/data/things/Track.js
+++ b/src/data/things/Track.js
@@ -340,6 +340,8 @@ export class Track extends Thing {
       exposeDependency('#album.trackArtistContribs'),
     ],
 
+    contributorText: contentString(),
+
     contributorContribs: [
       withResolvedContribs({
         from: input.updateValue({validate: isContributionList}),
@@ -1100,6 +1102,8 @@ export class Track extends Thing {
         transform: parseContributors,
       },
 
+      'Contributor Text': {property: 'contributorText'},
+
       'Contributors': {
         property: 'contributorContribs',
         transform: parseContributors,