« 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/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
4 files changed, 54 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) {