« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/page
diff options
context:
space:
mode:
Diffstat (limited to 'src/page')
-rw-r--r--src/page/album.js216
-rw-r--r--src/page/index.js22
2 files changed, 46 insertions, 192 deletions
diff --git a/src/page/album.js b/src/page/album.js
index 4ed4dfcb..6b82f84f 100644
--- a/src/page/album.js
+++ b/src/page/album.js
@@ -1,205 +1,59 @@
 // Album page specification.
 
-import {
-  bindOpts,
-  compareArrays,
-  empty,
-} from '../util/sugar.js';
-
-import {
-  getAlbumCover,
-  getAlbumListTag,
-  getTotalDuration,
-} from '../util/wiki-data.js';
-
-import {
-  u_generateAlbumStylesheet,
-} from '../misc-templates.js';
-
 export const description = `per-album info & track artwork gallery pages`;
 
 export function targets({wikiData}) {
   return wikiData.albumData;
 }
 
-export const dataSteps = {
-  contentDependencies: [
-    'generateAlbumSocialEmbed',
-    'generateAlbumStylesheet',
-  ],
-
-  computePathsForTarget(data, album) {
-    data.hasGalleryPage = album.tracks.some(t => t.hasUniqueCoverArt);
-    data.hasCommentaryPage = !!album.commentary || album.tracks.some(t => t.commentary);
-
-    return [
-      {
-        type: 'page',
-        path: ['album', album.directory],
-      },
-
-      data.hasGalleryPage && {
-        type: 'page',
-        path: ['albumGallery', album.directory],
-      },
+export function pathsForTarget(album) {
+  const hasGalleryPage = album.tracks.some(t => t.hasUniqueCoverArt);
+  const hasCommentaryPage = !!album.commentary || album.tracks.some(t => t.commentary);
 
-      data.hasCommentaryPage && {
-        type: 'page',
-        path: ['albumCommentary', album.directory],
-      },
+  return [
+    {
+      type: 'page',
+      path: ['album', album.directory],
 
-      {
-        type: 'data',
-        path: ['album', album.directory],
+      contentFunction: {
+        name: 'generateAlbumInfoPage',
+        args: [album],
       },
-    ];
-  },
-
-  computeDataCommonAcrossMixedWrites(data, album) {
-    data.albumDuration = getTotalDuration(album.tracks);
-  },
-
-  computeDataCommonAcrossPageWrites(data, album) {
-    data.listTag = getAlbumListTag(album);
-  },
-
-  computeDataForPageWrite: {
-    album(data, album, _pathArgs) {
-      // TODO: We can't use content-unfulfilled functions here.
-      // But how do we express that these need to be fulfilled
-      // from within data steps?
-      data.socialEmbedData = data.dependencies.generateAlbumSocialEmbed.data(album);
-      data.stylesheetData = data.dependencies.generateAlbumStylesheet.data(album);
-
-      data.name = album.name;
-      data.color = album.color;
-      data.directory = album.directory;
-
-      data.hasAdditionalFiles = !empty(album.additionalFiles);
-      data.numAdditionalFiles = album.additionalFiles.flatMap((g) => g.files).length;
-
-      data.displayTrackSections =
-        album.trackSections &&
-          (album.trackSections.length > 1 ||
-            !album.trackSections[0]?.isDefaultTrackSection);
-    },
-  },
-
-  computeContentForPageWrite: {
-    album(data, {
-      absoluteTo,
-      fancifyURL,
-      generateAdditionalFilesShortcut,
-      generateAdditionalFilesList,
-      generateChronologyLinks,
-      generateContributionLinks,
-      generateContentHeading,
-      generateNavigationLinks,
-      getAlbumCover,
-      getAlbumStylesheet,
-      getLinkThemeString,
-      getSizeOfAdditionalFile,
-      getThemeString,
-      html,
-      link,
-      language,
-      transformMultiline,
-      urls,
-    }) {
-      const generateTrackListItem = bindOpts(u_generateTrackListItem, {
-        generateContributionLinks,
-        getLinkThemeString,
-        html,
-        language,
-        link,
-      });
-
-      const generateAlbumSocialEmbedDescription = u_generateAlbumSocialEmbedDescription.fulfill({
-        language,
-      });
-
-      const generateAlbumSocialEmbed = u_generateAlbumSocialEmbed.fulfill({
-        generateSocialEmbedDescription: generateAlbumSocialEmbedDescription,
-      });
-
-      void generateTrackListItem;
     },
-  },
-};
 
-/*
-const infoPage = {
-  page: () => {
-    return {
-      banner: !empty(album.bannerArtistContribs) && {
-        dimensions: album.bannerDimensions,
-        path: [
-          'media.albumBanner',
-          album.directory,
-          album.bannerFileExtension,
-        ],
-        alt: language.$('misc.alt.albumBanner'),
-        position: 'top',
-      },
+    /*
+    hasGalleryPage && {
+      type: 'page',
+      path: ['albumGallery', album.directory],
 
-      cover: {
-        src: getAlbumCover(album),
-        alt: language.$('misc.alt.albumCover'),
-        artTags: album.artTags,
+      contentFunction: {
+        name: 'generateAlbumGalleryPage',
+        args: [album],
       },
+    },
 
-      main: {
-        headingMode: 'sticky',
+    hasCommentaryPage && {
+      type: 'page',
+      path: ['albumCommentary', album.directory],
 
-        content: [
-        ],
+      contentFunction: {
+        name: 'generateAlbumCommentaryPage',
+        args: [album],
       },
+    },
 
-      sidebarLeft: generateAlbumSidebar(album, null, {
-        fancifyURL,
-        getLinkThemeString,
-        html,
-        link,
-        language,
-        transformMultiline,
-        wikiData,
-      }),
+    {
+      type: 'data',
+      path: ['album', album.directory],
 
-      nav: {
-        linkContainerClasses: ['nav-links-hierarchy'],
-        links: [
-          {toHome: true},
-          {
-            html: language.$('albumPage.nav.album', {
-              album: link.album(album, {class: 'current'}),
-            }),
-          },
-          {
-            divider: false,
-            html: generateAlbumNavLinks(album, null, {
-              generateNavigationLinks,
-              html,
-              language,
-              link,
-            }),
-          }
-        ],
-        content: generateAlbumChronologyLinks(album, null, {
-          generateChronologyLinks,
-          html,
-        }),
+      contentFunction: {
+        name: 'generateAlbumDataFile',
+        args: [album],
       },
-
-      secondaryNav: generateAlbumSecondaryNav(album, null, {
-        getLinkThemeString,
-        html,
-        language,
-        link,
-      }),
-    };
-  },
-};
-*/
+    },
+    */
+  ];
+}
 
 /*
 export function write(album, {wikiData}) {
diff --git a/src/page/index.js b/src/page/index.js
index fc0c646c..8cf1d965 100644
--- a/src/page/index.js
+++ b/src/page/index.js
@@ -110,14 +110,14 @@
 // pertain only to site page generation.
 
 export * as album from './album.js';
-export * as albumCommentary from './album-commentary.js';
-export * as artist from './artist.js';
-export * as artistAlias from './artist-alias.js';
-export * as flash from './flash.js';
-export * as group from './group.js';
-export * as homepage from './homepage.js';
-export * as listing from './listing.js';
-export * as news from './news.js';
-export * as static from './static.js';
-export * as tag from './tag.js';
-export * as track from './track.js';
+// export * as albumCommentary from './album-commentary.js';
+// export * as artist from './artist.js';
+// export * as artistAlias from './artist-alias.js';
+// export * as flash from './flash.js';
+// export * as group from './group.js';
+// export * as homepage from './homepage.js';
+// export * as listing from './listing.js';
+// export * as news from './news.js';
+// export * as static from './static.js';
+// export * as tag from './tag.js';
+// export * as track from './track.js';