From 8ab00d99fa2f14ac983f0693552b26e4050a939c Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Thu, 23 Mar 2023 15:00:59 -0300 Subject: data steps: content function evaluation essentials Also some more actual content in generateAlbumInfoPageContent, which is in fact fully working as-is(!!). --- src/content/dependencies/linkTemplate.js | 53 ++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/content/dependencies/linkTemplate.js (limited to 'src/content/dependencies/linkTemplate.js') diff --git a/src/content/dependencies/linkTemplate.js b/src/content/dependencies/linkTemplate.js new file mode 100644 index 00000000..94b90652 --- /dev/null +++ b/src/content/dependencies/linkTemplate.js @@ -0,0 +1,53 @@ +import {empty} from '../../util/sugar.js'; + +export default { + extraDependencies: [ + 'appendIndexHTML', + 'getColors', + 'html', + 'to', + ], + + generate({ + appendIndexHTML, + getColors, + html, + to, + }) { + return html.template(slot => + slot('color', ([color]) => + slot('hash', ([hash]) => + slot('href', ([href]) => + slot('path', ([...path]) => { + let style; + + if (!href && !empty(path)) { + href = to(...path); + } + + if (appendIndexHTML) { + if (/^(?!https?:\/\/).+\/$/.test(href)) { + href += 'index.html'; + } + } + + if (hash) { + href += (hash.startsWith('#') ? '' : '#') + hash; + } + + if (color) { + const {primary, dim} = getColors(color); + style = `--primary-color: ${primary}; --dim-color: ${dim}`; + } + + return slot('attributes', ([attributes]) => + html.tag('a', + { + ...attributes ?? {}, + href, + style, + }, + slot('content'))); + }))))); + }, +} -- cgit 1.3.0-6-gf8a5