« get me outta code hell

content: generateSocialEmbed: process image path - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/content/dependencies/generateSocialEmbed.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-01-26 16:56:47 -0400
committer(quasar) nebula <qznebula@protonmail.com>2025-01-26 16:56:47 -0400
commit91cde73bb69944ec9ceabf8d23ce829df12dbb0a (patch)
tree97ffd78123fcd34bcfd89ca230e3a4aa81bd5c29 /src/content/dependencies/generateSocialEmbed.js
parent0d8619a70f03d9be3e3930fbc499a5918ec88c62 (diff)
content: generateSocialEmbed: process image path
Diffstat (limited to 'src/content/dependencies/generateSocialEmbed.js')
-rw-r--r--src/content/dependencies/generateSocialEmbed.js25
1 files changed, 21 insertions, 4 deletions
diff --git a/src/content/dependencies/generateSocialEmbed.js b/src/content/dependencies/generateSocialEmbed.js
index 85a0f4d3..115dc262 100644
--- a/src/content/dependencies/generateSocialEmbed.js
+++ b/src/content/dependencies/generateSocialEmbed.js
@@ -1,5 +1,7 @@
+import {getOrigin} from '#urls';
+
 export default {
-  extraDependencies: ['html', 'language', 'wikiData'],
+  extraDependencies: ['html', 'language', 'urls', 'wikiData'],
 
   sprawl({wikiInfo}) {
     return {
@@ -23,10 +25,10 @@ export default {
 
     headingContent: {type: 'string'},
     headingLink: {type: 'string'},
-    imagePath: {type: 'string'},
+    imagePath: {validate: v => v.strictArrayOf(v.isString)},
   },
 
-  generate(data, slots, {html, language}) {
+  generate(data, slots, {html, language, urls}) {
     switch (slots.mode) {
       case 'html':
         return html.tags([
@@ -40,7 +42,22 @@ export default {
             }),
 
           slots.imagePath &&
-            html.tag('meta', {property: 'og:image', content: slots.imagePath}),
+            html.tag('meta', {
+              property: 'og:image',
+              content:
+                (() => {
+                  const toResult =
+                    urls
+                      .from('shared.root')
+                      .to(...slots.imagePath);
+
+                  if (getOrigin(toResult)) {
+                    return toResult;
+                  } else {
+                    return '/' + toResult;
+                  }
+                })(),
+            }),
         ]);
 
       case 'json':