Crosstable

A simple web-app for tournament-crosstables, for example in chess round tournament (each vs each).
git clone git://git.oshgnacknak.de/Crosstable.git
Log | Files | Refs | README

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 }