aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/court.mjs41
-rw-r--r--src/data.js98
-rw-r--r--src/game.mjs78
-rw-r--r--src/guest.mjs56
-rw-r--r--src/player.mjs60
-rw-r--r--src/utils.mjs34
6 files changed, 181 insertions, 186 deletions
diff --git a/src/court.mjs b/src/court.mjs
index 713c488..d85f05e 100644
--- a/src/court.mjs
+++ b/src/court.mjs
@@ -1,53 +1,32 @@
+import { Court } from "./data";
import { Manager } from "./utils.mjs";
-class Court {
- constructor(id, status) {
- this.id = id;
- this.status = typeof status !== "undefined" ? status : true;
- this.name = "Court " + (id + 1);
- }
- toggle() {
- this.status = !this.status;
- this.print();
- }
- print() {
- let status = this.status ? "active" : "inactive";
- console.log(this.name + " is currently " + status);
- }
- render() {
- let color = this.status ? "is-success" : "is-danger";
- let type = `class="button is-medium ${color}"`;
- return `<button id=${"court_" + this.id} ${type}>${this.name}</button>`;
- }
-}
-
export class CourtManager extends Manager {
maxCourtCount = 12;
constructor() {
- super("court", []);
+ super();
console.log("Loading court data.");
- let data = JSON.parse(localStorage.getItem(this.description));
+ let tempCourt = new Court();
+ let data = JSON.parse(localStorage.getItem(tempCourt.description));
if (data === null || data.length != this.maxCourtCount) {
- console.log("Court data unavailable: " + data);
this.generate();
return;
}
for (let i = 0; i < this.maxCourtCount; i++) {
- this.listData.push(new Court(data[i].id, data[i].status));
+ let id = Number(data[i].id);
+ let status = Boolean(Number(data[i].status));
+ this.data.push(new Court(id, status));
}
- console.log("Loaded " + this.listData.length + " courts.");
+ console.log("Loaded " + this.data.length + " courts.");
this.render();
- this.addBehaviour();
}
generate() {
- console.log("Generating court data.");
for (let i = 0; i < this.maxCourtCount; i++) {
- this.listData.push(new Court(i));
+ this.data.push(new Court(i, true));
}
- console.log("Generated data for " + this.listData.length + " courts");
+ console.log("Generated data for " + this.data.length + " courts");
this.store();
this.render();
- this.addBehaviour();
}
}
diff --git a/src/data.js b/src/data.js
new file mode 100644
index 0000000..4358ee6
--- /dev/null
+++ b/src/data.js
@@ -0,0 +1,98 @@
+class Switch {
+ constructor(id, description, status) {
+ this.id = id;
+ this.status = typeof status !== "undefined" ? status : false;
+ this.description = description;
+ this.name = description + " " + (id + 1);
+ }
+ toggle() {
+ this.status = !this.status;
+ this.print();
+ }
+ print() {
+ let status = this.status ? "active" : "inactive";
+ console.log(this.name + " is currently " + status);
+ }
+ render() {
+ let color = this.status ? "is-success" : "is-danger";
+ let type = `class="button is-medium ${color}"`;
+ let id = this.description + "_" + this.id;
+ return `<button id=${id} ${type}>${this.name}</button>`;
+ }
+}
+
+export class Court extends Switch {
+ constructor(id, status) {
+ super(id, "Court", status);
+ }
+}
+
+export class Player extends Switch {
+ constructor(id, status, level, games, name) {
+ super(id, "Regular", status);
+ this.level = typeof level !== "undefined" ? level : 1;
+ this.games = typeof games !== "undefined" ? games : 0;
+ if (typeof name !== "undefined") {
+ this.name = name;
+ }
+ }
+}
+
+const guestCategories = {
+ 0: { description: "Beginner", level: 1 },
+ 1: { description: "Novice", level: 3 },
+ 2: { description: "Intermediate", level: 6 },
+};
+
+export class Guest extends Switch {
+ maxCount = 4;
+ categoryCount = 3;
+
+ constructor(id, status, games) {
+ super(id, "Guest", status);
+ const categoryId = Math.floor(id / this.maxCount) || 0;
+ this.level = guestCategories[categoryId].level;
+ this.games = typeof games !== "undefined" ? games : 0;
+ const guestNumber = (id % this.maxCount) + 1;
+ this.name = guestCategories[categoryId].description + " " + guestNumber;
+ }
+}
+
+export class Team {
+ constructor(playerOne, playerTwo) {
+ this.playerOne = playerOne;
+ this.playerTwo = playerTwo;
+ }
+ print() {
+ console.log("Team consists of:");
+ this.playerOne.print();
+ this.playerTwo.print();
+ }
+ render() {
+ let p1 = `<td style="width: 23%; text-align: right;">${this.playerOne}</td>`;
+ let p2 = `<td style="width: 23%; text-align: left;">${this.playerTwo}</td>`;
+ return p1 + p2;
+ }
+}
+
+export class Game extends Switch {
+ constructor(id, status, teamOne, teamTwo) {
+ super(id, "Game", status);
+ this.teamOne = teamOne;
+ this.teamTwo = teamTwo;
+ }
+ print() {
+ super.print();
+ let teamOne = this.teamOne.playerOne + " and " + this.teamOne.playerTwo;
+ let teamTwo = this.teamTwo.playerOne + " and " + this.teamTwo.playerTwo;
+ console.log(teamOne + " is playing against " + teamTwo);
+ }
+ render() {
+ let blockedState = this.teamOne.playerOne === "RESERVED";
+ let type = blockedState ? `class="is-danger is-dark"` : ``;
+ let court = `<td style="width: 8%; text-align: center;">${
+ this.id + 1
+ }</td>`;
+ return `<tr ${type}>${court}${this.teamOne.render()}${this.teamTwo.render()}</tr>`;
+ }
+}
diff --git a/src/game.mjs b/src/game.mjs
index 864f255..9a2a921 100644
--- a/src/game.mjs
+++ b/src/game.mjs
@@ -2,48 +2,14 @@ import { Notyf } from "notyf";
import { Manager } from "./utils.mjs";
import { CourtManager } from "./court.mjs";
import { PlayerManager } from "./player.mjs";
+import { Team, Game } from "./data";
-class Team {
- constructor(playerOne, playerTwo) {
- this.playerOne = playerOne;
- this.playerTwo = playerTwo;
- }
- print() {
- console.log(this.playerOne + " and " + this.playerTwo);
- }
- render() {
- let p1 = `<td style="width: 23%; text-align: right;">${this.playerOne}</td>`;
- let p2 = `<td style="width: 23%; text-align: right;">${this.playerTwo}</td>`;
- return p1 + p2;
- }
-}
-
-class Game {
- constructor(id, teamOne, teamTwo, status) {
- this.id = id;
- this.teamOne = teamOne;
- this.teamTwo = teamTwo;
- this.status = typeof status !== "undefined" ? status : false;
- }
- print() {
- let teamOne = this.teamOne.playerOne + " and " + this.teamOne.playerTwo;
- let teamTwo = this.teamTwo.playerOne + " and " + this.teamTwo.playerTwo;
- console.log(teamOne + " is playing against " + teamTwo);
- }
- render() {
- let blockedState = this.teamOne.playerOne === "RESERVED";
- let type = blockedState ? `class="is-danger is-dark"` : ``;
- return `<tr ${type}><td style="width: 8%; text-align: center;">${
- this.id + 1
- }</td>${this.teamOne.render()}${this.teamTwo.render()}</tr>`;
- }
-}
function generateDummyGames(courts, description) {
let team = new Team(description, description);
let games = [];
for (const court of courts) {
- let game = new Game(court.id, team, team);
+ let game = new Game(court.id, false, team, team);
games.push(game);
}
return games;
@@ -54,10 +20,11 @@ export class GameManager extends Manager {
players = new PlayerManager();
constructor() {
- super("game", []);
+ super();
this.round = Number(localStorage.getItem("round")) || 0;
console.log("Loading game data.");
- let data = JSON.parse(localStorage.getItem(this.description));
+ let tempGame = new Game();
+ let data = JSON.parse(localStorage.getItem(tempGame.description));
if (data === null || data.length === 0) {
console.log("Game data unavailable: " + data);
this.generate();
@@ -74,29 +41,28 @@ export class GameManager extends Manager {
data[i].teamTwo.playerTwo
);
let status = Boolean(data[i].status);
- this.listData.push(new Game(id, teamOne, teamTwo, status));
+ this.data.push(new Game(id, status, teamOne, teamTwo));
}
- console.log("Loaded " + this.listData.length + " games.");
+ console.log("Loaded " + this.data.length + " games.");
this.render();
addGameBehaviour(this);
}
isConfirmed() {
- return this.listData[0].status;
+ return this.data[0].status;
}
generate() {
console.log("Generating the dummy round.");
- this.listData = generateDummyGames(this.courts.listData, "---");
- console.log("Loaded " + this.listData.length + " dummy round.");
- for (let i = 0; i < this.listData.length; i++) {
- this.listData[i].status = true;
+ this.data = generateDummyGames(this.courts.data, "---");
+ console.log("Loaded " + this.data.length + " dummy round.");
+ for (let i = 0; i < this.data.length; i++) {
+ this.data[i].status = true;
}
- console.log(this.listData);
this.store();
this.render();
}
addBehaviour() {
let description = this.isConfirmed() ? "Round " + this.round : "Proposal";
- document.getElementById("game_description").innerHTML = description;
+ document.getElementById("Game_description").innerHTML = description;
}
getBlockedGames() {
const inactiveCourts = this.courts.inactive();
@@ -114,7 +80,7 @@ export class GameManager extends Manager {
const courtPlayers = players.slice(startIndex, endIndex);
const team_1 = new Team(courtPlayers[0].name, courtPlayers[3].name);
const team_2 = new Team(courtPlayers[1].name, courtPlayers[2].name);
- const game = new Game(courts[index].id, team_1, team_2);
+ const game = new Game(courts[index].id, false, team_1, team_2);
game.print();
games.push(game);
}
@@ -123,22 +89,22 @@ export class GameManager extends Manager {
propose() {
console.log("Proposing new games!");
let possibleMatches = getMatchCount(
- this.players.listData.concat(this.players.g.listData),
- this.courts.listData
+ this.players.data.concat(this.players.g.data),
+ this.courts.data
);
console.log("Total possible matches are " + possibleMatches + ".");
- this.listData = this.getBlockedGames();
+ this.data = this.getBlockedGames();
const activeCourts = this.courts.active();
const unusedCourts = activeCourts.slice(possibleMatches + 1);
- this.listData = this.listData.concat(this.inactive(unusedCourts));
+ this.data = this.data.concat(this.inactive(unusedCourts));
const usedCourts = activeCourts.slice(0, possibleMatches);
let requiredPlayerCount = possibleMatches * 4;
const selectedPlayers = this.players.propose(requiredPlayerCount);
console.log("The matches are:");
- this.listData = this.listData.concat(
+ this.data = this.data.concat(
this.active(usedCourts, selectedPlayers)
);
- this.listData.sort((a, b) => a.id - b.id);
+ this.data.sort((a, b) => a.id - b.id);
this.render();
}
confirm() {
@@ -150,8 +116,8 @@ export class GameManager extends Manager {
console.log("Confirm the proposal for round " + this.round + ".");
this.round += 1;
localStorage.setItem("round", this.round);
- for (let i = 0; i < this.listData.length; i++) {
- this.listData[i].status = true;
+ for (let i = 0; i < this.data.length; i++) {
+ this.data[i].status = true;
}
this.store();
this.render();
diff --git a/src/guest.mjs b/src/guest.mjs
index c82d115..57eb237 100644
--- a/src/guest.mjs
+++ b/src/guest.mjs
@@ -1,65 +1,37 @@
import { Manager } from "./utils.mjs";
-
-export class Guest {
- maxGuestCount = 12;
- categoryCount = 3;
-
- categories = {
- 0: { description: "Beginner", level: 1 },
- 1: { description: "Novice", level: 3 },
- 2: { description: "Intermediate", level: 6 },
- };
-
- constructor(id, status, totalPlayed) {
- this.id = id;
- this.status = typeof status !== "undefined" ? status : false;
- const categoryId = Math.floor(id / (12 / this.categoryCount));
- const guestIdentifier = (id % (12 / this.categoryCount)) + 1;
- this.name = this.categories[categoryId].description + " " + guestIdentifier;
- this.level = this.categories[categoryId].level;
- this.totalPlayed = typeof totalPlayed !== "undefined" ? status : 0;
- }
- toggle() {
- this.status = !this.status;
- this.print();
- }
- print() {
- let status = this.status ? "active" : "inactive";
- console.log(this.name + " is currently " + status);
- }
- render() {
- let color = this.status ? "is-success" : "is-danger";
- let type = `class="button is-medium ${color}"`;
- return `<button id=${"guest_" + this.id} ${type}>${this.name}</button>`;
- }
-}
+import { Guest } from "./data";
export class GuestManager extends Manager {
constructor() {
super("guest", []);
console.log("Loading guest data.");
- let data = JSON.parse(localStorage.getItem(this.description));
+ let tempGuest = new Guest();
+ let data = JSON.parse(localStorage.getItem(tempGuest.description));
if (data === null || data.length === 0) {
console.log("Guest data unavailable: " + data);
this.generate();
return;
}
+ console.log(tempGuest.description);
for (let i = 0; i < data.length; i++) {
+ console.log(data[i]);
let id = Number(data[i].id);
- let status = data[i].status;
- let totalPlayed = data[i].totalPlayed;
- this.listData.push(new Guest(id, status, totalPlayed));
+ let status = Boolean(Number(data[i].status));
+ let games = data[i].games;
+ this.data.push(new Guest(id, status, games));
}
- console.log("Loaded " + this.listData.length + " players.");
+ console.log("Loaded " + this.data.length + " players.");
this.render();
}
generate() {
console.log("Generating guest data.");
- for (let i = 0; i < new Guest(0, false).maxGuestCount; i++) {
+ const tempGuest = new Guest(0, false);
+ const totalGuestCount = tempGuest.maxCount * tempGuest.categoryCount;
+ for (let i = 0; i < totalGuestCount; i++) {
let p = new Guest(i, false, 0);
- this.listData.push(p);
+ this.data.push(p);
}
- console.log("Generated data for " + this.listData.length + " guest");
+ console.log("Generated data for " + this.data.length + " guest");
this.store();
this.render();
}
diff --git a/src/player.mjs b/src/player.mjs
index 7ca2a1f..06b1abd 100644
--- a/src/player.mjs
+++ b/src/player.mjs
@@ -1,53 +1,24 @@
import { GuestManager } from "./guest.mjs";
-import { shuffle, Manager } from "./utils.mjs";
+import { shuffle, Manager, randomLevel, randomStatus } from "./utils.mjs";
+import { Player } from "./data";
-class Player {
- constructor(id, name, level, status, totalPlayed) {
- this.id = id;
- this.status = typeof status !== "undefined" ? status : false;
- this.name = name;
- this.level = typeof level !== "undefined" ? level : 1;
- this.totalPlayed = typeof totalPlayed !== "undefined" ? status : 0;
- }
- toggle() {
- this.status = !this.status;
- this.print();
- }
- print() {
- let status = this.status ? "active" : "inactive";
- console.log(this.name + " is currently " + status);
- }
- render() {
- let color = this.status ? "is-success" : "is-danger";
- let type = `class="button is-medium ${color}"`;
- return `<button id=${"regular_" + this.id} ${type}>${this.name}</button>`;
- }
-}
-
-function randomLevel() {
- const max_level = 10;
- return Math.floor(Math.random() * max_level + 1);
-}
-
-function randomStatus() {
- return Math.random() < 0.5;
-}
function parseLineToPlayer(data) {
var info = data.split(",");
var id = Number(info[0].trim());
var name = info[1].trim() + " " + info[2].trim();
var level = Number(info[3].trim());
- return new Player(id, name, level, true, 0);
+ return new Player(id, true, level, 0, name);
}
export class PlayerManager extends Manager {
g = new GuestManager();
constructor() {
- super("regular", []);
+ super();
console.log("Loading player data.");
- let data = JSON.parse(localStorage.getItem(this.description));
+ let tempPlayer = new Player();
+ let data = JSON.parse(localStorage.getItem(tempPlayer.description));
if (data === null || data.length === 0) {
console.log("Player data unavailable: " + data);
this.generate();
@@ -56,12 +27,12 @@ export class PlayerManager extends Manager {
for (let i = 0; i < data.length; i++) {
let id = Number(data[i].id);
let name = data[i].name;
- let level = data[i].level;
- let status = data[i].status;
- let totalPlayed = data[i].totalPlayed;
- this.listData.push(new Player(id, name, level, status, totalPlayed));
+ let level = Number(data[i].level);
+ let status = Boolean(Number(data[i].status));
+ let games = Number(data[i].games);
+ this.data.push(new Player(id, status, level, games, name));
}
- console.log("Loaded " + this.listData.length + " players.");
+ console.log("Loaded " + this.data.length + " players.");
this.render();
this.addBehaviour();
addLoadBehaviour(this);
@@ -70,10 +41,11 @@ export class PlayerManager extends Manager {
console.log("Generating player data.");
let maxPlayerCount = 71;
for (let i = 0; i < maxPlayerCount; i++) {
- let p = new Player(i, "Player " + i, randomLevel(), randomStatus(), 0);
- this.listData.push(p);
+ let p = new Player(i, randomStatus(), randomLevel());
+ console.log(p);
+ this.data.push(p);
}
- console.log("Generated data for " + this.listData.length + " players");
+ console.log("Generated data for " + this.data.length + " players");
this.store();
this.render();
}
@@ -90,7 +62,7 @@ export class PlayerManager extends Manager {
for (var i = 0; i < players.length; i++) {
players[i].print();
}
- this.listData = players;
+ this.data = players;
this.store();
this.render();
}
diff --git a/src/utils.mjs b/src/utils.mjs
index 97d1255..2fca3f5 100644
--- a/src/utils.mjs
+++ b/src/utils.mjs
@@ -91,31 +91,30 @@ function addTimerBehaviour(t) {
}
export class Manager {
- constructor(description, listData) {
- this.description = description;
- this.listData = listData;
- this.count = listData.length;
+ constructor() {
+ this.data = [];
+ this.count = this.data.length;
}
store() {
- let stringData = JSON.stringify(this.listData);
- localStorage.setItem(this.description, stringData);
+ let stringData = JSON.stringify(this.data);
+ localStorage.setItem(this.data[0].description, stringData);
}
render() {
- let renderedHTML = this.listData
+ let renderedHTML = this.data
.map((i) => {
return i.render();
})
.join("");
- let elementId = this.description + "_list";
+ let elementId = this.data[0].description + "_list";
document.getElementById(elementId).innerHTML = renderedHTML;
this.addBehaviour();
}
addBehaviour() {
- for (let idx = 0; idx < this.listData.length; ++idx) {
- const elementId = this.description + "_" + this.listData[idx].id;
+ for (let idx = 0; idx < this.data.length; ++idx) {
+ const elementId = this.data[0].description + "_" + this.data[idx].id;
const p = document.getElementById(elementId);
p.addEventListener("click", () => {
- this.listData[idx].toggle();
+ this.data[idx].toggle();
this.store();
p.classList.toggle("is-success");
p.classList.toggle("is-danger");
@@ -123,12 +122,12 @@ export class Manager {
}
}
active() {
- return this.listData.filter(function (c) {
+ return this.data.filter(function (c) {
return c.status;
});
}
inactive() {
- return this.listData.filter(function (c) {
+ return this.data.filter(function (c) {
return !c.status;
});
}
@@ -142,6 +141,15 @@ export function shuffle(array) {
return array;
}
+export function randomLevel() {
+ const max_level = 10;
+ return Math.floor(Math.random() * max_level + 1);
+}
+
+export function randomStatus() {
+ return Math.random() < 0.5;
+}
+
export function getNotifier(seconds) {
return new Notyf({
duration: seconds * milliSecond,