172 lines
4.4 KiB
JavaScript
172 lines
4.4 KiB
JavaScript
import { Profile } from "../../api/Profile.js";
|
|
import { Tourmanent } from "../../api/tournament/Tournament.js";
|
|
import {client, navigateTo} from "../../index.js";
|
|
import AbstractAuthenticatedView from "../abstracts/AbstractAuthenticatedView.js";
|
|
|
|
export default class extends AbstractAuthenticatedView
|
|
{
|
|
constructor(params)
|
|
{
|
|
super(params, "Tournament");
|
|
this.id = params.id;
|
|
}
|
|
|
|
pressButton()
|
|
{
|
|
this.tournament.toggle_participation();
|
|
}
|
|
|
|
createGraph()
|
|
{
|
|
console.log(this.tournament);
|
|
let tournament_tree = document.createElement("div");
|
|
|
|
tournament_tree.id = "tournament-tree";
|
|
|
|
document.getElementById("app").appendChild(tournament_tree);
|
|
|
|
for (let round_id = 0; round_id < this.tournament.levels.length; round_id++)
|
|
{
|
|
let current_round = document.createElement("ul");
|
|
|
|
tournament_tree.appendChild(current_round);
|
|
|
|
current_round.className = `round round-${round_id}`;
|
|
|
|
for (let participant_i = 0; participant_i < this.tournament.levels[round_id].length; participant_i += 2)
|
|
{
|
|
let spacer = document.createElement("li");
|
|
|
|
spacer.className = "spacer";
|
|
spacer.innerText = " ";
|
|
|
|
current_round.appendChild(spacer);
|
|
|
|
let game_top = document.createElement("li");
|
|
|
|
game_top.className = "game game-top";
|
|
game_top.innerText = `${this.tournament.levels[round_id][participant_i]}`;
|
|
|
|
current_round.appendChild(game_top);
|
|
|
|
let game_spacer = document.createElement("li");
|
|
|
|
spacer.className = "game game-spacer";
|
|
spacer.innerText = " ";
|
|
|
|
current_round.appendChild(game_spacer);
|
|
|
|
let game_bottom = document.createElement("li");
|
|
|
|
game_bottom.className = "game game-bottom";
|
|
game_bottom.innerText = `${this.tournament.levels[round_id][participant_i + 1]}`;
|
|
|
|
current_round.appendChild(game_bottom);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
async receive(data)
|
|
{
|
|
if (data.detail === "update_participants")
|
|
document.getElementById("nb_participants").innerText = `${data.participants} / ${this.tournament.nb_players}`;
|
|
if (data.detail === "go_to")
|
|
navigateTo(data.url);
|
|
if (data.detail === "is_participant")
|
|
this.updateParticipating(data.is_participant);
|
|
if (data.detail === "error")
|
|
document.getElementById("display").innerText = data.error_message;
|
|
}
|
|
|
|
async updateParticipating(state)
|
|
{
|
|
document.getElementById("button").value = state ? `Leave ${this.tournament.name}` : `Join ${this.tournament.name}`;
|
|
document.getElementById("display").innerText = state ? "You are a particpant" : "You are not a participant";
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param {[Profile]} oldParticipantsList
|
|
* @param {[Profile]} currentParticipantsList
|
|
*/
|
|
async onParticipantsUpdate(oldParticipantsList, currentParticipantsList)
|
|
{
|
|
|
|
}
|
|
|
|
async onDisconnect(event)
|
|
{
|
|
}
|
|
|
|
async onError(data)
|
|
{
|
|
|
|
}
|
|
|
|
async postInit()
|
|
{
|
|
/**
|
|
* @type {Tourmanent}
|
|
*/
|
|
this.tournament = await client.tournaments.getTournament(this.id);
|
|
|
|
if (this.tournament === null)
|
|
return 404;
|
|
|
|
this.tournament.join(this.onParticipantsUpdate.bind(this), this.onError.bind(this), this.onDisconnect.bind(this));
|
|
|
|
let button = document.getElementById("button");
|
|
|
|
button.onclick = this.pressButton.bind(this);
|
|
|
|
document.getElementById("name").innerText = this.tournament.name;
|
|
document.getElementById("nb_participants").innerText = this.tournament.nb_players;
|
|
document.getElementById("nb_players_by_game").innerText = this.tournament.nb_players_by_game;
|
|
document.getElementById("level").innerText = this.tournament.level;
|
|
document.getElementById("state").innerText = this.tournament.state;
|
|
|
|
if (this.tournament.started === false)
|
|
button.disabled = false;
|
|
this.createGraph();
|
|
}
|
|
|
|
async getHtml()
|
|
{
|
|
return `
|
|
<link rel="stylesheet" href="/static/css/TournamentPage.css">
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th id="name">Loading...</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Number of players</td>
|
|
<td id="nb_players">Loading...</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Number of players by game</td>
|
|
<td id="nb_players_by_game">Loading...</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Number of round</td>
|
|
<td id="level">Loading...</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Number of player</td>
|
|
<td id="nb_participants">Loading...</td>
|
|
</tr>
|
|
<tr>
|
|
<td>status</td>
|
|
<td id="state">Loading...</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<input type="button" id="button" value="Join tournament" disabled>
|
|
<span id="display"></span>
|
|
`;
|
|
}
|
|
}
|