You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

104 lines
2.1 KiB

<script lang="ts">
import type { Player } from "./Profile.svelte";
import { onMount } from "svelte";
import { API_URL } from "../Auth";
let leaderboard: Array<Player> = [];
async function getLeader(): Promise<void> {
let response = await fetch(API_URL + "/users/leaderboard", {
credentials: "include",
mode: "cors",
});
leaderboard = await response.json();
}
onMount(() => {
getLeader();
});
</script>
<div class="overlay">
<div class="history" on:click|stopPropagation on:keydown|stopPropagation>
{#if leaderboard.length > 0}
<table>
<thead>
<tr>
<th colspan="5">Leaderboard</th>
</tr>
</thead>
<tbody>
<tr>
<td>Rank</td>
<td>Usernames</td>
<td>Wins</td>
<td>Matchs</td>
<td>Winrates</td>
</tr>
{#each leaderboard as player}
<tr>
<td>{player.rank}</td>
<td>{player.username}</td>
<td>{player.wins}</td>
<td>{player.matchs}</td>
<td>{player.winrate.toFixed(2)}%</td>
</tr>
{/each}
</tbody>
</table>
{:else}
<p>No Players to display</p>
{/if}
</div>
</div>
<style>
.overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
z-index: 9998;
display: flex;
justify-content: center;
align-items: center;
}
.history {
background-color: #343a40;
border: 1px solid #198754;
border-radius: 5px;
padding: 1rem;
width: 300px;
display: flex;
justify-content: center;
max-height: 500px;
overflow-y: scroll;
color: #e8e6e3;
}
td {
border: 1px solid #198754;
text-align: center;
max-width: 12ch;
overflow: hidden;
padding: 0.25rem 0.5rem;
}
table {
border-collapse: collapse;
width: 100%;
}
table thead th {
background-color: #198754;
color: #e8e6e3;
padding: 0.5rem 0;
}
table tbody tr:nth-child(odd) {
background-color: rgba(255, 255, 255, 0.1);
}
</style>