« get me outta code hell

content: generatePageLayout: conditional blockwrap - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-04-08 08:41:21 -0300
committer(quasar) nebula <qznebula@protonmail.com>2025-04-08 08:48:55 -0300
commitefabd91737e4ab0a2cd6a4bcc9239bc2811b850e (patch)
treef2e7c4871cf3b27aa293ceeb8841db8eb1b60726
parent4eba105eda91bd8579e4851f410a7ef128cf6353 (diff)
content: generatePageLayout: conditional blockwrap
Blockwrap is a scary scary funny metatag, so in order to insist
we really don't need it, we have to disable it (in practice) on
both the "don't wrap what's ahead" and "don't wrap me and my
friends together" elements.
-rw-r--r--src/content/dependencies/generatePageLayout.js58
1 files changed, 37 insertions, 21 deletions
diff --git a/src/content/dependencies/generatePageLayout.js b/src/content/dependencies/generatePageLayout.js
index 8a073624..9dc7eaef 100644
--- a/src/content/dependencies/generatePageLayout.js
+++ b/src/content/dependencies/generatePageLayout.js
@@ -1,5 +1,5 @@
 import {openAggregate} from '#aggregate';
-import {empty, repeat} from '#sugar';
+import {atOffset, empty, repeat} from '#sugar';
 
 export default {
   contentDependencies: [
@@ -361,7 +361,7 @@ export default {
 
             slots.navLinks
               ?.filter(Boolean)
-              ?.map((cur, i) => {
+              ?.map((cur, i, entries) => {
                 let content;
 
                 if (cur.html) {
@@ -395,25 +395,41 @@ export default {
                   (slots.navLinkStyle === 'hierarchical' &&
                     i === slots.navLinks.length - 1);
 
-                return (
-                  html.metatag('blockwrap',
-                    html.tag('span', {class: 'nav-link'},
-                      showAsCurrent &&
-                        {class: 'current'},
-
-                      [
-                        html.tag('span', {class: 'nav-link-content'},
-                          content),
-
-                        html.tag('span', {class: 'nav-link-accent'},
-                          {[html.noEdgeWhitespace]: true},
-                          {[html.onlyIfContent]: true},
-
-                          language.$('misc.navAccent', {
-                            [language.onlyIfOptions]: ['links'],
-                            links: cur.accent,
-                          })),
-                      ])));
+                const navLink =
+                  html.tag('span', {class: 'nav-link'},
+                    showAsCurrent &&
+                      {class: 'current'},
+
+                    [
+                      html.tag('span', {class: 'nav-link-content'},
+                        content),
+
+                      html.tag('span', {class: 'nav-link-accent'},
+                        {[html.noEdgeWhitespace]: true},
+                        {[html.onlyIfContent]: true},
+
+                        language.$('misc.navAccent', {
+                          [language.onlyIfOptions]: ['links'],
+                          links: cur.accent,
+                        })),
+                    ]);
+
+                const considerNotBlockwrapping = entry =>
+                  entry.blockwrap !== true &&
+                  (entry.blockwrap === false ||
+                   entry.auto === 'home');
+
+                const prev =
+                  atOffset(entries, i, -1);
+
+                if (
+                  considerNotBlockwrapping(cur) ||
+                  prev && considerNotBlockwrapping(prev)
+                ) {
+                  return navLink;
+                } else {
+                  return html.metatag('blockwrap', navLink);
+                }
               })),
 
           html.tag('div', {class: 'nav-bottom-row'},