aboutsummaryrefslogtreecommitdiff
path: root/src/manage.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/manage.js')
-rw-r--r--src/manage.js130
1 files changed, 86 insertions, 44 deletions
diff --git a/src/manage.js b/src/manage.js
index 31e828d..ef48f8e 100644
--- a/src/manage.js
+++ b/src/manage.js
@@ -1,5 +1,70 @@
import { Court, Guest, Player } from "./data";
-import { shuffle, Manager, randomLevel, randomStatus } from "./utils";
+
+export class Manager {
+ constructor(description, maxCount) {
+ this.description = description;
+ this.maxCount = maxCount;
+ this.data = [];
+ this.count = this.data.length;
+ let data = JSON.parse(localStorage.getItem(this.description));
+ if (data === null || data.length === 0) {
+ this.generate();
+ return;
+ }
+ this.load(data);
+ }
+ generate() {
+ for (let i = 0; i < this.maxCount; i++) {
+ this.data.push(this.createItem(i));
+ }
+ console.log("Generated " + this.data.length + " " + this.description);
+ this.store();
+ this.render();
+ }
+ load(data) {
+ for (let i = 0; i < data.length; i++) {
+ this.data.push(this.loadItem(data[i]));
+ }
+ console.log("Loaded " + this.data.length + " " + this.description);
+ this.render();
+ }
+ store() {
+ let stringData = JSON.stringify(this.data);
+ localStorage.setItem(this.data[0].description, stringData);
+ }
+ render() {
+ let renderedHTML = this.data
+ .map((i) => {
+ return i.render();
+ })
+ .join("");
+ let elementId = this.data[0].description + "_list";
+ document.getElementById(elementId).innerHTML = renderedHTML;
+ this.addBehaviour();
+ }
+ addBehaviour() {
+ 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.data[idx].toggle();
+ this.store();
+ p.classList.toggle("is-success");
+ p.classList.toggle("is-danger");
+ });
+ }
+ }
+ active() {
+ return this.data.filter(function (c) {
+ return c.status;
+ });
+ }
+ inactive() {
+ return this.data.filter(function (c) {
+ return !c.status;
+ });
+ }
+}
export class CourtManager extends Manager {
constructor() {
@@ -15,6 +80,19 @@ export class CourtManager extends Manager {
}
}
+export function randomStatus() {
+ return Math.random() < 0.5;
+}
+
+function normalize(data) {
+ let factor = Number(document.getElementById("skill").value);
+ console.log("Normalize skill by a factor of " + factor + ".");
+ return data.map(function (p) {
+ p.skill = Math.ceil(p.skill / factor);
+ return p;
+ });
+}
+
export class GuestManager extends Manager {
constructor() {
super("Guest", 12);
@@ -30,16 +108,15 @@ export class GuestManager extends Manager {
}
active(factor) {
factor = typeof factor !== "undefined" ? factor : 1;
- let data = super.active();
- console.log("Normalize skill by a factor of " + factor + ".");
- let players = data.map(function (p) {
- p.skill = Math.ceil(p.skill / factor);
- return p;
- });
- return players;
+ return normalize(super.active());
}
}
+export function randomLevel() {
+ const max_level = 10;
+ return Math.floor(Math.random() * max_level + 1);
+}
+
export class PlayerManager extends Manager {
constructor() {
super("Regular", 71);
@@ -76,42 +153,7 @@ export class PlayerManager extends Manager {
}
active(factor) {
factor = typeof factor !== "undefined" ? factor : 1;
- let data = super.active();
- console.log("Normalize skill by a factor of " + factor + ".");
- let players = data.map(function (p) {
- p.skill = Math.ceil(p.skill / factor);
- return p;
- });
- return players;
- }
- propose(count) {
- console.log("Required players are " + count);
- let factor = Number(document.getElementById("skill").value);
- console.log("Skill normalized by a factor of " + factor + ".");
- let activePlayers = this.active(factor);
- const activeGuests = this.g.active(factor);
- activePlayers = activePlayers.concat(activeGuests);
- console.log("Active players are:");
- console.log(
- activePlayers
- .map((i) => {
- return i.name;
- })
- .join(",")
- );
- const shuffledPlayers = shuffle(activePlayers);
- shuffledPlayers.sort((a, b) => a.totalPlayed - b.totalPlayed);
- const selectedPlayers = shuffledPlayers.slice(0, count);
- selectedPlayers.sort((a, b) => a.level - b.level);
- console.log("Selected players are:");
- console.log(
- selectedPlayers
- .map((i) => {
- return i.name;
- })
- .join(",")
- );
- return selectedPlayers;
+ return normalize(super.active());
}
}