« get me outta code hell

util -> common-util - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/common-util/serialize.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-01-26 17:28:01 -0400
committer(quasar) nebula <qznebula@protonmail.com>2025-01-26 17:28:01 -0400
commit725a33ef50e836553c89a6576f5d281978fe7c47 (patch)
treeaea7906ffa1a24bbbd7b1bd405e20e2a05d9b95b /src/common-util/serialize.js
parentd987efdf3f5e60ad81a5d243629208818cdf8211 (diff)
util -> common-util
Diffstat (limited to 'src/common-util/serialize.js')
-rw-r--r--src/common-util/serialize.js77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/common-util/serialize.js b/src/common-util/serialize.js
new file mode 100644
index 00000000..eb18a759
--- /dev/null
+++ b/src/common-util/serialize.js
@@ -0,0 +1,77 @@
+// Utils used when per-wiki-object data files.
+// Retained for reference and/or later reorganization.
+//
+// Not to be confused with data/serialize.js, which provides a generic
+// interface for serializing any Thing object.
+
+/*
+export function serializeLink(thing) {
+  const ret = {};
+  ret.name = thing.name;
+  ret.directory = thing.directory;
+  if (thing.color) ret.color = thing.color;
+  return ret;
+}
+
+export function serializeContribs(contribs) {
+  return contribs.map(({artist, annotation}) => {
+    const ret = {};
+    ret.artist = serializeLink(artist);
+    if (annotation) ret.contribution = annotation;
+    return ret;
+  });
+}
+
+export function serializeImagePaths(original, {thumb}) {
+  return {
+    original,
+    medium: thumb.medium(original),
+    small: thumb.small(original),
+  };
+}
+
+export function serializeCover(thing, pathFunction, {
+  serializeImagePaths,
+  urls,
+}) {
+  const coverPath = pathFunction(thing, {
+    to: urls.from('media.root').to,
+  });
+
+  const {artTags} = thing;
+
+  const cwTags = artTags.filter((tag) => tag.isContentWarning);
+  const linkTags = artTags.filter((tag) => !tag.isContentWarning);
+
+  return {
+    paths: serializeImagePaths(coverPath),
+    tags: linkTags.map(serializeLink),
+    warnings: cwTags.map((tag) => tag.name),
+  };
+}
+
+export function serializeGroupsForAlbum(album, {serializeLink}) {
+  return album.groups
+    .map((group) => {
+      const index = group.albums.indexOf(album);
+      const next = group.albums[index + 1] || null;
+      const previous = group.albums[index - 1] || null;
+      return {group, index, next, previous};
+    })
+    .map(({group, index, next, previous}) => ({
+      link: serializeLink(group),
+      descriptionShort: group.descriptionShort,
+      albumIndex: index,
+      nextAlbum: next && serializeLink(next),
+      previousAlbum: previous && serializeLink(previous),
+      urls: group.urls,
+    }));
+}
+
+export function serializeGroupsForTrack(track, {serializeLink}) {
+  return track.album.groups.map((group) => ({
+    link: serializeLink(group),
+    urls: group.urls,
+  }));
+}
+*/