cpt-waffle-lotide
Version:
LoTide in Typescript
84 lines (83 loc) • 2.45 kB
JavaScript
;
;
;
const library = {
tracks: {
t01: {
id: "t01",
name: "Code Monkey",
artist: "Jonathan Coulton",
album: "Thing a Week Three"
},
t02: {
id: "t02",
name: "Model View Controller",
artist: "James Dempsey",
album: "WWDC 2003"
},
t03: {
id: "t03",
name: "Four Thirty-Three",
artist: "John Cage",
album: "Woodstock 1952"
}
},
playlists: {
p01: {
id: "p01",
name: "Coding Music",
tracks: ["t01", "t02"]
},
p02: {
id: "p02",
name: "Other Playlist",
tracks: ["t03"]
}
},
printPlaylists: undefined,
printTracks: undefined,
printPlaylist: undefined,
addTrackToPlaylist: undefined,
addTrack: undefined,
addPlaylist: undefined
};
const printPlaylists = function () {
const { playlists } = this;
const playlistsKeys = Object.keys(library.playlists);
playlistsKeys.forEach((id) => {
console.log(`${id}: ${playlists[id].name} - ${playlists[id].tracks.length} tracks`);
});
};
library.printPlaylists = printPlaylists;
const printTracks = function () {
const { tracks } = this;
const tracksKeys = Object.keys(tracks);
tracksKeys.forEach((item) => {
const { id, name, artist } = library.tracks[item];
console.log(`${id}: ${name} by ${artist}`);
});
};
const printPlaylist = function (playlistId) {
const { playlists } = this;
console.log(`${playlistId}: ${playlists[playlistId].name} ${playlists[playlistId].tracks.length} - tracks`);
};
library.printPlaylist = printPlaylist;
const addTrackToPlaylist = function (trackId, playlistId) {
library.playlists[playlistId].tracks.push(trackId);
};
library.addTrackToPlaylist = addTrackToPlaylist;
const generateUid = function () {
return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
};
const addTrack = function (name, artist, album) {
const id = `t${generateUid()}`;
const track = { id, name, artist, album };
library.tracks[id] = track;
};
library.addTrack = addTrack;
const addPlaylist = function (name) {
const id = `p${generateUid()}`;
const playlist = { id, name, tracks: [] };
library.playlists[id] = playlist;
};
library.addPlaylist = addPlaylist;