« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/content/dependencies/generateName.js33
-rw-r--r--src/content/dependencies/generatePageLayout.js8
-rw-r--r--src/content/dependencies/generateTrackInfoPage.js5
-rw-r--r--src/content/dependencies/linkThing.js20
-rw-r--r--src/data/things/track.js3
5 files changed, 57 insertions, 12 deletions
diff --git a/src/content/dependencies/generateName.js b/src/content/dependencies/generateName.js
new file mode 100644
index 00000000..e0d0c6d3
--- /dev/null
+++ b/src/content/dependencies/generateName.js
@@ -0,0 +1,33 @@
+export default {
+  contentDependencies: ['transformContent'],
+  extraDependencies: ['html', 'language'],
+
+  relations: (relation, thing) => ({
+    customName:
+      (thing.nameText
+        ? relation('transformContent', thing.nameText)
+        : null),
+  }),
+
+  data: (thing) => ({
+    normalName:
+      thing.name,
+
+    shortName:
+      thing.nameShort,
+  }),
+
+  slots: {
+    preferShortName: {
+      type: 'boolean',
+      default: false,
+    },
+  },
+
+  generate: (data, relations, slots, {language}) =>
+    (relations.customName
+      ? relations.customName.slot('mode', 'inline')
+   : slots.preferShortName && data.shortName
+      ? language.sanitize(data.shortName)
+      : language.sanitize(data.normalName)),
+};
diff --git a/src/content/dependencies/generatePageLayout.js b/src/content/dependencies/generatePageLayout.js
index 324a5ee4..f3fad2db 100644
--- a/src/content/dependencies/generatePageLayout.js
+++ b/src/content/dependencies/generatePageLayout.js
@@ -1,3 +1,5 @@
+import striptags from 'striptags';
+
 import {openAggregate} from '#aggregate';
 import {atOffset, empty, repeat} from '#sugar';
 
@@ -654,11 +656,13 @@ export default {
               language.encapsulate('misc.pageTitle', workingCapsule => {
                 const workingOptions = {};
 
-                workingOptions.title = slots.title;
+                workingOptions.title =
+                  striptags(slots.title.toString());
 
                 if (!html.isBlank(slots.subtitle)) {
                   workingCapsule += '.withSubtitle';
-                  workingOptions.subtitle = slots.subtitle;
+                  workingOptions.subtitle =
+                    striptags(slots.subtitle.toString());
                 }
 
                 const showWikiName =
diff --git a/src/content/dependencies/generateTrackInfoPage.js b/src/content/dependencies/generateTrackInfoPage.js
index df17d460..92e00a41 100644
--- a/src/content/dependencies/generateTrackInfoPage.js
+++ b/src/content/dependencies/generateTrackInfoPage.js
@@ -71,6 +71,9 @@ export default {
     contentHeading:
       relation('generateContentHeading'),
 
+    name:
+      relation('generateName', track),
+
     releaseInfo:
       relation('generateTrackReleaseInfo', track),
 
@@ -153,7 +156,7 @@ export default {
       relations.layout.slots({
         title:
           language.$(pageCapsule, 'title', {
-            track: data.name,
+            track: relations.name,
           }),
 
         headingMode: 'sticky',
diff --git a/src/content/dependencies/linkThing.js b/src/content/dependencies/linkThing.js
index 7ee42980..7784afe7 100644
--- a/src/content/dependencies/linkThing.js
+++ b/src/content/dependencies/linkThing.js
@@ -11,11 +11,15 @@ export default {
 
     tooltip:
       relation('generateTooltip'),
+
+    name:
+      relation('generateName', thing),
   }),
 
   data: (pathKey, thing) => ({
     name: thing.name,
     nameShort: thing.nameShort ?? thing.shortName,
+    nameText: thing.nameText,
 
     path:
       (pathKey
@@ -66,7 +70,7 @@ export default {
     hash: {type: 'string'},
   },
 
-  generate(data, relations, slots, {html, language}) {
+  generate(data, relations, slots, {html}) {
     const path =
       slots.path ?? data.path;
 
@@ -74,14 +78,12 @@ export default {
     const wrapperAttributes = html.attributes();
 
     const showShortName =
-      (slots.preferShortName
-        ? data.nameShort && data.nameShort !== data.name
-        : false);
+      slots.preferShortName &&
+     !data.nameText &&
+      data.nameShort &&
+      data.nameShort !== data.name;
 
-    const name =
-      (showShortName
-        ? data.nameShort
-        : data.name);
+    const name = relations.name;
 
     const showWikiTooltip =
       (slots.tooltipStyle === 'auto'
@@ -105,7 +107,7 @@ export default {
 
     const content =
       (html.isBlank(slots.content)
-        ? language.sanitize(name)
+        ? name
         : slots.content);
 
     if (slots.color !== false) {
diff --git a/src/data/things/track.js b/src/data/things/track.js
index 1871e86b..93193b6a 100644
--- a/src/data/things/track.js
+++ b/src/data/things/track.js
@@ -50,6 +50,7 @@ import {
 import {
   commentatorArtists,
   constitutibleArtworkList,
+  contentString,
   contributionList,
   dimensions,
   directory,
@@ -113,6 +114,7 @@ export class Track extends Thing {
     // > Update & expose - Identifying metadata
 
     name: name('Unnamed Track'),
+    nameText: contentString(),
 
     directory: [
       withDirectorySuffix(),
@@ -579,6 +581,7 @@ export class Track extends Thing {
       // Identifying metadata
 
       'Track': {property: 'name'},
+      'Track Text': {property: 'nameText'},
       'Directory': {property: 'directory'},
       'Suffix Directory': {property: 'suffixDirectoryFromAlbum'},
       'Always Reference By Directory': {property: 'alwaysReferenceByDirectory'},