diff options
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/serialize.js | 71 | ||||
-rw-r--r-- | src/util/wiki-data.js | 31 |
2 files changed, 102 insertions, 0 deletions
diff --git a/src/util/serialize.js b/src/util/serialize.js new file mode 100644 index 00000000..7b0f890f --- /dev/null +++ b/src/util/serialize.js @@ -0,0 +1,71 @@ +export function serializeLink(thing) { + const ret = {}; + ret.name = thing.name; + ret.directory = thing.directory; + if (thing.color) ret.color = thing.color; + return ret; +} + +export function serializeContribs(contribs) { + return contribs.map(({ who, what }) => { + const ret = {}; + ret.artist = serializeLink(who); + if (what) ret.contribution = what; + return ret; + }); +} + +export function serializeImagePaths(original, {thumb}) { + return { + original, + medium: thumb.medium(original), + small: thumb.small(original) + }; +} + +export function serializeCover(thing, pathFunction, { + serializeImagePaths, + urls +}) { + const coverPath = pathFunction(thing, { + to: urls.from('media.root').to + }); + + const { artTags } = thing; + + const cwTags = artTags.filter(tag => tag.isCW); + const linkTags = artTags.filter(tag => !tag.isCW); + + return { + paths: serializeImagePaths(coverPath), + tags: linkTags.map(serializeLink), + warnings: cwTags.map(tag => tag.name) + }; +} + +export function serializeGroupsForAlbum(album, { + serializeLink +}) { + 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}) => ({ + link: serializeLink(group), + descriptionShort: group.descriptionShort, + albumIndex: index, + nextAlbum: next && serializeLink(next), + previousAlbum: previous && serializeLink(previous), + urls: group.urls + })); +} + +export function serializeGroupsForTrack(track, { + serializeLink +}) { + return track.album.groups.map(group => ({ + link: serializeLink(group), + urls: group.urls, + })); +} diff --git a/src/util/wiki-data.js b/src/util/wiki-data.js index e76722bd..13b86090 100644 --- a/src/util/wiki-data.js +++ b/src/util/wiki-data.js @@ -89,6 +89,15 @@ export function sortByArtDate(data) { // Specific data utilities +export function getAlbumCover(album, {to}) { + return to('media.albumCover', album.directory); +} + +export function getAlbumListTag(album) { + // TODO: This is hard-coded! No. 8ad. + return (album.directory === 'unreleased-tracks' ? 'ul' : 'ol'); +} + // This gets all the track o8jects defined in every al8um, and sorts them 8y // date released. Generally, albumData will pro8a8ly already 8e sorted 8efore // you pass it to this function, 8ut individual tracks can have their own @@ -124,3 +133,25 @@ export function getArtistCommentary(artist, {justEverythingMan}) { .replace(/<\/?b>/g, '') .includes('<i>' + artist.name + ':</i>'))); } + +export function getFlashCover(flash, {to}) { + return to('media.flashArt', flash.directory); +} + +export function getFlashLink(flash) { + return `https://homestuck.com/story/${flash.page}`; +} + +export function getTotalDuration(tracks) { + return tracks.reduce((duration, track) => duration + track.duration, 0); +} + +export function getTrackCover(track, {to}) { + // Some al8ums don't have any track art at all, and in those, every track + // just inherits the al8um's own cover art. + if (track.coverArtists === null) { + return getAlbumCover(track.album, {to}); + } else { + return to('media.trackCover', track.album.directory, track.directory); + } +} |