├── .gitattributes
├── .gitignore
├── README.md
├── babel.config.js
├── package.json
├── public
├── index.html
└── logo.png
├── src
├── App.vue
├── assets
│ ├── audios
│ │ ├── Azealia Banks - Jumanji.mp3
│ │ ├── Baby Metal - Gimme Chocolate.mp3
│ │ ├── Baby Metal - Karate.mp3
│ │ ├── Britney Spears - Pretty Girls.mp3
│ │ ├── Iggy Azalea - Kream (ft. Tyga).mp3
│ │ ├── Iggy Azalea - Started.mp3
│ │ ├── Linn da Quebrada - MEnorme.mp3
│ │ ├── Little Mix - Salute.mp3
│ │ ├── Marina and the Diamonds - Lies.mp3
│ │ ├── Mc Tha - Oceano.mp3
│ │ ├── Miley Cyrus - FU.mp3
│ │ ├── Sia - Burn The Pages.mp3
│ │ ├── Viktoria Modesta - Counterflow.mp3
│ │ └── Wednesday Campanella - Shakushain.mp3
│ ├── images
│ │ ├── azealia banks - jumanji.jpg
│ │ ├── baby metal - gimme chocolate.jpg
│ │ ├── baby metal - karate.jpg
│ │ ├── britney spears - pretty girls.jpg
│ │ ├── iggy azalea - kream.jpg
│ │ ├── iggy azalea - started.jpg
│ │ ├── linn da quebrada - menorme.jpg
│ │ ├── little mix - salute.jpg
│ │ ├── marina and the diamonds - lies.jpg
│ │ ├── mc tha - oceano.jpg
│ │ ├── miley cyrus - fu.jpg
│ │ ├── sia - burn the pages.jpg
│ │ ├── viktoria modesta - counterflow.jpg
│ │ └── wednesday campanella - shakushain.jpg
│ └── styles
│ │ ├── animations.css
│ │ ├── fonts.css
│ │ └── main.css
├── helpers
│ ├── timer.js
│ └── utils.js
├── main.js
├── mocks
│ └── songs.js
└── services
│ └── api.js
└── yarn.lock
/.gitattributes:
--------------------------------------------------------------------------------
1 | * linguist-vendored
2 | *.vue linguist-vendored=false
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 | # local env files
6 | .env.local
7 | .env.*.local
8 |
9 | # Log files
10 | npm-debug.log*
11 | yarn-debug.log*
12 | yarn-error.log*
13 |
14 | # Editor directories and files
15 | .idea
16 | .vscode
17 | *.suo
18 | *.ntvs*
19 | *.njsproj
20 | *.sln
21 | *.sw?
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | About |
24 | Technologies |
25 | Add your Music |
26 | License
27 |
28 |
29 | ## :thinking: About
30 |
31 | This project is a basic public music player that you can add your musics and make it public, (keeps the music of all the contributors) check [contributing](#user-content--add-your-music). Visit this project by clicking [here](https://basic-music-player.netlify.com/).
32 |
33 |
34 |
35 | 
36 |
37 | *Music Player*
38 |
39 |
40 |
41 | ## :rocket: Technologies
42 |
43 | This project was developed with the following technologies:
44 |
45 | - [Vue.js](https://github.com/axios/axios)
46 | - [Eslint](https://github.com/eslint/eslint)
47 | - [Vue Fontawesome](https://github.com/FortAwesome/vue-fontawesome)
48 |
49 | ## 💁🏻 Add your Music
50 |
51 | Want to add some nice music to this public playlist? follow these steps:
52 |
53 | 1. Fork it & create your feature branch;
54 |
55 | ```bash
56 | $ git checkout -b new-songs
57 | ```
58 |
59 | 2. Edit [songs](https://github.com/Davigl/vue-music-player/blob/master/src/mocks/songs.js), make sure to add music and cover to the assets folder, sources must be from [soundcloud](https://soundcloud.com/) or content without copyright;
60 | 3. Commit your changes & push to the branch;
61 |
62 | ```bash
63 | $ git commit -am 'Add some feature'
64 | $ git push origin new-songs
65 | ```
66 |
67 | 4. Submit a pull request.
68 |
69 | ## :memo: License
70 |
71 | Copyright © 2020, [Davi Guimarães](https://github.com/davigl).
72 |
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ["@vue/cli-plugin-babel/preset"]
3 | };
4 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "music-vue",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "serve": "vue-cli-service serve",
7 | "build": "vue-cli-service build",
8 | "lint": "vue-cli-service lint"
9 | },
10 | "dependencies": {
11 | "@fortawesome/fontawesome-svg-core": "^1.2.28",
12 | "@fortawesome/free-brands-svg-icons": "^5.13.0",
13 | "@fortawesome/free-solid-svg-icons": "^5.13.0",
14 | "@fortawesome/vue-fontawesome": "^0.1.9",
15 | "axios": "^0.19.2",
16 | "core-js": "^3.6.4",
17 | "k-progress": "^1.5.0",
18 | "vue": "^2.6.11"
19 | },
20 | "devDependencies": {
21 | "@vue/cli-plugin-babel": "~4.3.0",
22 | "@vue/cli-plugin-eslint": "~4.3.0",
23 | "@vue/cli-service": "~4.3.0",
24 | "@vue/eslint-config-prettier": "^6.0.0",
25 | "babel-eslint": "^10.1.0",
26 | "eslint": "^6.7.2",
27 | "eslint-plugin-prettier": "^3.1.1",
28 | "eslint-plugin-vue": "^6.2.2",
29 | "prettier": "^1.19.1",
30 | "vue-template-compiler": "^2.6.11"
31 | },
32 | "eslintConfig": {
33 | "root": true,
34 | "env": {
35 | "node": true
36 | },
37 | "extends": [
38 | "plugin:vue/essential",
39 | "eslint:recommended",
40 | "@vue/prettier"
41 | ],
42 | "parserOptions": {
43 | "parser": "babel-eslint"
44 | },
45 | "rules": {}
46 | },
47 | "browserslist": [
48 | "> 1%",
49 | "last 2 versions",
50 | "not dead"
51 | ]
52 | }
53 |
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | Vue Public Music Player
22 |
23 |
24 |
25 | We're sorry but Vue Music Player doesn't work properly without JavaScript enabled. Please enable it to continue.
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/public/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/public/logo.png
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | {{ current.title }}
11 |
12 |
{{ current.artist }}
13 |
19 |
20 |
{{ currentlyTimer }}
21 |
22 | {{ current.totalTimer }}
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
50 |
51 |
52 |
53 | Now Playing 🎵
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 | {{ song.title }}
62 |
63 |
{{ song.artist }}
64 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
186 |
187 |
190 |
--------------------------------------------------------------------------------
/src/assets/audios/Azealia Banks - Jumanji.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/audios/Azealia Banks - Jumanji.mp3
--------------------------------------------------------------------------------
/src/assets/audios/Baby Metal - Gimme Chocolate.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/audios/Baby Metal - Gimme Chocolate.mp3
--------------------------------------------------------------------------------
/src/assets/audios/Baby Metal - Karate.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/audios/Baby Metal - Karate.mp3
--------------------------------------------------------------------------------
/src/assets/audios/Britney Spears - Pretty Girls.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/audios/Britney Spears - Pretty Girls.mp3
--------------------------------------------------------------------------------
/src/assets/audios/Iggy Azalea - Kream (ft. Tyga).mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/audios/Iggy Azalea - Kream (ft. Tyga).mp3
--------------------------------------------------------------------------------
/src/assets/audios/Iggy Azalea - Started.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/audios/Iggy Azalea - Started.mp3
--------------------------------------------------------------------------------
/src/assets/audios/Linn da Quebrada - MEnorme.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/audios/Linn da Quebrada - MEnorme.mp3
--------------------------------------------------------------------------------
/src/assets/audios/Little Mix - Salute.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/audios/Little Mix - Salute.mp3
--------------------------------------------------------------------------------
/src/assets/audios/Marina and the Diamonds - Lies.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/audios/Marina and the Diamonds - Lies.mp3
--------------------------------------------------------------------------------
/src/assets/audios/Mc Tha - Oceano.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/audios/Mc Tha - Oceano.mp3
--------------------------------------------------------------------------------
/src/assets/audios/Miley Cyrus - FU.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/audios/Miley Cyrus - FU.mp3
--------------------------------------------------------------------------------
/src/assets/audios/Sia - Burn The Pages.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/audios/Sia - Burn The Pages.mp3
--------------------------------------------------------------------------------
/src/assets/audios/Viktoria Modesta - Counterflow.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/audios/Viktoria Modesta - Counterflow.mp3
--------------------------------------------------------------------------------
/src/assets/audios/Wednesday Campanella - Shakushain.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/audios/Wednesday Campanella - Shakushain.mp3
--------------------------------------------------------------------------------
/src/assets/images/azealia banks - jumanji.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/images/azealia banks - jumanji.jpg
--------------------------------------------------------------------------------
/src/assets/images/baby metal - gimme chocolate.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/images/baby metal - gimme chocolate.jpg
--------------------------------------------------------------------------------
/src/assets/images/baby metal - karate.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/images/baby metal - karate.jpg
--------------------------------------------------------------------------------
/src/assets/images/britney spears - pretty girls.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/images/britney spears - pretty girls.jpg
--------------------------------------------------------------------------------
/src/assets/images/iggy azalea - kream.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/images/iggy azalea - kream.jpg
--------------------------------------------------------------------------------
/src/assets/images/iggy azalea - started.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/images/iggy azalea - started.jpg
--------------------------------------------------------------------------------
/src/assets/images/linn da quebrada - menorme.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/images/linn da quebrada - menorme.jpg
--------------------------------------------------------------------------------
/src/assets/images/little mix - salute.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/images/little mix - salute.jpg
--------------------------------------------------------------------------------
/src/assets/images/marina and the diamonds - lies.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/images/marina and the diamonds - lies.jpg
--------------------------------------------------------------------------------
/src/assets/images/mc tha - oceano.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/images/mc tha - oceano.jpg
--------------------------------------------------------------------------------
/src/assets/images/miley cyrus - fu.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/images/miley cyrus - fu.jpg
--------------------------------------------------------------------------------
/src/assets/images/sia - burn the pages.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/images/sia - burn the pages.jpg
--------------------------------------------------------------------------------
/src/assets/images/viktoria modesta - counterflow.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/images/viktoria modesta - counterflow.jpg
--------------------------------------------------------------------------------
/src/assets/images/wednesday campanella - shakushain.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davigl/vue-music-player/HEAD/src/assets/images/wednesday campanella - shakushain.jpg
--------------------------------------------------------------------------------
/src/assets/styles/animations.css:
--------------------------------------------------------------------------------
1 | @keyframes gradient {
2 | 0% {
3 | background-position: 0% 50%;
4 | }
5 | 50% {
6 | background-position: 100% 50%;
7 | }
8 | 100% {
9 | background-position: 0% 50%;
10 | }
11 | }
12 |
13 | @keyframes scale-up-center {
14 | 0% {
15 | -webkit-transform: scale(0.5);
16 | transform: scale(0.5);
17 | }
18 | 100% {
19 | -webkit-transform: scale(1);
20 | transform: scale(1);
21 | }
22 | }
23 |
24 | @keyframes flip-in-hor-bottom {
25 | 0% {
26 | -webkit-transform: rotateX(80deg);
27 | transform: rotateX(80deg);
28 | opacity: 0;
29 | }
30 | 100% {
31 | -webkit-transform: rotateX(0);
32 | transform: rotateX(0);
33 | opacity: 1;
34 | }
35 | }
36 |
37 | @keyframes appear-smoothly {
38 | 0% {
39 | opacity: 0;
40 | }
41 | 100% {
42 | opacity: 1;
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/assets/styles/fonts.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css2?family=Muli&display=swap');
2 | @import url('https://fonts.googleapis.com/css2?family=Lato&display=swap');
--------------------------------------------------------------------------------
/src/assets/styles/main.css:
--------------------------------------------------------------------------------
1 | @import './animations.css';
2 | @import './fonts.css';
3 |
4 | * {
5 | box-sizing: border-box;
6 | user-select: none;
7 | overflow-wrap: break-word;
8 | margin: 0px;
9 | padding: 0px;
10 | }
11 |
12 | ::-webkit-scrollbar-track
13 | {
14 | -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
15 | background-color: #F5F5F5;
16 | }
17 |
18 | ::-webkit-scrollbar
19 | {
20 | width: 10px;
21 | background-color: #F5F5F5;
22 | }
23 |
24 | ::-webkit-scrollbar-thumb
25 | {
26 | background-color: #ba83ca;
27 | background-image: -webkit-linear-gradient(45deg,
28 | rgba(255, 255, 255, .2) 25%,
29 | transparent 25%,
30 | transparent 50%,
31 | rgba(255, 255, 255, .2) 50%,
32 | rgba(255, 255, 255, .2) 75%,
33 | transparent 75%,
34 | transparent)
35 | }
36 |
37 | ul {
38 | list-style: none;
39 | }
40 |
41 | body {
42 | display: flex;
43 | align-items: center;
44 | justify-content: center;
45 | min-height: 100vh;
46 | font-family: Lato, sans-serif;
47 | background: rgb(223,131,241);
48 | background: linear-gradient(90deg, rgba(223,131,241,1) 0%, rgba(130,39,159,1) 35%, rgba(83,207,224,1) 100%);
49 | background-size: 400% 400%;
50 | animation: gradient 15s ease infinite;
51 | -webkit-font-smoothing: antialiased;
52 | }
53 |
54 | main {
55 | display: flex;
56 | flex-direction: column;
57 | flex-wrap: nowrap;
58 | width: 100%;
59 | max-width: 375px;
60 | max-height: 623px;
61 | margin: 0 auto;
62 | padding: 25px;
63 | background-color: #fff;
64 | border-radius: 15px;
65 | animation: scale-up-center 1s cubic-bezier(0.390, 0.575, 0.565, 1.000) both;
66 | }
67 |
68 | button {
69 | appearance: none;
70 | background: none;
71 | border: none;
72 | outline: none;
73 | cursor: pointer;
74 | }
75 |
76 | button:hover {
77 | opacity: 0.8;
78 | transform: scale(1.1);
79 | }
80 |
81 | .song-details {
82 | margin-top: 25px;
83 | }
84 |
85 | .cover-playlist {
86 | height: 50px;
87 | width: 50px;
88 | }
89 |
90 | .cover-wrapper {
91 | width: 100%;
92 | margin-top: 30px;
93 | height: 270px;
94 | text-align: center;
95 | }
96 |
97 | .animated {
98 | animation: appear-smoothly 1s normal both;
99 | transition: all 0.3s;
100 | }
101 |
102 | .cover {
103 | height: 100%;
104 | width: 270px;
105 | box-shadow: 0 24px 35px -16px rgba(107,179,237,.5);
106 | border-radius: 5px;
107 | }
108 |
109 | .cover-playlist > .cover {
110 | margin-right: 15px;
111 | width: 50px;
112 | }
113 |
114 | .song-title {
115 | width: 100%;
116 | color: #53565a;
117 | font-size: 1.13em;
118 | text-align: center;
119 | margin-bottom: 5px;
120 | }
121 |
122 | .artist {
123 | font-family: Muli;
124 | width: 100%;
125 | font-weight: 400;
126 | text-align: center;
127 | }
128 |
129 | .details {
130 | margin-left: 10px;
131 | width: 100%;
132 | }
133 |
134 | .details > .song-title {
135 | color: #585858;
136 | font-size: inherit;
137 | text-align: left;
138 | }
139 |
140 | .details > .artist {
141 | color: #5d5555;
142 | text-align: left;
143 | }
144 |
145 | .controls {
146 | display: flex;
147 | justify-content: center;
148 | align-items: center;
149 | padding: 20px 15px;
150 | }
151 |
152 | .play,
153 | .pause {
154 | background-image: linear-gradient(to right top,#d16ba5,#c777b9,#ba83ca,#aa8fd8,#9a9ae1,#8aa7ec,#79b3f4,#69bff8,#52cffe,#41dfff,#46eefa,#5ffbf1);
155 | border-radius: 50%;
156 | width: 80px;
157 | height: 80px;
158 | justify-content: center;
159 | box-shadow: -1px 17px 24px -6px rgba(0,0,0,.2);
160 | cursor: pointer;
161 | font-size: 25px;
162 | color: #fff;
163 | margin-left: 20px;
164 | margin-right: 20px;
165 | }
166 |
167 | .next,
168 | .prev {
169 | border: 0;
170 | border-radius: 50%;
171 | font-size: 20px;
172 | width: 50px;
173 | height: 50px;
174 | display: flex;
175 | justify-content: center;
176 | align-items: center;
177 | cursor: pointer;
178 | background-color: rgba(0,0,0,.09);
179 | color: #fff;
180 | transition: background-color .2s;
181 | position: relative;
182 | }
183 |
184 | .playlist {
185 | background-color: #fff;
186 | overflow-y: auto;
187 | max-height: 622px;
188 | border-radius: 5px;
189 | }
190 |
191 | .playlist h3 {
192 | color: #212121;
193 | font-size: 18px;
194 | font-weight: 400;
195 | margin-top: 20px;
196 | margin-bottom: 20px;
197 | text-align: center;
198 | }
199 |
200 | .playlist .song {
201 | display: flex;
202 | padding: 10px;
203 | }
204 |
205 | .actions > .delete {
206 | border-radius: 50%;
207 | width: 40px;
208 | height: 40px;
209 | justify-content: center;
210 | box-shadow: -1px 17px 24px -6px rgba(0,0,0,.2);
211 | cursor: pointer;
212 | font-size: 20px;
213 | color: #ba83ca;
214 | }
215 |
216 | .playlist .song:hover {
217 | background-color: #ededed;
218 | transition: box-shadow .2s,background-color .3s;
219 | }
220 |
221 | .timer {
222 | display: flex;
223 | width: 100%;
224 | justify-content: space-between;
225 | padding: 10px;
226 | }
227 |
228 | .k-progress-outer {
229 | margin-top: 15px !important;
230 | padding-right: 0 !important;
231 | }
232 |
233 | .footer {
234 | display: flex;
235 | justify-content: space-between;
236 | font-size: 10px;
237 | }
238 |
239 | .footer > a {
240 | cursor: pointer;
241 | color: #d4d4d4;
242 | position: relative;
243 | top: -10px;
244 | font-size: 25px;
245 | }
246 |
247 | #app {
248 | display: grid;
249 | gap: 1rem;
250 | grid-template-columns: 1fr 1fr;
251 | padding: 20px;
252 | }
253 |
254 | @media (max-width: 768px) {
255 | #app {
256 | grid-template-columns: 1fr;
257 | }
258 |
259 | body {
260 | height: 100%;
261 | margin-top: 10px;
262 | }
263 |
264 | .playlist {
265 | max-height: 200px;
266 | }
267 | }
--------------------------------------------------------------------------------
/src/helpers/timer.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Format seconds into a string minutes:seconds
3 | * @param {integer} seconds
4 | */
5 |
6 | const formatTimer = seconds => {
7 | let minutes = parseInt(seconds / 60).toString();
8 | seconds = parseInt(seconds % 60).toString();
9 |
10 | let output = minutes >= 10 ? `${minutes}` : `0${minutes}`;
11 | output += seconds >= 10 ? `:${seconds}` : `:0${seconds}`;
12 |
13 | return output;
14 | };
15 |
16 | export { formatTimer };
17 |
--------------------------------------------------------------------------------
/src/helpers/utils.js:
--------------------------------------------------------------------------------
1 | import { formatTimer } from "./timer";
2 |
3 | /**
4 | * Remove a target object from array
5 | * @param {array} array
6 | * @param {object} target
7 | */
8 |
9 | const deleteElement = (array, target) => {
10 | return array.filter(item => {
11 | return item != target;
12 | });
13 | };
14 |
15 | /**
16 | * Insert initial songs params
17 | * @param {array} songs
18 | */
19 |
20 | const threatSongs = songs => {
21 | return songs.map(song => {
22 | song["isPlaying"] = false;
23 | song["percent"] = 0;
24 | song["currentlyTimer"] = "00:00";
25 | song["totalTimer"] = formatTimer(song.seconds);
26 |
27 | return song;
28 | });
29 | };
30 |
31 | /**
32 | * Shuffle songs.
33 | * @param {array} array
34 | */
35 |
36 | function shuffleArray(array) {
37 | for (let i = array.length - 1; i > 0; i--) {
38 | const j = Math.floor(Math.random() * (i + 1));
39 | [array[i], array[j]] = [array[j], array[i]];
40 | }
41 |
42 | return array;
43 | }
44 |
45 | export { deleteElement, threatSongs, shuffleArray };
46 |
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | import Vue from "vue";
2 | import App from "./App.vue";
3 | import { library } from "@fortawesome/fontawesome-svg-core";
4 | import {
5 | faPlay,
6 | faPause,
7 | faStepForward,
8 | faStepBackward,
9 | faTimes
10 | } from "@fortawesome/free-solid-svg-icons";
11 | import { faGithub } from "@fortawesome/free-brands-svg-icons";
12 | import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
13 |
14 | library.add(faPlay, faPause, faStepForward, faStepBackward, faTimes, faGithub);
15 |
16 | Vue.component("font-awesome-icon", FontAwesomeIcon);
17 |
18 | Vue.config.productionTip = false;
19 |
20 | new Vue({
21 | render: h => h(App)
22 | }).$mount("#app");
23 |
--------------------------------------------------------------------------------
/src/mocks/songs.js:
--------------------------------------------------------------------------------
1 | const songs = [
2 | {
3 | title: "MEnorme",
4 | artist: "Linn da Quebrada",
5 | seconds: 244,
6 | cover: require("../assets/images/linn da quebrada - menorme.jpg"),
7 | src: require("../assets/audios/Linn da Quebrada - MEnorme.mp3")
8 | },
9 | {
10 | title: "Oceano",
11 | artist: "Mc Tha",
12 | seconds: 128,
13 | cover: require("../assets/images/mc tha - oceano.jpg"),
14 | src: require("../assets/audios/Mc Tha - Oceano.mp3")
15 | },
16 | {
17 | title: "FU",
18 | artist: "Miley Cyrus",
19 | seconds: 229,
20 | cover: require("../assets/images/miley cyrus - fu.jpg"),
21 | src: require("../assets/audios/Miley Cyrus - FU.mp3")
22 | },
23 | {
24 | title: "Counterflow",
25 | artist: "Viktoria Modesta",
26 | seconds: 204,
27 | cover: require("../assets/images/viktoria modesta - counterflow.jpg"),
28 | src: require("../assets/audios/Viktoria Modesta - Counterflow.mp3")
29 | },
30 | {
31 | title: "Shakushain",
32 | artist: "Wednesday Campanella",
33 | seconds: 219,
34 | cover: require("../assets/images/wednesday campanella - shakushain.jpg"),
35 | src: require("../assets/audios/Wednesday Campanella - Shakushain.mp3")
36 | },
37 | {
38 | title: "Gimme Chocolate",
39 | artist: "Baby Metal",
40 | seconds: 243,
41 | cover: require("../assets/images/baby metal - gimme chocolate.jpg"),
42 | src: require("../assets/audios/Baby Metal - Gimme Chocolate.mp3")
43 | },
44 | {
45 | title: "Karate",
46 | artist: "Baby Metal",
47 | seconds: 270,
48 | cover: require("../assets/images/baby metal - karate.jpg"),
49 | src: require("../assets/audios/Baby Metal - Karate.mp3")
50 | },
51 | {
52 | title: "Kream (Ft. Tyga) [Remix]",
53 | artist: "Iggy Azalea",
54 | seconds: 150,
55 | cover: require("../assets/images/iggy azalea - kream.jpg"),
56 | src: require("../assets/audios/Iggy Azalea - Kream (ft. Tyga).mp3")
57 | },
58 | {
59 | title: "Started",
60 | artist: "Iggy Azalea",
61 | seconds: 186,
62 | cover: require("../assets/images/iggy azalea - started.jpg"),
63 | src: require("../assets/audios/Iggy Azalea - Started.mp3")
64 | },
65 | {
66 | title: "Burn the Pages",
67 | artist: "Sia",
68 | seconds: 235,
69 | cover: require("../assets/images/sia - burn the pages.jpg"),
70 | src: require("../assets/audios/Sia - Burn The Pages.mp3")
71 | },
72 | {
73 | title: "Jumanji",
74 | artist: "Azealia Banks",
75 | seconds: 174,
76 | cover: require("../assets/images/azealia banks - jumanji.jpg"),
77 | src: require("../assets/audios/Azealia Banks - Jumanji.mp3")
78 | },
79 | {
80 | title: "Pretty Girls",
81 | artist: "Britney Spears",
82 | seconds: 164,
83 | cover: require("../assets/images/britney spears - pretty girls.jpg"),
84 | src: require("../assets/audios/Britney Spears - Pretty Girls.mp3")
85 | },
86 | {
87 | title: "Salute (TroyBoi Remix)",
88 | artist: "Little Mix",
89 | seconds: 251,
90 | cover: require("../assets/images/little mix - salute.jpg"),
91 | src: require("../assets/audios/Little Mix - Salute.mp3")
92 | },
93 | {
94 | title: "Lies",
95 | artist: "Marina and the Diamonds",
96 | seconds: 368,
97 | cover: require("../assets/images/marina and the diamonds - lies.jpg"),
98 | src: require("../assets/audios/Marina and the Diamonds - Lies.mp3")
99 | }
100 | ];
101 |
102 | export default songs;
103 |
--------------------------------------------------------------------------------
/src/services/api.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 |
3 | const api = axios.create({
4 | baseURL: "http://192.168.0.9:1212"
5 | });
6 |
7 | export default api;
8 |
--------------------------------------------------------------------------------