1 function undisplay(element) {
2 element.style.display="none";
5 function add_message(severity, message) {
6 message = `<div class="message ${severity}" onclick="undisplay(this)">
8 <span class="hide-button" onclick="undisplay(this.parentElement)">×</span>
10 const message_area = document.getElementById('message-area');
11 message_area.insertAdjacentHTML('beforeend', message);
14 function register(form) {
15 var request = new XMLHttpRequest();
17 request.open("POST", "register");
18 request.setRequestHeader("Content-Type", "application/json; charset=UTF-8");
20 "name": form.name.value,
21 "character": form.character.value
23 request.send(JSON.stringify(data));
28 function toggle_host_tools() {
29 const host_tools = document.getElementById("host-tools");
31 console.log("Toggling, host_tools.style.display is '" + host_tools.style.display + "'");
33 if (host_tools.style.display === "block")
34 host_tools.style.display = "none";
36 host_tools.style.display = "block";
39 function post_reveal() {
40 const request = new XMLHttpRequest();
42 request.open("POST", "reveal");
46 function post_start() {
47 const request = new XMLHttpRequest();
49 request.open("POST", "start");
53 function post_reset() {
54 const request = new XMLHttpRequest();
56 request.open("POST", "reset");
60 const events = new EventSource("events");
62 events.onerror = function(event) {
63 if (event.target.readyState === EventSource.CLOSED) {
64 add_message("danger", "Connection to server lost.");
68 events.addEventListener("players", function(event) {
69 const players_div = document.getElementById("players-div");
70 const players_element = document.getElementById("players");
71 const players = JSON.parse(event.data);
73 players_element.innerHTML = '';
74 for (const player of players) {
75 var li = document.createElement('li');
76 li.id = "player-" + player.id;
77 li.innerText = player.name;
78 players_element.appendChild(li);
81 /* Force players list to be visible. */
82 players_div.style.display = "block";
85 events.addEventListener("player-join", function(event) {
86 const players_div = document.getElementById("players-div");
87 const players = document.getElementById("players");
88 const player = JSON.parse(event.data);
90 const li = document.createElement('li');
91 li.id = "player-" + player.id;
92 li.innerText = player.name;
93 players.appendChild(li);
95 /* Force players list to be visible. */
96 players_div.style.display = "block";
99 events.addEventListener("player-leave", function(event) {
100 const players = document.getElementById("players");
101 const id = JSON.parse(event.data);
102 const player = document.getElementById("player-" + id.id);
104 add_message("info", player.innerText + " has left the game.");
105 players.removeChild(player);
108 events.addEventListener("game-state", function(event) {
109 const data = JSON.parse(event.data);
110 const old_state = data.old_state;
111 const new_state = data.new_state;
113 const hide_selector = ".show-state-" +old_state+ ",.hide-state-" +new_state;
114 const show_selector = ".hide-state-" +old_state+ ",.show-state-" +new_state;
116 /* Hide all elements based on the state transition. */
117 var elts = document.querySelectorAll(hide_selector);
118 for (const elt of elts) {
119 elt.style.display = "none";
122 /* And show all elements based on the same state transition. */
123 elts = document.querySelectorAll(show_selector);
124 for (const elt of elts) {
125 elt.style.display = "block";
129 events.addEventListener("character-reveal", function(event) {
130 const data = JSON.parse(event.data);
131 const character_name = data.character;
133 const character = document.getElementById("character-reveal");
135 character.innerText = character_name;
138 events.addEventListener("capture", function(event_string) {
139 const players = document.getElementById("players");
140 const event = JSON.parse(event_string.data);
141 const player = document.getElementById("player-" + event.captee);
143 players.removeChild(player);