« get me outta code hell

content, css: generateContentEntryDate: relative date - 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:
author(quasar) nebula <qznebula@protonmail.com>2026-03-26 17:36:39 -0300
committer(quasar) nebula <qznebula@protonmail.com>2026-03-26 17:36:39 -0300
commitf1c8bbf0f95a7f9ef52e041628e79a875b55aae4 (patch)
treee3a8d8ee6479fcaa3282ecc276738f230ecb84d1 /src/content/dependencies
parent01bd5cec3a83e9ced7715954e76dd820aa7e91dd (diff)
content, css: generateContentEntryDate: relative date
Diffstat (limited to 'src/content/dependencies')
-rw-r--r--src/content/dependencies/generateContentEntryDate.js100
1 files changed, 88 insertions, 12 deletions
diff --git a/src/content/dependencies/generateContentEntryDate.js b/src/content/dependencies/generateContentEntryDate.js
index ca794314..845cb5ed 100644
--- a/src/content/dependencies/generateContentEntryDate.js
+++ b/src/content/dependencies/generateContentEntryDate.js
@@ -1,3 +1,5 @@
+import {sameDayAs} from '#wiki-data';
+
 export default {
   relations: (relation, _entry) => ({
     textWithTooltip:
@@ -8,19 +10,102 @@ export default {
   }),
 
   data: (entry) => ({
+    isWikiEditorCommentary: entry.isWikiEditorCommentary,
+
     date: entry.date,
     secondDate: entry.secondDate,
     dateKind: entry.dateKind,
 
     accessDate: entry.accessDate,
     accessKind: entry.accessKind,
+
+    sameDayAs:
+      (entry.secondDate
+        ? null
+        : sameDayAs(entry.date, entry.thing)),
+
+    thingDate: entry.thing.date,
+
+    thingType:
+      (entry.thing.isAlbum &&
+       entry.thing.style === 'single'
+        ? 'single'
+
+     : entry.thing.isAlbum ? 'album'
+
+     : entry.thing.isTrack &&
+       entry.thing.date === entry.thing.album.date &&
+       entry.thing.style === 'single'
+        ? 'single'
+
+     : entry.thing.isTrack &&
+       entry.thing.date === entry.thing.album.date
+        ? 'album'
+
+     : entry.thing.isTrack ? 'track'
+
+     : entry.thing.isFlash ? 'flash'
+
+     : null),
   }),
 
   generate(data, relations, {html, language}) {
     const titleCapsule = language.encapsulate('misc.artistCommentary.entry.title');
+    const dateCapsule = language.encapsulate(titleCapsule, 'date');
+    const tooltip = relations.tooltip;
+
+    tooltip.setSlots({
+      attributes: {class: 'commentary-date-tooltip'},
+      contentAttributes: [
+        {[html.joinChildren]: html.tag('span', {class: 'cute-break'})},
+      ],
+
+      content: [
+        data.sameDayAs === 'album' &&
+          language.$(dateCapsule, 'sameDayAsAlbum'),
+
+        data.sameDayAs === 'single' &&
+          language.$(dateCapsule, 'sameDayAsSingle'),
+
+        data.sameDayAs === 'track' &&
+          language.$(dateCapsule, 'sameDayAsTrack'),
+
+        data.sameDayAs === 'flash' &&
+          language.$(dateCapsule, 'sameDayAsFlash'),
+
+        data.sameDayAs === null &&
+        data.date &&
+        data.thingDate &&
+        !data.secondDate &&
+        !data.isWikiEditorCommentary &&
+          html.tags([
+            data.thingType &&
+              html.tag('span', {class: 'relative-to'},
+                language.$(dateCapsule, 'relativeTo', {
+                  thing:
+                    language.$(dateCapsule, 'relativeTo', data.thingType),
+                })),
+
+            html.tag('br'),
+
+            language.formatRelativeDate(data.date, data.thingDate, {
+              considerRoundingDays: true,
+              approximate: true,
+              absolute: false,
+            }),
+          ]),
+
+        data.accessKind &&
+        data.accessDate &&
+          language.$(dateCapsule, data.accessKind, {
+            date:
+              language.formatDate(data.accessDate),
+          }),
+      ],
+    });
 
     const willDisplayTooltip =
-      !!(data.accessKind && data.accessDate);
+      !html.isBlank(tooltip);
 
     const topAttributes =
       {class: 'commentary-date'};
@@ -36,7 +121,7 @@ export default {
             ]
           : topAttributes),
 
-        language.encapsulate(titleCapsule, 'date', workingCapsule => {
+        language.encapsulate(dateCapsule, workingCapsule => {
           const workingOptions = {};
 
           if (!data.date) {
@@ -75,16 +160,7 @@ export default {
         attributes: topAttributes,
         text: time,
 
-        tooltip:
-          relations.tooltip.slots({
-            attributes: {class: 'commentary-date-tooltip'},
-
-            content:
-              language.$(titleCapsule, 'date', data.accessKind, {
-                date:
-                  language.formatDate(data.accessDate),
-              }),
-          }),
+        tooltip: relations.tooltip,
       });
     } else {
       return time;