Browse Source

prise en compte des covers da,s les albums : <album_name>/cover.png

master
choj 4 years ago
parent
commit
abd1f13a03
6 changed files with 73 additions and 204 deletions
  1. +5
    -0
      .gitignore
  2. +4
    -0
      scripts/weband-id3-to-json.js
  3. +4
    -3
      src/App.vue
  4. +6
    -4
      src/assets/css/_variables.css
  5. +19
    -170
      src/components/Player.vue
  6. +35
    -27
      src/components/Webbandd.vue

+ 5
- 0
.gitignore View File

@@ -20,3 +20,8 @@ pnpm-debug.log*
*.njsproj *.njsproj
*.sln *.sln
*.sw? *.sw?

public/audio
src/assets/images/icono_1.png
src/assets/images/icono_2.png
src/data.json

+ 4
- 0
scripts/weband-id3-to-json.js View File

@@ -44,6 +44,8 @@ function id3ToJSON(path){
id3ToJSON(path + file + '/'); id3ToJSON(path + file + '/');
else { else {
let filePath = path + file; let filePath = path + file;
if(!filePath.endsWith(".mp3") && !filePath.endsWith(".wav"))
return;
promises.push(new Promise((resolve, reject) => { promises.push(new Promise((resolve, reject) => {
new jsmediatags.Reader(filePath) new jsmediatags.Reader(filePath)
.read({ .read({
@@ -54,6 +56,8 @@ function id3ToJSON(path){
let album = getAlbum(tags.album); let album = getAlbum(tags.album);
if(!album){ if(!album){
album = {"title": tags.album, "tracks": [], "year": tags.year} album = {"title": tags.album, "tracks": [], "year": tags.year}
if (fs.existsSync(path + 'cover.png'))
album.cover = (path + 'cover.png').replace(INPUT,'audio/');
data.albums.push(album); data.albums.push(album);
} }
let track = {"title": tags.title, "file" : filePath.replace(INPUT,'audio/')}; let track = {"title": tags.title, "file" : filePath.replace(INPUT,'audio/')};


+ 4
- 3
src/App.vue View File

@@ -1,16 +1,16 @@
<template> <template>
<div id="app"> <div id="app">
<Weband/>
<Webbandd/>
</div> </div>
</template> </template>


<script> <script>
import Weband from './components/Weband.vue'
import Webbandd from './components/Webbandd.vue'


export default { export default {
name: 'App', name: 'App',
components: { components: {
Weband
Webbandd
} }
} }
</script> </script>
@@ -28,6 +28,7 @@ body{
font-family: var(--font-family); font-family: var(--font-family);
font-size: 2rem; font-size: 2rem;
letter-spacing: 0.1rem; letter-spacing: 0.1rem;
background-color: var(--main-color);
} }






+ 6
- 4
src/assets/css/_variables.css View File

@@ -1,10 +1,12 @@
@font-face { @font-face {
font-family: "work-sans";
src: url('../fonts/work-sans/WorkSans-Regular.otf');
/*font-family: "work-sans";*/
/*src: url('../fonts/work-sans/WorkSans-Regular.otf');*/
} }
:root{ :root{
--font-family : 'work-sans';
--font-family : 'arial';
--pretty-margin: 0.5rem; --pretty-margin: 0.5rem;
--main-color: black; --main-color: black;
--secondary-color: black;
--secondary-color: white;
--text-color: white;
--player-bg-color: rgba(255,255,255,0.95);
} }

+ 19
- 170
src/components/Player.vue View File

@@ -40,6 +40,13 @@ export default {
album: Object, album: Object,
}, },


watch: {
// whenever question changes, this function will run
album: function (newAlbum, oldAlbum) {
if(newAlbum !== oldAlbum)
this.collapsed = false;
}
},
data: function () { data: function () {
return { return {
switcher : null, switcher : null,
@@ -59,33 +66,6 @@ export default {
mounted(){ mounted(){
this.switcher = document.getElementsByClassName('player-switch')[0]; this.switcher = document.getElementsByClassName('player-switch')[0];
document.body.append(this.switcher); document.body.append(this.switcher);

// this.currentAudio = null;
// this.playing = false;
// this.playerContainer = document.createElement("div");
// this.container = document.querySelector('#player')
// this.playerContainer.classList.add('dd-player');
// this.switcher = document.createElement("div");
// this.switcher.classList.add('dd-player-switch');
// this.playerContainer.classList.add('collapsed');
// document.body.appendChild(this.switcher);
//
// this.switcher.addEventListener('click', () => {
// this.playerContainer.classList.toggle('collapsed');
// this.switcher.classList.toggle('opened');
// });
//
//
// this.addProgressBar();
// this.bindAudioTags();
// this.addPlayButton();
//
// let wrap = document.createElement("div");
// wrap.setAttribute('id', 'wrap-playlist')
// this.container.parentElement.appendChild(this.playerContainer);
// this.playerContainer.appendChild(wrap);
// wrap.appendChild(this.container);

}, },


methods: { methods: {
@@ -101,18 +81,6 @@ export default {
this.audio = document.querySelectorAll('audio')[0]; this.audio = document.querySelectorAll('audio')[0];
this.playing = true; this.playing = true;
this.audio.play(); this.audio.play();
// if(this.playing){
// this.audio.play();
// // this.currentAudio.parentElement.classList.add('playing');
// // self.progressBar.setAttribute('max', Math.floor(self.currentAudio.duration));
// // self.endTimeInfo.innerHTML = self.formatDuration(self.currentAudio.duration);
// // this.playButton.setAttribute('src','./images/pause.png');
// }
// else{
// this.audio.pause();
// // self.currentAudio.parentElement.classList.remove('playing');
// // this.playButton.setAttribute('src','./images/play.png');
// }
}, },


pause: function(){ pause: function(){
@@ -121,7 +89,6 @@ export default {
}, },


trackClicked: function(audioId){ trackClicked: function(audioId){
//let track = document.getElementById(audioId);
if(this.playing){ if(this.playing){
this.pause(); this.pause();
this.audio = document.getElementById(audioId); this.audio = document.getElementById(audioId);
@@ -137,110 +104,6 @@ export default {
this.audioPosition = Math.floor(this.audio.currentTime); this.audioPosition = Math.floor(this.audio.currentTime);
}, },


// addProgressBar: function(){
// this.progressBar = document.createElement("progress");
// this.progressBar.setAttribute('value', 0);
// this.startTimeInfo = document.createElement('div');
// this.endTimeInfo = document.createElement('div');
// let progressWrap = document.createElement("div");
// this.startTimeInfo.innerHTML = "00:00";
// this.endTimeInfo.innerHTML = "00:00";
// progressWrap.appendChild(this.startTimeInfo);
// progressWrap.appendChild(this.progressBar);
// progressWrap.appendChild(this.endTimeInfo);
// this.startTimeInfo.classList.add('time-info');
// this.endTimeInfo.classList.add('time-info');
// progressWrap.classList.add('progress-wrap');
// this.playerContainer.append(progressWrap);
// let self = this;
// this.progressBar.addEventListener('click', (e) => {
// if(self.currentAudio){
// self.currentAudio.currentTime = Math.floor(((e.layerX - self.progressBar.offsetLeft) * self.currentAudio.duration) / self.progressBar.offsetWidth);
// self.progressBar.value = Math.floor(self.currentAudio.currentTime );
// }
// });
//
// },


// addPlayButton: function(){
// this.playButton = document.createElement("img");
// this.playButton.setAttribute('src','./images/play.png');
// this.playButton.setAttribute('id','play-button');
// let wrap = document.createElement("div");
// wrap.append(this.playButton);
// this.container.append(wrap);
// let self = this;
// this.playButton.addEventListener('click', () => {
// self.playing = !self.playing;
// if(self.playing){
// self.currentAudio.play();
// self.currentAudio.parentElement.classList.add('playing');
// self.progressBar.setAttribute('max', Math.floor(self.currentAudio.duration));
// self.endTimeInfo.innerHTML = self.formatDuration(self.currentAudio.duration);
// this.playButton.setAttribute('src','./images/pause.png');
// }
// else{
// self.currentAudio.pause();
// self.currentAudio.parentElement.classList.remove('playing');
// this.playButton.setAttribute('src','./images/play.png');
// }
// })
// },

// bindAudioTags: function(){
// let liTags = this.container.querySelectorAll('li')
// let self = this;
// let i = 0;
// liTags.forEach(function(itemElement){
// let audioTag = itemElement.querySelector('audio')
// if(audioTag){
// audioTag.addEventListener('timeupdate', () => {
// self.audioTimeUpdate(audioTag);
// });
// audioTag.addEventListener('ended', () => {
// self.audioEnded(i);
// })
//
// //itemElement.appendChild(audioElement);
// audioTag.setAttribute('id','track-'+i);
// if(i === 0)
// self.currentAudio = audioTag;
// itemElement.addEventListener('click', () => {
// let items = self.container.getElementsByTagName('li');
// for(let i = 0; i < items.length; i++){
// items[i].classList.remove('playing');
// }
// if(self.currentAudio)
// self.currentAudio.pause();
// audioTag.play();
// self.playButton.setAttribute('src','./images/pause.png');
// self.playing = true;
// itemElement.classList.add('playing');
// self.currentAudio = audioTag;
// self.progressBar.setAttribute('max', Math.floor(self.currentAudio.duration));
// self.endTimeInfo.innerHTML = self.formatDuration(self.currentAudio.duration);
// self.progressBar.setAttribute('value', 0);
// });
//
// i++;
// }
// });
// },

// audioTimeUpdate: function(audioElt){
// this.progressBar.value = Math.floor(audioElt.currentTime);
// this.startTimeInfo.innerHTML = this.formatDuration(audioElt.currentTime);
// },
//
// audioEnded: function(n){
// let audios = document.getElementsByTagName('audio');
// let next = n == audios.length - 1 ? 0 : n + 1;
// this.currentAudio.pause();
// this.currentAudio.currentTime = 0;
// this.currentAudio = document.getElementsByTagName('audio')[next];
// this.currentAudio.parentElement.click();
// },


formatDuration: function(time){ formatDuration: function(time){
let s = parseInt(time% 60); let s = parseInt(time% 60);
@@ -264,7 +127,7 @@ export default {
height: 100vh; height: 100vh;
position:fixed; position:fixed;
top: 0px; top: 0px;
background-color: white;
background-color: var(--player-bg-color);/*rgba(var(--secondary-color), 0.8);*/
right:0px; right:0px;
color: black; color: black;
padding-top: var(--one-dpi); padding-top: var(--one-dpi);
@@ -292,7 +155,13 @@ export default {
.player-switch.opened{ .player-switch.opened{
background-color: var(--dd-blue); background-color: var(--dd-blue);
} }
li{
cursor: pointer;
}


li:hover{
color: var(--main-color);
}
li.active{ li.active{
font-weight: bold; font-weight: bold;
} }
@@ -308,18 +177,9 @@ li.active{
font-size: 1.5rem; font-size: 1.5rem;
list-style-type : none; list-style-type : none;
} }
/*
.dd-player ul li img{
width:24px;
height:24px;
margin-right: 12px;
}


.playing{
font-weight: bold;
color : black;
}
*/


.progress-wrap{ .progress-wrap{
display:flex; display:flex;
width: 100%; width: 100%;
@@ -338,13 +198,6 @@ progress{
width:66%; width:66%;
} }


/*
#play-button{
max-width: calc(var(--one-dpi) / 2);
max-height: calc(var(--one-dpi) / 2);
margin: calc(var(--one-dpi) / 2);
}
*/
progress::-moz-progress-bar{ progress::-moz-progress-bar{
background-color: black; background-color: black;
} }
@@ -353,16 +206,12 @@ progress{
} }
.button-wrap{ .button-wrap{
margin-top: 100px; margin-top: 100px;
margin-left: calc(var(--one-dpi) / 2);
} }
/*
.dd-player ul li, #play-button{
cursor : pointer;
.button-wrap img{
cursor: pointer;
} }


#wrap-playlist{
flex: 1;
}
*/
span.track-number{ span.track-number{
width: 25px; width: 25px;
display: inline-block; display: inline-block;


src/components/Weband.vue → src/components/Webbandd.vue View File

@@ -2,15 +2,13 @@
<div class="weband"> <div class="weband">
<section class="cover"> <section class="cover">
</section> </section>
<section class="albums">
<h2>{{this.artist}} | Albums</h2>
<ul>
<li v-for="album in albums" v-bind:key="album.title" v-on:click="albumSelected(album)">
{{album.title}} | {{album.year}}
</li>
</ul>

<section v-for="album in albums" v-bind:key="album.title" class="album" v-on:click="albumSelected(album)">
<div>{{album.title}} | {{album.year}}</div>
<img :src="album.cover"/>
</section> </section>



<section class="icono-2"> <section class="icono-2">


</section> </section>
@@ -72,38 +70,52 @@ export default {


section{ section{
height: 100vh; height: 100vh;
background-color: var(--main-color);
color: var(--text-color);
} }


section h2 { section h2 {
font-size: 2rem; font-size: 2rem;
} }


section:nth-of-type(odd){
background-color: white;
color: var(--secondary-color);
}

section:nth-of-type(even){
/* section.album:nth-of-type(even){
color: var(--main-color);
background-color: var(--secondary-color); background-color: var(--secondary-color);
color: white;
} }


section.album:nth-of-type(odd){
background-color: var(--main-color);
color: var(--secondary-color);
} */

section.cover{ section.cover{
background : url(../assets/images/icono_1.png) no-repeat center center; background : url(../assets/images/icono_1.png) no-repeat center center;
background-color: var(--main-color);
}

section.album{
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-around;
cursor: pointer;


} }
section.album img{
max-height: 80vh;
max-width: 80vh;
border : 2px solid var(--secondary-color);
}


section.albums{
background-color: black;
color:white;
/*section.albums{*/
/*background-color: black;*/
/*color:white;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: center; justify-content: center;
line-height: 200%;
}
line-height: 200%;*/
/*}*/


section.albums > * {
/*section.albums > * {
padding-left: 10vw; padding-left: 10vw;
} }


@@ -114,11 +126,10 @@ section.albums h2 {


section.albums ul { section.albums ul {
list-style-type: none; list-style-type: none;
}
}*/


section.icono-2{ section.icono-2{
background : url(../assets/images/icono_2.png) no-repeat center center; background : url(../assets/images/icono_2.png) no-repeat center center;
background-color: var(--secondary-color);
} }


section.contact{ section.contact{
@@ -127,10 +138,7 @@ section.contact{
justify-content: center; justify-content: center;
align-items: center; align-items: center;
position :relative; position :relative;

/* background : url(../assets/images/contact.png) no-repeat center center; */
background-color: var(--main-color);
/*color:white; */
color:var(--secondary-color);


} }



Loading…
Cancel
Save