summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author(quasar) nebula <towerofnix@gmail.com>2021-05-03 10:15:33 -0300
committer(quasar) nebula <towerofnix@gmail.com>2021-05-03 10:15:33 -0300
commitab3eb6cef7dee1ce44c94855df74f003e9d8a8f4 (patch)
tree2e392bfc8d6c6e9535dd3c486e190a219630ef2e
parentd400798f5fd98d56230fe4779b0231538a0ed326 (diff)
add album data files and tweak track data too!
-rw-r--r--static/client.js8
-rwxr-xr-xupd8.js99
2 files changed, 87 insertions, 20 deletions
diff --git a/static/client.js b/static/client.js
index 1f8d51e..649ca31 100644
--- a/static/client.js
+++ b/static/client.js
@@ -277,10 +277,10 @@ const infoCard = (() => {
link(nameLink, 'track', data);
const albumLink = container.querySelector('.info-card-album a');
- link(albumLink, 'album', data.links.album);
+ link(albumLink, 'album', data.album);
const artistSpan = container.querySelector('.info-card-artists span');
- artistSpan.innerHTML = joinElements('conjunction', data.links.artists.map(({ who: artist }) => {
+ artistSpan.innerHTML = joinElements('conjunction', data.artists.map(({ artist }) => {
const a = document.createElement('a');
a.href = getLinkHref('artist', artist.directory);
a.innerText = artist.name;
@@ -289,9 +289,9 @@ const infoCard = (() => {
const coverArtistParagraph = container.querySelector('.info-card-cover-artists');
const coverArtistSpan = coverArtistParagraph.querySelector('span');
- if (data.links.coverArtists.length) {
+ if (data.coverArtists.length) {
coverArtistParagraph.style.display = 'block';
- coverArtistSpan.innerHTML = joinElements('conjunction', data.links.coverArtists.map(({ who: artist }) => {
+ coverArtistSpan.innerHTML = joinElements('conjunction', data.coverArtists.map(({ artist }) => {
const a = document.createElement('a');
a.href = getLinkHref('artist', artist.directory);
a.innerText = artist.name;
diff --git a/upd8.js b/upd8.js
index bc6ec90..5d9c9fa 100755
--- a/upd8.js
+++ b/upd8.js
@@ -191,6 +191,7 @@ const urlSpec = {
root: '',
path: '<>',
+ album: 'album/<>',
track: 'track/<>'
}
},
@@ -2131,8 +2132,8 @@ function serializeLink(thing) {
function serializeContribs(contribs) {
return contribs.map(({ who, what }) => ({
- who: serializeLink(who),
- what
+ artist: serializeLink(who),
+ contribution: what
}));
}
@@ -2153,6 +2154,31 @@ function serializeCover(thing, pathFunction) {
};
}
+function serializeGroupsForAlbum(album) {
+ return album.groups.map(group => {
+ const index = group.albums.indexOf(album);
+ const next = group.albums[index + 1] || null;
+ const previous = group.albums[index - 1] || null;
+ return {group, index, next, previous};
+ }).map(({group, index, next, previous}) => ({
+ name: group.name,
+ descriptionShort: group.descriptionShort,
+ albumIndex: index,
+ nextAlbum: next && serializeLink(next),
+ previousAlbum: previous && serializeLink(previous),
+ urls: group.urls,
+ link: serializeLink(group)
+ }));
+}
+
+function serializeGroupsForTrack(track) {
+ return track.album.groups.map(group => ({
+ name: group.name,
+ urls: group.urls,
+ link: serializeLink(group)
+ }));
+}
+
function validateWritePath(path, urlGroup) {
if (!Array.isArray(path)) {
return {error: `Expected array, got ${path}`};
@@ -3028,10 +3054,44 @@ function writeAlbumPage(album) {
};
const commentaryEntries = [album, ...album.tracks].filter(x => x.commentary).length;
+ const albumDuration = getTotalDuration(album.tracks);
const listTag = getAlbumListTag(album);
- return ({strings, writePage}) => writePage('album', album.directory, ({to}) => ({
+ const data = {
+ type: 'data',
+ path: ['album', album.directory],
+ data: () => ({
+ name: album.name,
+ directory: album.directory,
+ dates: {
+ released: album.date,
+ trackArtAdded: album.trackArtDate,
+ coverArtAdded: album.coverArtDate,
+ addedToWiki: album.dateAdded
+ },
+ duration: albumDuration,
+ color: album.color,
+ cover: serializeCover(album, getAlbumCover),
+ artists: serializeContribs(album.artists || []),
+ coverArtists: serializeContribs(album.coverArtists || []),
+ wallpaperArtists: serializeContribs(album.wallpaperArtists || []),
+ bannerArtists: serializeContribs(album.bannerArtists || []),
+ groups: serializeGroupsForAlbum(album),
+ trackGroups: album.trackGroups?.map(trackGroup => ({
+ name: trackGroup.name,
+ color: trackGroup.color,
+ tracks: trackGroup.tracks.map(track => track.directory)
+ })),
+ tracks: album.tracks.map(track => ({
+ name: track.name,
+ duration: track.duration,
+ link: serializeLink(track)
+ }))
+ })
+ };
+
+ const page = {type: 'page', path: ['album', album.directory], page: ({strings, to}) => ({
title: strings('albumPage.title', {album: album.name}),
stylesheet: getAlbumStylesheet(album, {to}),
theme: getThemeString(album, [
@@ -3090,7 +3150,7 @@ function writeAlbumPage(album) {
date: strings.count.date(album.coverArtDate)
}),
strings('releaseInfo.duration', {
- duration: strings.count.duration(getTotalDuration(album.tracks), {approximate: album.tracks.length > 1})
+ duration: strings.count.duration(albumDuration, {approximate: album.tracks.length > 1})
})
].filter(Boolean).join('<br>\n')}
</p>
@@ -3165,7 +3225,9 @@ function writeAlbumPage(album) {
</div>
`
}
- }));
+ })};
+
+ return [page, data];
}
function getAlbumStylesheet(album, {to}) {
@@ -3251,23 +3313,28 @@ function writeTrackPage(track) {
data: () => ({
name: track.name,
directory: track.directory,
- date: track.date,
+ dates: {
+ released: track.date,
+ originallyReleased: track.originalDate,
+ coverArtAdded: track.coverArtDate
+ },
duration: track.duration,
color: track.color,
cover: serializeCover(track, getTrackCover),
- links: {
- artists: serializeContribs(track.artists),
- contributors: serializeContribs(track.contributors),
- coverArtists: serializeContribs(track.coverArtists || []),
- album: serializeLink(track.album),
- groups: track.album.groups.map(serializeLink),
- references: track.references.map(serializeLink),
- referencedBy: track.referencedBy.map(serializeLink)
- }
+ artists: serializeContribs(track.artists),
+ contributors: serializeContribs(track.contributors),
+ coverArtists: serializeContribs(track.coverArtists || []),
+ album: serializeLink(track.album),
+ groups: serializeGroupsForTrack(track),
+ references: track.references.map(serializeLink),
+ referencedBy: track.referencedBy.map(serializeLink),
+ alsoReleasedAs: otherReleases.map(track => ({
+ track: serializeLink(track),
+ album: serializeLink(track.album)
+ }))
})
};
- // const page = ({strings, writePage}) => writePage('track', track.directory, ({to}) => ({
const page = {type: 'page', path: ['track', track.directory], page: ({strings, to}) => ({
title: strings('trackPage.title', {track: track.name}),
stylesheet: getAlbumStylesheet(album, {to}),