player.js (1985B)
1 import {createElement, updatePlayerTable} from "./domlib.js"; 2 import players from "./players.js"; 3 4 export default class Player { 5 constructor(name, id) { 6 this.name = name; 7 this.id = id; 8 this.points = []; 9 } 10 11 createTr() { 12 const tr = createElement("tr", "", player_table); 13 14 for (let s of [this.id + 1, this.name]) { 15 createElement("td", s, tr); 16 } 17 18 for (let i=0; i<players.length; i++) { 19 const td = createElement("td", "", tr); 20 const input = createElement("input", "", td); 21 if (i == this.id) { 22 input.disabled = true; 23 input.value = "XXX"; 24 } else { 25 if (this.points.length>i) { 26 input.value = this.points[i] != undefined ? this.points[i] : ""; 27 } 28 } 29 input.size = 1; 30 input.onkeypress = event => { 31 event.preventDefault(); 32 let point; 33 switch (event.key) { 34 case "Backspace": 35 case "Delete": 36 this.points[i] = null; 37 players[i].points[this.id] = null; 38 updatePlayerTable(); 39 return; 40 case "1": 41 point = 1; 42 break; 43 case "2": 44 case "5": 45 case ",": 46 case ".": 47 point = .5; 48 break; 49 case "0": 50 point = 0; 51 break; 52 default: 53 return; 54 } 55 this.points[i] = point; 56 players[i].points[this.id] = 1 - point; 57 updatePlayerTable(); 58 } 59 } 60 61 for (let s of [this.getPointSum(), this.getPlace()]) { 62 createElement("td", s, tr); 63 } 64 65 return tr; 66 } 67 68 getPointSum() { 69 return this.points.reduce((a, b) => a + b, 0); 70 } 71 72 getPlace() { 73 const sortedPlayers = players.map(p => { 74 return {id: p.id, points: p.getPointSum()} 75 }).sort((a, b) => b.points-a.points); 76 return sortedPlayers.map(e => e.id).indexOf(this.id)+1; 77 } 78 }