diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 00000000..30a4bc10 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,36 @@ +# This is a basic workflow to help you get started with Actions + +name: CI + +# Controls when the workflow will run +on: + # Triggers the workflow on push or pull request events but only for the main branch + push: + branches: [ main ] + pull_request: + branches: [ main ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + + # Runs a single command using the runners shell + - name: Run a one-line script + run: echo Hello, world! + + # Runs a set of commands using the runners shell + - name: Run a multi-line script + run: | + echo Add other actions to build, + echo test, and deploy your project. diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..6f3a2913 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "liveServer.settings.port": 5501 +} \ No newline at end of file diff --git a/index.html b/index.html index c55fb482..5934db5e 100644 --- a/index.html +++ b/index.html @@ -9,9 +9,11 @@ +

New MP3 Player

- +
+

Playlists

diff --git a/scripts/index.js b/scripts/index.js index 6842c794..89d3d6d6 100644 --- a/scripts/index.js +++ b/scripts/index.js @@ -1,47 +1,74 @@ /** + * * Plays a song from the player. * Playing a song means changing the visual indication of the currently playing song. * * @param {String} songId - the ID of the song to play */ -function playSong(songId) { - // Your code here + function playSong(songId) { + let notChosens = document.getElementsByClassName('songShell'); + for(let notChosen of notChosens){ + notChosen.style.backgroundColor = "rgba(0, 0, 0, 0)"; + } + document.getElementById(songId).style.backgroundColor ="hsla(50, 33%, 25%, .75)"; } /** - * Creates a song DOM element based on a song object. - */ +* Creates a song DOM element based on a song object. +*/ function createSongElement({ id, title, album, artist, duration, coverArt }) { - const children = [] - const classes = [] - const attrs = { onclick: `playSong(${id})` } - return createElement("div", children, classes, attrs) + let SongTitle = createElement('h2',[title],['songTitles']); + let songAlbum = createElement('h3',["Album: " + album]); + let songArtist = createElement('h4',["Artist: " + artist]); + let songDuration = createElement('h4',[secondsToMinutesConvertor(duration)]); + let songCoverArt = createElement('img',[],[],{src: coverArt}) + let songElement = createElement('div',[SongTitle, songAlbum, songArtist, songDuration, songCoverArt],['songShell'],{id: id}); + console.log(songElement); + songElement.setAttribute('onclick', `playSong(${id})`) + return songElement; + } +for(let song of player.songs){ + let songsDiv = document.getElementById('songs'); + songsDiv.append(createSongElement(song)); } - /** - * Creates a playlist DOM element based on a playlist object. - */ +* Creates a playlist DOM element based on a playlist object. +*/ function createPlaylistElement({ id, name, songs }) { - const children = [] - const classes = [] - const attrs = {} - return createElement("div", children, classes, attrs) + let playlistName = createElement('h2',[name]); + let playlistSongs = createElement('h3',["Amount of songs: " + songs.length]); + let playlistFulllDuration = createElement('h3',["Duration - " + playlistDuration(id)]); + let playlistElem = createElement('div',[playlistName, playlistSongs, playlistFulllDuration],['playlistShell']); + return playlistElem; +} +for(let playlist of player.playlists){ + let playlistList = document.getElementById('playlists'); + playlistList.append(createPlaylistElement(playlist)); } - /** - * Creates a new DOM element. - * - * Example usage: - * createElement("div", ["just text", createElement(...)], ["nana", "banana"], {id: "bla"}) - * - * @param {String} tagName - the type of the element - * @param {Array} children - the child elements for the new element. - * Each child can be a DOM element, or a string (if you just want a text element). - * @param {Array} classes - the class list of the new element - * @param {Object} attributes - the attributes for the new element - */ +* Creates a new DOM element. +* +* Example usage: +* createElement("div", ["just text", createElement(...)], ["nana", "banana"], {id: "bla"}) +* +* @param {String} tagName - the type of the element +* @param {Array} children - the child elements for the new element. +* Each child can be a DOM element, or a string (if you just want a text element). +* @param {Array} classes - the class list of the new element +* @param {Object} attributes - the attributes for the new element +*/ function createElement(tagName, children = [], classes = [], attributes = {}) { - // Your code here +let newEl = document.createElement(tagName); +for(let child of children){ + newEl.append(child); +} +for(let cls of classes){ + newEl.classList.add(cls); +} +for(let attr in attributes){ + newEl.setAttribute(attr, attributes[attr]); +} +return newEl } +createSongElement('h2', [player.songs[0].title], "songTitles"); -// You can write more code below this line diff --git a/scripts/player.js b/scripts/player.js index 5a85f825..9947d12f 100644 --- a/scripts/player.js +++ b/scripts/player.js @@ -31,34 +31,98 @@ const player = { artist: "AC/DC", duration: 292, coverArt: "./images/cover_art/acdc_thunderstruck.jpg", - }, - { + }, + { id: 4, title: "All is One", album: "All is One", artist: "Orphaned Land", duration: 270, coverArt: "./images/cover_art/orphaned_land_all_is_one.jpg", - }, - { + }, + { id: 5, title: "As a Stone", album: "Show Us What You Got", artist: "Full Trunk", duration: 259, coverArt: "./images/cover_art/full_trunk_as_a_stone.jpg", - }, - { + }, + { id: 6, title: "Sons of Winter and Stars", album: "Time I", artist: "Wintersun", duration: 811, coverArt: "./images/cover_art/wintersun_sons_of_winter_and_stars.jpg", - }, - ], - playlists: [ - { id: 1, name: "Metal", songs: [1, 7, 4, 6] }, - { id: 5, name: "Israeli", songs: [4, 5] }, - ], -} + }, + ], + playlists: [ + { id: 1, name: "Metal", songs: [1, 7, 4, 6] }, + { id: 5, name: "Israeli", songs: [4, 5] }, + ], + } + //External Functions + function secondsToMinutesConvertor(songDuration){ + if(typeof(songDuration) === 'number'){ + let min = Math.floor(songDuration / 60); + let sec = songDuration % 60; + if (min < 10) { + min = "0" + min; + } + if (sec < 10) { + sec = "0" + sec; + } + return min.toString() + ':' + sec.toString(); + } + else{ + return parseInt(songDuration.slice(3)) + parseInt(songDuration.slice(0,2)) * 60; + } + } + + function getPlaylistById(id){ + let playlistId = player.playlists.filter(playlist =>{ + if(playlist.id === id){ + return playlist; + } + }) + return playlistId[0]; + } + + function playlistDuration(id) { + let WantedPlaylist = getPlaylistById(id); + let songsArray = WantedPlaylist.songs.map(song => { + return getSongObjectById(song).duration}) + let totalDuration = (songsArray.reduce((added, currentValue) => { + currentValue += added; + return currentValue; + })) + return secondsToMinutesConvertor(totalDuration); + } + + function generateId(idArr,id){ + let newArr=[]; + for(let i of arr){ + newArr.push(i.id); + } + } + + function getSongObjectById(id){ + let song = player.songs.filter(songObject => { + if(songObject.id == id){ + return songObject; + } + }) + if(song.length == undefined){ + throw new Error ("id is undefined"); + } + song = song[0]; + return song; + } + + function convertToseconds(mmssDuration){ + let minutes = Number(mmssDuration.split("").slice(0, 2).join("")); + let seconds = Number(mmssDuration.split("").slice(3, 5).join("")); + let time = (minutes * 60) + seconds; + return time; + } \ No newline at end of file diff --git a/style.css b/style.css index f4645fe9..df9a4b07 100644 --- a/style.css +++ b/style.css @@ -1 +1,58 @@ -/* Your code here */ +body{ + font-family: sans-serif; + background: repeating-linear-gradient(45deg, #3f87a6, #ebf8e1 15%, #f69d3c 20%); +} +h1{ + color: rgba(5, 56, 25, 0.637); + text-decoration: underline; + text-align: center; + font-size: 100px; + font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + +} +.songShell{ +border: 7px solid rgb(224, 19, 104); +border-width: 3px; +border-color: darkgoldenrod; +align-items: center; +margin-right: 100px; +margin-left: 300px; +margin-top: 100px; +margin-bottom: 50px; +} +.playlistShell { + border: 10px double rgb(95, 84, 158); + border-radius: 10%; + +} +.songShell img{ + border-radius: 20%; + display: block; + margin-left: auto; + margin-right:80px; + padding-top: 30px; + padding-right: 100px; + padding-bottom: 40px; + +} +.playlistShell h3{ + color: blue; + font-family: verdana; + font-size: 100%; + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; +} +div{ + color:darkviolet; + font-size: 20px; +} +h2{ + font-size: 60px; + font-family: monospace; +} +h3{ + font-size: 40px; +} +h4{ + font-size: 30px; + font-family: cursive; +}