function undisplay(element) { element.style.display="none"; } function add_message(severity, message) { message = `
`; const message_area = document.getElementById('message-area'); message_area.insertAdjacentHTML('beforeend', message); } /********************************************************* * Handling server-sent event stream * *********************************************************/ const events = new EventSource("events"); events.onerror = function(event) { if (event.target.readyState === EventSource.CLOSED) { setTimeout(() => { add_message("danger", "Connection to server lost."); }, 1000); } }; events.addEventListener("game-info", event => { const info = JSON.parse(event.data); window.game.set_game_info(info); }); events.addEventListener("player-info", event => { const info = JSON.parse(event.data); window.game.set_player_info(info); }); events.addEventListener("player-enter", event => { const info = JSON.parse(event.data); window.game.set_other_player_info(info); }); events.addEventListener("player-update", event => { const info = JSON.parse(event.data); if (info.id === window.game.state.player_info.id) window.game.set_player_info(info); else window.game.set_other_player_info(info); }); /********************************************************* * Game and supporting classes * *********************************************************/ function copy_to_clipboard(id) { const tmp = document.createElement("input"); tmp.setAttribute("value", document.getElementById(id).innerHTML); document.body.appendChild(tmp); tmp.select(); document.execCommand("copy"); document.body.removeChild(tmp); } function GameInfo(props) { if (! props.id) return null; return ( ${message}Suggest a category to play with your friends. Don't forget to include the number of items for each person to submit.