boardgame_site_v2/static/javascript/statistics.js

160 lines
5.3 KiB
JavaScript
Raw Normal View History

2024-08-14 10:16:54 +02:00
document.body.onload=loadStatistics()
document.getElementById('statistics_nav').classList.add('active')
2024-08-14 10:16:54 +02:00
async function loadStatistics(){
function create_boardgame_image_grid_rows(boardgames){
2024-08-14 16:16:28 +02:00
let rows_to_return = []
2024-08-14 16:16:28 +02:00
const row_container = document.createElement('div')
row_container.classList.add('container')
const row = document.createElement('div')
row.classList.add('row')
row.classList.add('row-cols-1')
row.classList.add('row-cols-md-3')
2024-08-14 16:16:28 +02:00
for (let boardgame_index in boardgames){
let current_boardgame = boardgames[boardgame_index]
2024-08-14 16:16:28 +02:00
const column = document.createElement('div')
column.classList.add('col')
2024-08-14 16:16:28 +02:00
const boardgame_card = document.createElement('div')
boardgame_card.classList.add('card')
boardgame_card.classList.add('h-100')
2024-08-14 16:26:02 +02:00
const boardgame_imaged_linked = document.createElement('a')
boardgame_imaged_linked.setAttribute('href', '/boardgame?id=' + current_boardgame.id)
2024-08-14 16:16:28 +02:00
const boardgame_image = document.createElement('img')
boardgame_image.src = current_boardgame.thumbnail_url
boardgame_image.classList.add('card-img-top')
boardgame_image.classList.add('boardgame_statistic_card_image')
2024-08-14 16:26:02 +02:00
boardgame_imaged_linked.appendChild(boardgame_image)
2024-08-14 16:16:28 +02:00
const boardgame_card_body = document.createElement('div')
boardgame_card_body.classList.add('card-body')
const boardgame_title = document.createElement('h5')
boardgame_title.innerHTML = current_boardgame.name
boardgame_title.classList.add('card-title')
const boardgame_price_holder = document.createElement('p')
boardgame_price_holder.innerHTML = current_boardgame.price_paid
boardgame_price_holder.classList.add('card-text')
boardgame_card_body.appendChild(boardgame_title)
boardgame_card_body.appendChild(boardgame_price_holder)
2024-08-14 16:26:02 +02:00
boardgame_card.append(boardgame_imaged_linked)
2024-08-14 16:16:28 +02:00
boardgame_card.append(boardgame_card_body)
column.appendChild(boardgame_card)
row.appendChild(column)
}
2024-08-14 16:16:28 +02:00
return row
}
const gamesovertimechart = document.getElementById("gamesovertimechart")
2024-08-14 10:16:54 +02:00
let games_over_time_statistic = await makeRequest(api_url + '/statistics/amount_of_games_over_time?day_step=30')
let games_over_time_statistic_no_expanions = await makeRequest(api_url + '/statistics/amount_of_games_over_time?day_step=30&filter_expansions_out=true')
let games_over_time_statistic_only_expanions = await makeRequest(api_url + '/statistics/amount_of_games_over_time?day_step=30&only_expansions=true')
2024-08-14 10:16:54 +02:00
new Chart(gamesovertimechart, {
2024-08-14 10:16:54 +02:00
type: 'bar',
data: {
labels: Object.keys(games_over_time_statistic.result),
datasets: [{
label: games_over_time_statistic.name,
data: Object.values(games_over_time_statistic.result),
borderWidth: 1,
type: 'line'
},
{
label: "Base games",
data: Object.values(games_over_time_statistic_no_expanions.result),
borderWidth: 1
},
{
label: "Expansions",
data: Object.values(games_over_time_statistic_only_expanions.result),
borderWidth: 1
}
]
},
options: {
scales: {
y: {
beginAtZero: true
}
}
}
});
$("#overtimechartname").text(games_over_time_statistic.name)
const gamesperyearchart = document.getElementById('gamesperyearchart')
let games_played_per_year_statistic = await makeRequest(api_url + '/statistics/games_played_per_year?filter_expansions_out=true')
let years_played = []
for (date_index in Object.keys(games_played_per_year_statistic.result)){
const current_date = Object.keys(games_played_per_year_statistic.result)[date_index]
const year = current_date.substring(0, current_date.indexOf("-"));
years_played.push(year)
}
new Chart(gamesperyearchart, {
plugins: [ChartDataLabels],
type: 'bar',
data: {
labels: years_played ,
datasets: [{
label: games_played_per_year_statistic.name,
data: Object.values(games_played_per_year_statistic.result),
borderWidth: 1
}
]
},
options: {
scales: {
y: {
beginAtZero: true,
max: Math.ceil((Math.max(...Object.values(games_played_per_year_statistic.result)))/ 250) * 250
}
},
plugins: {
datalabels: {
anchor: 'end',
align: 'end'
}
}
}
});
$("#gamesperyearchartname").text(games_played_per_year_statistic.name)
const mostexpensivegameschart = document.getElementById('mostexpensivegameschart')
2024-08-14 16:16:28 +02:00
let most_expensive_games_statistic = await makeRequest(api_url + '/statistics/most_expensive_games?top_amount=6')
2024-08-14 16:16:28 +02:00
const row = create_boardgame_image_grid_rows(most_expensive_games_statistic.result)
2024-08-14 16:16:28 +02:00
mostexpensivegameschart.appendChild(row)
// for (row_index in rows_to_fill_in){
// mostexpensivegameschart.insertBefore(rows_to_fill_in[row_index], mostexpensivegameschart.firstChild)
// }
$('#mostexpensivegameschartname').text(most_expensive_games_statistic.name)
2024-08-14 10:16:54 +02:00
}