-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
69 lines (56 loc) · 1.49 KB
/
script.js
File metadata and controls
69 lines (56 loc) · 1.49 KB
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
let allData = [];
// Génère iframe Bandcamp dynamique
function createPlayer(albumId) {
return `
<iframe
src="https://bandcamp.com/EmbeddedPlayer/album=${albumId}/size=large/bgcol=111111/linkcol=ffffff/minimal=true/transparent=true/"
loading="lazy"
seamless>
</iframe>
`;
}
// Render des cards
function render(data) {
const grid = document.getElementById("grid");
grid.innerHTML = data.map(item => `
<div class="card">
${createPlayer(item.album)}
<div class="meta">
<h3>${item.title}</h3>
<p class="artist">${item.artist}</p>
<p class="favorite">
<span>★</span> ${item.favorite || ""}
</p>
</div>
</div>
`).join("");
}
// Filtre par genre
function filter(genre) {
if (genre === "all") {
render(allData);
} else {
render(allData.filter(item => item.genre === genre));
}
}
function generateFilters(data) {
const focusBar = document.querySelector(".focus-bar");
// récupérer tous les genres uniques
const genres = [...new Set(data.map(item => item.genre))];
// bouton "all"
focusBar.innerHTML = `<button onclick="filter('all')" class="active">all</button>`;
// générer les autres boutons
genres.forEach(genre => {
focusBar.innerHTML += `
<button onclick="filter('${genre}')">${genre}</button>
`;
});
}
// Charger les données
fetch("data.json")
.then(res => res.json())
.then(data => {
allData = data;
generateFilters(data);
render(data);
});