-
Notifications
You must be signed in to change notification settings - Fork 0
/
script.js
139 lines (119 loc) · 3.54 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
class Song {
constructor(name, rating) {
this.name = name;
this.rating = rating;
}
describe (){
return `${this.name} is given a rating of ${this.rating}.`;
}
}
class Artist {
constructor(name) {
this.name = name;
this.songs = [];
}
addSong(song) {
if(song instanceof Song){
this.songs.push(song);
} else {
throw new Error(`You can only add an instance of Song. Argument is not a song: ${song}`);
}
}
describe(){
return `${this.name} has ${this.songs.length} songs.`;
}
}
class Menu {
constructor(){
this.artists = [];
this.selectedArtist = null;
}
start(){
let selection = this.showMainMenuOptions();
while (selection != 0) {
switch (selection){
case '1':
this.addArtist();
break;
case '2':
this.viewArtist();
break;
case '3':
this.deleteArtist();
break;
case '4':
this.displayArtists();
break;
default:
selection = 0;
}
selection = this.showMainMenuOptions();
}
alert(`See you later alligator`);
}
showMainMenuOptions(){
return prompt(`
1) Add Artist
2) View Artist
3) Delete Artist
4) Display Artist
0) Exit
`);
}
showArtistMenuOptions(artistInfo){
return prompt(`
1) Add Song
2) Delete Song
0) Back
${artistInfo}
`);
}
displayArtists(){
let artistString = '';
for(let i = 0; i < this.artists.length; i++){
artistString += i + ')' + this.artists[i].name + '\n';
}
alert(artistString);
}
addArtist(){
let name = prompt(`Enter the name of the Artist: `);
this.artists.push(new Artist (name));
}
viewArtist(){
let index = prompt(`Enter the index of the artist you wish to view.`);
if(index > -1 && index < this.artists.length) {
this.selectedArtist = this.artists[index];
let description = 'Artist name: ' + this.selectedArtist.name + '\n';
for(let i = 0; i < this.selectedArtist.songs.length; i++) {
description += i + ')' + this.selectedArtist.songs[i].name + ' - ' + this.selectedArtist.songs[i].rating + '\n';
}
let selection = this.showArtistMenuOptions(description);
switch(selection) {
case '1':
this.enterSong();
break;
case '2':
this.deleteSong();
}
}
}
deleteArtist(){
let index = prompt(`Enter the index of the artist you wish to delete. `);
if(index > -1 && index < this.artists.length) {
this.artists.splice(index, 1);
}
}
enterSong(){
let name = prompt(`Add song`);
let rating = prompt(`Give your song a rating`);
this.selectedArtist.songs.push(new Song (name, rating));
}
deleteSong(){
let index = prompt(`Enter the index of the song you wish to delete.`);
if(index > -1 && index < this.selectedArtist.songs.length){
this.selectedArtist.songs.splice(index, 1);
}
}
}
let menu = new Menu();
menu.start();