MusicTopus/views/pages/mon-compte/ma-collection/statistiques.ejs
2024-12-29 14:50:51 +01:00

238 lines
8.2 KiB
Text

<main class="layout-maxed ma-collection-details" id="ma-collection-statistiques">
<h1>
Mes statistiques
</h1>
<div class="grid grid-cols-1 md:grid-cols-2 gap-10 mb-10">
<div class="md:col-span-2 box">
<h2>Mon top 10</h2>
<table>
<thead>
<tr>
<th style="width: 60px;"></th>
<th>Artiste</th>
<th style="width: 100px;">Albums</th>
</tr>
</thead>
<tbody>
<% for ( let i = 0 ; i < page.top10.length ; i += 1 ) { %>
<tr>
<td><%= i+1 %></td>
<td><%= page.top10[i].name %></td>
<td><%= page.top10[i].count %></td>
</tr>
<% } %>
</tbody>
</table>
</div>
<div class="box">
<h2>Genres</h2>
<canvas id="byGenres"></canvas>
</div>
<div class="box">
<h2>Styles</h2>
<canvas id="byStyles"></canvas>
</div>
<div class="box">
<h2>Formats</h2>
<canvas id="byFormats"></canvas>
</div>
<div><!-- histoire de faire un break --></div>
<div class="box">
<h2><%= page.currentYear.year %> (<%= page.currentYear.total %> ajout<%= page.currentYear.total > 1 ? 's' : '' %>)</h2>
<h3>Genres</h3>
<canvas id="currentYearGenres"></canvas>
<h3>Styles</h3>
<canvas id="currentYearStyles"></canvas>
<h3>Formats</h3>
<canvas id="currentYearFormats"></canvas>
</div>
<div class="box">
<h2><%= page.lastYear.year %> (<%= page.lastYear.total %> ajout<%= page.lastYear.total > 1 ? 's' : '' %>)</h2>
<h3>Genres</h3>
<canvas id="lastYearGenres"></canvas>
<h3>Styles</h3>
<canvas id="lastYearStyles"></canvas>
<h3>Formats</h3>
<canvas id="lastYearFormats"></canvas>
</div>
</div>
</main>
<script>
const byGenres = <%- JSON.stringify(page.byGenres) %>;
const byStyles = <%- JSON.stringify(page.byStyles) %>;
const byFormats = <%- JSON.stringify(page.byFormats) %>;
const currentYear = <%- JSON.stringify(page.currentYear) %>;
const lastYear = <%- JSON.stringify(page.lastYear) %>;
const ctxGenres= document.getElementById('byGenres');
const ctxStyles = document.getElementById('byStyles');
const ctxFormats = document.getElementById('byFormats');
const ctxCurrentYearGenres = document.getElementById('currentYearGenres');
const ctxCurrentYearStyles = document.getElementById('currentYearStyles');
const ctxCurrentYearFormats = document.getElementById('currentYearFormats');
const ctxLastYearGenres = document.getElementById('lastYearGenres');
const ctxLastYearStyles = document.getElementById('lastYearStyles');
const ctxLastYearFormats = document.getElementById('lastYearFormats');
const options = {
responsive: true,
plugins: {
legend: {
display: false,
position: 'bottom',
},
title: {
display: false,
}
}
};
new Chart(ctxGenres, {
type: 'doughnut',
data: {
labels: Object.keys(byGenres).map((index) => {return byGenres[index].name}),
datasets: [
{
backgroundColor: Object.keys(byGenres).map((index) => {return byGenres[index].color}),
data: Object.keys(byGenres).map((index) => {return byGenres[index].count}),
},
],
},
options,
});
new Chart(ctxCurrentYearGenres, {
type: 'doughnut',
data: {
labels: Object.keys(currentYear.byGenres).map((index) => {return currentYear.byGenres[index].name}),
datasets: [
{
backgroundColor: Object.keys(currentYear.byGenres).map((index) => {return currentYear.byGenres[index].color}),
data: Object.keys(currentYear.byGenres).map((index) => {return currentYear.byGenres[index].count}),
},
],
},
options,
});
new Chart(ctxLastYearGenres, {
type: 'doughnut',
data: {
labels: Object.keys(lastYear.byGenres).map((index) => {return lastYear.byGenres[index].name}),
datasets: [
{
backgroundColor: Object.keys(lastYear.byGenres).map((index) => {return lastYear.byGenres[index].color}),
data: Object.keys(lastYear.byGenres).map((index) => {return lastYear.byGenres[index].count}),
},
],
},
options,
});
const styleLabels = [];
const styleBg = [];
const styleData = [];
for ( let i = 0 ; i < byStyles.length ; i += 1 ) {
const {
name,
color,
count,
} = byStyles[i];
styleLabels.push(name);
styleBg.push(color);
styleData.push(count);
}
new Chart(ctxStyles, {
type: 'doughnut',
data: {
labels: styleLabels,
datasets: [
{
backgroundColor: styleBg,
data: styleData,
},
],
},
options,
});
new Chart(ctxCurrentYearStyles, {
type: 'doughnut',
data: {
labels: Object.keys(currentYear.byStyles).map((index) => {return currentYear.byStyles[index].name}),
datasets: [
{
backgroundColor: Object.keys(currentYear.byStyles).map((index) => {return currentYear.byStyles[index].color}),
data: Object.keys(currentYear.byStyles).map((index) => {return currentYear.byStyles[index].count}),
},
],
},
options,
});
new Chart(ctxLastYearStyles, {
type: 'doughnut',
data: {
labels: Object.keys(lastYear.byStyles).map((index) => {return lastYear.byStyles[index].name}),
datasets: [
{
backgroundColor: Object.keys(lastYear.byStyles).map((index) => {return lastYear.byStyles[index].color}),
data: Object.keys(lastYear.byStyles).map((index) => {return lastYear.byStyles[index].count}),
},
],
},
options,
});
new Chart(ctxFormats, {
type: 'doughnut',
data: {
labels: Object.keys(byFormats).map((index) => {return byFormats[index].name}),
datasets: [
{
backgroundColor: Object.keys(byFormats).map((index) => {return byFormats[index].color}),
data: Object.keys(byFormats).map((index) => {return byFormats[index].count}),
},
],
},
options,
});
new Chart(ctxCurrentYearFormats, {
type: 'doughnut',
data: {
labels: Object.keys(currentYear.byFormats).map((index) => {return currentYear.byFormats[index].name}),
datasets: [
{
backgroundColor: Object.keys(currentYear.byFormats).map((index) => {return currentYear.byFormats[index].color}),
data: Object.keys(currentYear.byFormats).map((index) => {return currentYear.byFormats[index].count}),
},
],
},
options,
});
new Chart(ctxLastYearFormats, {
type: 'doughnut',
data: {
labels: Object.keys(lastYear.byFormats).map((index) => {return lastYear.byFormats[index].name}),
datasets: [
{
backgroundColor: Object.keys(lastYear.byFormats).map((index) => {return lastYear.byFormats[index].color}),
data: Object.keys(lastYear.byFormats).map((index) => {return lastYear.byFormats[index].count}),
},
],
},
options,
});
</script>