« get me outta code hell

data steps: generateAlbumInfoPage & relations implementation - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/content/dependencies/generateAlbumStyleRules.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2023-03-19 17:57:27 -0300
committer(quasar) nebula <qznebula@protonmail.com>2023-03-19 17:57:27 -0300
commita213861e467ec99b2a197c4c54f9034a4d9f1516 (patch)
tree03b8b2e3affb17ab26dc88feaf2b4dc627f273ed /src/content/dependencies/generateAlbumStyleRules.js
parent41c22a553d43fbcc04b7a17ec6f83583ed7f3443 (diff)
data steps: generateAlbumInfoPage & relations implementation
Diffstat (limited to 'src/content/dependencies/generateAlbumStyleRules.js')
-rw-r--r--src/content/dependencies/generateAlbumStyleRules.js61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/content/dependencies/generateAlbumStyleRules.js b/src/content/dependencies/generateAlbumStyleRules.js
new file mode 100644
index 0000000..c954783
--- /dev/null
+++ b/src/content/dependencies/generateAlbumStyleRules.js
@@ -0,0 +1,61 @@
+import {empty} from '../../util/sugar.js';
+
+export default {
+  extraDependencies: [
+    'to',
+  ],
+
+  data(album) {
+    const data = {};
+
+    data.hasWallpaper = !empty(album.wallpaperArtistContribs);
+    data.hasBanner = !empty(album.bannerArtistContribs);
+
+    if (data.hasWallpaper) {
+      data.hasWallpaperStyle = !!album.wallpaperStyle;
+      data.wallpaperPath = ['media.albumWallpaper', album.directory, album.wallpaperFileExtension];
+      data.wallpaperStyle = album.wallpaperStyle;
+    }
+
+    if (data.hasBanner) {
+      data.hasBannerStyle = !!album.bannerStyle;
+      data.bannerStyle = album.bannerStyle;
+    }
+
+    return data;
+  },
+
+  generate(data, {to}) {
+    const wallpaperPart =
+      (data.hasWallpaper
+        ? [
+            `body::before {`,
+            `    background-image: url("${to(...data.wallpaperPath)}");`,
+            ...(data.hasWallpaperStyle
+              ? data.wallpaperStyle
+                  .split('\n')
+                  .map(line => `    ${line}`)
+              : []),
+            `}`,
+          ]
+        : []);
+
+    const bannerPart =
+      (data.hasBannerStyle
+        ? [
+            `#banner img {`,
+            ...data.bannerStyle
+              .split('\n')
+              .map(line => `    ${line}`),
+            `}`,
+          ]
+        : []);
+
+    return [
+      ...wallpaperPart,
+      ...bannerPart,
+    ]
+      .filter(Boolean)
+      .join('\n');
+  },
+};