import { Court, Guest, Player } from "./data"; 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() { super("Court", 12); } createItem(i) { return new Court(i, randomStatus()); } loadItem(data) { let id = Number(data.id); let status = Boolean(Number(data.status)); return new Court(id, status); } } 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); } createItem(i) { return new Guest(i, randomStatus()); } loadItem(data) { let id = Number(data.id); let status = Boolean(Number(data.status)); let games = data.games; return new Guest(id, status, games); } active(factor) { factor = typeof factor !== "undefined" ? factor : 1; 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); addLoadBehaviour(this); this.g = new GuestManager(); } createItem(i) { return new Player(i, randomStatus(), randomLevel()); } loadItem(data) { let id = Number(data.id); let name = data.name; let level = Number(data.level); let status = Boolean(Number(data.status)); let games = Number(data.games); return new Player(id, status, level, games, name); } import(data) { var lines = data.split("\n"); var players = []; for (var i = 1; i < lines.length; i++) { if (lines[i] == undefined || lines[i].trim() == "") { continue; } players.push(parseLineToPlayer(lines[i])); } console.log("Loaded " + players.length + " Players"); for (var i = 0; i < players.length; i++) { players[i].print(); } this.data = players; this.store(); this.render(); } active(factor) { factor = typeof factor !== "undefined" ? factor : 1; return normalize(super.active()); } } 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, true, level, 0, name); } function addLoadBehaviour(p) { const f = document.querySelector("#player-load input[type=file]"); f.addEventListener("change", () => { const file = f.files[0]; let importData; console.log("Loading data from " + file.name); const reader = new FileReader(); reader.onload = function (e) { importData = reader.result; p.import(importData); }; reader.readAsText(file); }); }