« get me outta code hell

info card thumbnail & image link/color niceness - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/common
diff options
context:
space:
mode:
author(quasar) nebula <towerofnix@gmail.com>2021-04-05 15:21:24 -0300
committer(quasar) nebula <towerofnix@gmail.com>2021-04-05 15:21:24 -0300
commitddca239668167b34157e6dfd2ab88e6b9774db7d (patch)
treed1d52a696ea3f236167623430dd2a81819449eb4 /common
parent643eeb01b96e7635201505ef201c60ab405bd419 (diff)
info card thumbnail & image link/color niceness
Diffstat (limited to 'common')
-rw-r--r--common/common.js21
1 files changed, 20 insertions, 1 deletions
diff --git a/common/common.js b/common/common.js
index 56ee7b35..165e0f6d 100644
--- a/common/common.js
+++ b/common/common.js
@@ -117,7 +117,26 @@ const C = {
         (artist.flashes ? artist.flashes.asContributor.length : 0)
     ),
 
-    getArtistCommentary: (artist, {justEverythingMan}) => justEverythingMan.filter(thing => thing.commentary && thing.commentary.replace(/<\/?b>/g, '').includes('<i>' + artist.name + ':</i>'))
+    getArtistCommentary: (artist, {justEverythingMan}) => justEverythingMan.filter(thing => thing.commentary && thing.commentary.replace(/<\/?b>/g, '').includes('<i>' + artist.name + ':</i>')),
+
+    // Graciously stolen from https://stackoverflow.com/a/54071699! ::::)
+    // in: r,g,b in [0,1], out: h in [0,360) and s,l in [0,1]
+    rgb2hsl: (r,g,b) => {
+        let a=Math.max(r,g,b), n=a-Math.min(r,g,b), f=(1-Math.abs(a+a-n-1));
+        let h= n && ((a==r) ? (g-b)/n : ((a==g) ? 2+(b-r)/n : 4+(r-g)/n));
+        return [60*(h<0?h+6:h), f ? n/f : 0, (a+a-n)/2];
+    },
+
+    getColors: primary => {
+        const [ r, g, b ] = primary.slice(1)
+            .match(/[0-9a-fA-F]{2,2}/g)
+            .slice(0, 3)
+            .map(val => parseInt(val, 16) / 255);
+        const [ h, s, l ] = C.rgb2hsl(r, g, b);
+        const dim = `hsl(${Math.round(h)}deg, ${Math.round(s * 50)}%, ${Math.round(l * 80)}%)`;
+
+        return {primary, dim};
+    }
 };
 
 if (typeof module === 'object') {