+++ /dev/null
-<!-- Copyright 2020-2021 Ian Jackson and contributors to Otter
- SPDX-License-Identifier: AGPL-3.0-or-later
- There is NO WARRANTY. -->
-<html><head>
-<meta http-equiv="content-type" content="text/html; charset=UTF-8">
- <title>server::dummy - alice - Otter
- </title>
-<link rel="license" href="http://localhost:8000/_/libre"><script>
- orig_console = window.console;
- window.console = (function(){
- var new_console = { saved: [] };
- for (k of ['log','error','warn','info']) {
- (function(k){
- var orig = orig_console[k];
- new_console[k] = function() {
- let args = [].slice.call(arguments);
- new_console.saved.push([k, [args.map(s => (
- s === undefined ? "<undefined>" :
- s === null ? "<null>" :
- s.toString()
- ))]]);
- orig.apply(orig_console, arguments);
- }
- })(k);
- }
- return new_console;
- })();
- console.log('wdriver.rs console log starts');
-</script>
-
-<script defer="defer">let wasm_input = fetch('/_/wasm.wasm');</script>
-<script src="server%20dummy%20-%20alice%20-%20Otter_files/wasm.js" defer="defer"></script>
-<script id="global-info" data-layout="Portrait"></script>
-<script src="server%20dummy%20-%20alice%20-%20Otter_files/script.js" defer="defer"></script>
-</head>
-<!-- Copyright 2020u Ian Jackson
- SPDX-License-Identifier: AGPL-3.0-or-later
- There is NO WARRANTY. --><head>
-<meta http-equiv="content-type" content="text/html; charset=UTF-8"></head><body id="main-body" data-ctoken="TdWGr534zPXTH8v9wp0FF15bHs7R9bxyhFY2soYoN2Fg7U1R8RU09JQgasqN4jTC" data-us="1#1" data-gen="538" data-sse-url-prefix="" style="transform-origin: top left;">
-<style>
- html {
- background-color: #eef;
- }
- .footer {
- background-color: #ddf;
- }
- div[id=infopane] {
- display: flex;
- flex-direction: column;
- background-color: white;
- overflow-y: scroll;
- }
- div[class=uos] {
- flex: initial;
- }
- div[id=uos] {
- flex: auto;
- }
- div[class=somepane] {
- flex: auto;
- display: flex;
- flex-direction: column;
- }
- div[id=player_list_columns] {
- }
-</style>
-
-<style>
- body {
- min-height: 100vw;
- }
- div[class=uos] { display: flex; flex-wrap: wrap; }
- div[class|=uokey] {
- outline: 1px solid #000;
- margin: 1px;
- padding-left: 5px;
- padding-right: 6.5px;
- align-self: start;
- }
- table[id=log] {
- width: 100%;
- }
- td[class=logts] {
- padding-left: 5px;
- text-align: right;
- }
- div[class=uokey-r] {
- align-self: end;
- }
- div[id=infopane] {
- height: 100px;
- }
- .uos-mid {
- flex-grow: 1;
- }
- div[id=player_list_columns] {
- columns: 3;
- }
-</style>
-<div class="upper">
-
-Hi alice
-
-|
-g
-<span id="wresting-warning"></span>
-
-|
-<strong>FAKING RANDOMNESS!</strong>
-<span id="status">server online 1#1 1C1 G538 U1 K1</span>
-
-|
-<a href="http://localhost:8000/l?kmqAKPwK4TfReFjMor8MJhdRPBcwIBpe">switch to landscape view</a> |
-<span id="links">links: <a href="https://jitsi.example.com/initial">Voice</a> <a href="http://localhost:8000/_/shapelib.html">Shapelib</a> |</span>
-
-<span style="white-space: nowrap;"><button id="zoom-btn" disabled="disabled" onclick="zoom_activate()">Zoom</button><input id="zoom-val" type="number" max="1000" min="10" step="5" size="4" value="100" oninput="zoom_enable()">%</span>
-
-
-<pre id="error"></pre>
-
-
-
- <svg id="space" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 200" width="1800" height="1200">
- <rect fill="#bbd" x="0" y="0" width="300" height="200"></rect>
- <g id="pieces_marker"></g>
- <use id="use170.5" href="#piece170.5" x="150" y="100" data-piece="170.5"></use>
- <use id="use166.7" href="#piece166.7" x="115" y="135" data-piece="166.7"></use>
- <use id="use111.7" href="#piece111.7" x="125" y="135" data-piece="111.7"></use>
- <use id="use155.7" href="#piece155.7" x="135" y="135" data-piece="155.7"></use>
- <use id="use72.7" href="#piece72.7" x="145" y="135" data-piece="72.7"></use>
- <use id="use82.7" href="#piece82.7" x="155" y="135" data-piece="82.7"></use>
- <use id="use54.7" href="#piece54.7" x="165" y="135" data-piece="54.7"></use>
- <use id="use126.7" href="#piece126.7" x="175" y="135" data-piece="126.7"></use>
- <use id="use81.7" href="#piece81.7" x="185" y="135" data-piece="81.7"></use>
- <use id="use125.7" href="#piece125.7" x="115" y="65" data-piece="125.7"></use>
- <use id="use94.7" href="#piece94.7" x="125" y="65" data-piece="94.7"></use>
- <use id="use141.7" href="#piece141.7" x="135" y="65" data-piece="141.7"></use>
- <use id="use47.7" href="#piece47.7" x="145" y="65" data-piece="47.7"></use>
- <use id="use134.7" href="#piece134.7" x="155" y="65" data-piece="134.7"></use>
- <use id="use163.7" href="#piece163.7" x="165" y="65" data-piece="163.7"></use>
- <use id="use66.7" href="#piece66.7" x="175" y="65" data-piece="66.7"></use>
- <use id="use161.7" href="#piece161.7" x="185" y="65" data-piece="161.7"></use>
- <use id="use36.7" href="#piece36.7" x="115" y="125" data-piece="36.7"></use>
- <use id="use20.7" href="#piece20.7" x="125" y="125" data-piece="20.7"></use>
- <use id="use27.7" href="#piece27.7" x="135" y="125" data-piece="27.7"></use>
- <use id="use29.7" href="#piece29.7" x="145" y="125" data-piece="29.7"></use>
- <use id="use130.7" href="#piece130.7" x="155" y="125" data-piece="130.7"></use>
- <use id="use146.7" href="#piece146.7" x="165" y="125" data-piece="146.7"></use>
- <use id="use19.7" href="#piece19.7" x="175" y="125" data-piece="19.7"></use>
- <use id="use149.7" href="#piece149.7" x="185" y="125" data-piece="149.7"></use>
- <use id="use34.7" href="#piece34.7" x="115" y="75" data-piece="34.7"></use>
- <use id="use70.7" href="#piece70.7" x="125" y="75" data-piece="70.7"></use>
- <use id="use159.7" href="#piece159.7" x="135" y="75" data-piece="159.7"></use>
- <use id="use89.7" href="#piece89.7" x="145" y="75" data-piece="89.7"></use>
- <use id="use132.7" href="#piece132.7" x="155" y="75" data-piece="132.7"></use>
- <use id="use160.7" href="#piece160.7" x="165" y="75" data-piece="160.7"></use>
- <use id="use124.7" href="#piece124.7" x="175" y="75" data-piece="124.7"></use>
- <use id="use30.7" href="#piece30.7" x="185" y="75" data-piece="30.7"></use>
- <use id="use123.7" href="#piece123.7" x="20" y="75" data-piece="123.7"></use>
- <use id="use140.7" href="#piece140.7" x="30" y="75" data-piece="140.7"></use>
- <use id="use49.7" href="#piece49.7" x="40" y="75" data-piece="49.7"></use>
- <use id="use63.7" href="#piece63.7" x="50" y="75" data-piece="63.7"></use>
- <use id="use46.7" href="#piece46.7" x="60" y="75" data-piece="46.7"></use>
- <use id="use18.7" href="#piece18.7" x="70" y="75" data-piece="18.7"></use>
- <use id="use88.7" href="#piece88.7" x="80" y="75" data-piece="88.7"></use>
- <use id="use165.7" href="#piece165.7" x="90" y="75" data-piece="165.7"></use>
- <use id="use39.7" href="#piece39.7" x="20" y="85" data-piece="39.7"></use>
- <use id="use9.7" href="#piece9.7" x="30" y="85" data-piece="9.7"></use>
- <use id="use145.7" href="#piece145.7" x="40" y="85" data-piece="145.7"></use>
- <use id="use139.7" href="#piece139.7" x="50" y="85" data-piece="139.7"></use>
- <use id="use43.7" href="#piece43.7" x="60" y="85" data-piece="43.7"></use>
- <use id="use122.7" href="#piece122.7" x="70" y="85" data-piece="122.7"></use>
- <use id="use32.7" href="#piece32.7" x="80" y="85" data-piece="32.7"></use>
- <use id="use26.7" href="#piece26.7" x="90" y="85" data-piece="26.7"></use>
- <use id="use93.7" href="#piece93.7" x="20" y="95" data-piece="93.7"></use>
- <use id="use154.7" href="#piece154.7" x="30" y="95" data-piece="154.7"></use>
- <use id="use38.7" href="#piece38.7" x="40" y="95" data-piece="38.7"></use>
- <use id="use25.7" href="#piece25.7" x="50" y="95" data-piece="25.7"></use>
- <use id="use129.7" href="#piece129.7" x="60" y="95" data-piece="129.7"></use>
- <use id="use48.7" href="#piece48.7" x="70" y="95" data-piece="48.7"></use>
- <use id="use158.7" href="#piece158.7" x="80" y="95" data-piece="158.7"></use>
- <use id="use164.7" href="#piece164.7" x="90" y="95" data-piece="164.7"></use>
- <use id="use51.7" href="#piece51.7" x="20" y="100" data-piece="51.7"></use>
- <use id="use69.7" href="#piece69.7" x="30" y="100" data-piece="69.7"></use>
- <use id="use113.7" href="#piece113.7" x="40" y="100" data-piece="113.7"></use>
- <use id="use14.7" href="#piece14.7" x="50" y="100" data-piece="14.7"></use>
- <use id="use10.7" href="#piece10.7" x="60" y="100" data-piece="10.7"></use>
- <use id="use110.7" href="#piece110.7" x="70" y="100" data-piece="110.7"></use>
- <use id="use28.7" href="#piece28.7" x="80" y="100" data-piece="28.7"></use>
- <use id="use102.7" href="#piece102.7" x="90" y="100" data-piece="102.7"></use>
- <use id="use153.7" href="#piece153.7" x="17" y="110" data-piece="153.7"></use>
- <use id="use33.7" href="#piece33.7" x="22" y="110" data-piece="33.7"></use>
- <use id="use119.7" href="#piece119.7" x="27" y="110" data-piece="119.7"></use>
- <use id="use169.7" href="#piece169.7" x="32" y="110" data-piece="169.7"></use>
- <use id="use57.7" href="#piece57.7" x="37" y="110" data-piece="57.7"></use>
- <use id="use91.7" href="#piece91.7" x="42" y="110" data-piece="91.7"></use>
- <use id="use118.7" href="#piece118.7" x="47" y="110" data-piece="118.7"></use>
- <use id="use78.7" href="#piece78.7" x="52" y="110" data-piece="78.7"></use>
- <use id="use120.7" href="#piece120.7" x="57" y="110" data-piece="120.7"></use>
- <use id="use148.7" href="#piece148.7" x="62" y="110" data-piece="148.7"></use>
- <use id="use90.7" href="#piece90.7" x="67" y="110" data-piece="90.7"></use>
- <use id="use138.7" href="#piece138.7" x="72" y="110" data-piece="138.7"></use>
- <use id="use35.7" href="#piece35.7" x="77" y="110" data-piece="35.7"></use>
- <use id="use40.7" href="#piece40.7" x="82" y="110" data-piece="40.7"></use>
- <use id="use99.7" href="#piece99.7" x="87" y="110" data-piece="99.7"></use>
- <use id="use168.7" href="#piece168.7" x="92" y="110" data-piece="168.7"></use>
- <use id="use11.7" href="#piece11.7" x="20" y="125" data-piece="11.7"></use>
- <use id="use31.7" href="#piece31.7" x="30" y="125" data-piece="31.7"></use>
- <use id="use45.7" href="#piece45.7" x="40" y="125" data-piece="45.7"></use>
- <use id="use77.7" href="#piece77.7" x="50" y="125" data-piece="77.7"></use>
- <use id="use84.7" href="#piece84.7" x="60" y="125" data-piece="84.7"></use>
- <use id="use65.7" href="#piece65.7" x="70" y="125" data-piece="65.7"></use>
- <use id="use68.7" href="#piece68.7" x="80" y="125" data-piece="68.7"></use>
- <use id="use42.7" href="#piece42.7" x="90" y="125" data-piece="42.7"></use>
- <use id="use167.7" href="#piece167.7" x="20" y="135" data-piece="167.7"></use>
- <use id="use127.7" href="#piece127.7" x="30" y="135" data-piece="127.7"></use>
- <use id="use62.7" href="#piece62.7" x="40" y="135" data-piece="62.7"></use>
- <use id="use101.7" href="#piece101.7" x="50" y="135" data-piece="101.7"></use>
- <use id="use17.7" href="#piece17.7" x="60" y="135" data-piece="17.7"></use>
- <use id="use44.7" href="#piece44.7" x="70" y="135" data-piece="44.7"></use>
- <use id="use100.7" href="#piece100.7" x="80" y="135" data-piece="100.7"></use>
- <use id="use144.7" href="#piece144.7" x="90" y="135" data-piece="144.7"></use>
- <use id="use117.7" href="#piece117.7" x="20" y="145" data-piece="117.7"></use>
- <use id="use71.7" href="#piece71.7" x="30" y="145" data-piece="71.7"></use>
- <use id="use60.7" href="#piece60.7" x="40" y="145" data-piece="60.7"></use>
- <use id="use15.7" href="#piece15.7" x="50" y="145" data-piece="15.7"></use>
- <use id="use157.7" href="#piece157.7" x="60" y="145" data-piece="157.7"></use>
- <use id="use41.7" href="#piece41.7" x="70" y="145" data-piece="41.7"></use>
- <use id="use83.7" href="#piece83.7" x="80" y="145" data-piece="83.7"></use>
- <use id="use115.7" href="#piece115.7" x="90" y="145" data-piece="115.7"></use>
- <use id="use86.7" href="#piece86.7" x="210" y="55" data-piece="86.7"></use>
- <use id="use59.7" href="#piece59.7" x="220" y="55" data-piece="59.7"></use>
- <use id="use73.7" href="#piece73.7" x="230" y="55" data-piece="73.7"></use>
- <use id="use136.7" href="#piece136.7" x="240" y="55" data-piece="136.7"></use>
- <use id="use121.7" href="#piece121.7" x="250" y="55" data-piece="121.7"></use>
- <use id="use80.7" href="#piece80.7" x="260" y="55" data-piece="80.7"></use>
- <use id="use23.7" href="#piece23.7" x="270" y="55" data-piece="23.7"></use>
- <use id="use151.7" href="#piece151.7" x="280" y="55" data-piece="151.7"></use>
- <use id="use162.7" href="#piece162.7" x="210" y="65" data-piece="162.7"></use>
- <use id="use108.7" href="#piece108.7" x="220" y="65" data-piece="108.7"></use>
- <use id="use135.7" href="#piece135.7" x="230" y="65" data-piece="135.7"></use>
- <use id="use142.7" href="#piece142.7" x="240" y="65" data-piece="142.7"></use>
- <use id="use107.7" href="#piece107.7" x="250" y="65" data-piece="107.7"></use>
- <use id="use55.7" href="#piece55.7" x="260" y="65" data-piece="55.7"></use>
- <use id="use53.7" href="#piece53.7" x="270" y="65" data-piece="53.7"></use>
- <use id="use143.7" href="#piece143.7" x="280" y="65" data-piece="143.7"></use>
- <use id="use67.7" href="#piece67.7" x="210" y="75" data-piece="67.7"></use>
- <use id="use52.7" href="#piece52.7" x="220" y="75" data-piece="52.7"></use>
- <use id="use76.7" href="#piece76.7" x="230" y="75" data-piece="76.7"></use>
- <use id="use112.7" href="#piece112.7" x="240" y="75" data-piece="112.7"></use>
- <use id="use22.7" href="#piece22.7" x="250" y="75" data-piece="22.7"></use>
- <use id="use85.7" href="#piece85.7" x="260" y="75" data-piece="85.7"></use>
- <use id="use13.7" href="#piece13.7" x="270" y="75" data-piece="13.7"></use>
- <use id="use56.7" href="#piece56.7" x="280" y="75" data-piece="56.7"></use>
- <use id="use92.7" href="#piece92.7" x="210" y="45" data-piece="92.7"></use>
- <use id="use106.7" href="#piece106.7" x="220" y="45" data-piece="106.7"></use>
- <use id="use21.7" href="#piece21.7" x="230" y="45" data-piece="21.7"></use>
- <use id="use114.7" href="#piece114.7" x="240" y="45" data-piece="114.7"></use>
- <use id="use97.7" href="#piece97.7" x="250" y="45" data-piece="97.7"></use>
- <use id="use147.7" href="#piece147.7" x="260" y="45" data-piece="147.7"></use>
- <use id="use137.7" href="#piece137.7" x="270" y="45" data-piece="137.7"></use>
- <use id="use133.7" href="#piece133.7" x="280" y="45" data-piece="133.7"></use>
- <use id="use96.7" href="#piece96.7" x="205" y="125" data-piece="96.7"></use>
- <use id="use87.7" href="#piece87.7" x="215" y="125" data-piece="87.7"></use>
- <use id="use156.7" href="#piece156.7" x="225" y="125" data-piece="156.7"></use>
- <use id="use75.7" href="#piece75.7" x="235" y="125" data-piece="75.7"></use>
- <use id="use95.7" href="#piece95.7" x="245" y="125" data-piece="95.7"></use>
- <use id="use150.7" href="#piece150.7" x="255" y="125" data-piece="150.7"></use>
- <use id="use24.7" href="#piece24.7" x="265" y="125" data-piece="24.7"></use>
- <use id="use104.7" href="#piece104.7" x="275" y="125" data-piece="104.7"></use>
- <use id="use116.7" href="#piece116.7" x="205" y="135" data-piece="116.7"></use>
- <use id="use105.7" href="#piece105.7" x="215" y="135" data-piece="105.7"></use>
- <use id="use98.7" href="#piece98.7" x="225" y="135" data-piece="98.7"></use>
- <use id="use103.7" href="#piece103.7" x="235" y="135" data-piece="103.7"></use>
- <use id="use37.7" href="#piece37.7" x="245" y="135" data-piece="37.7"></use>
- <use id="use64.7" href="#piece64.7" x="255" y="135" data-piece="64.7"></use>
- <use id="use74.7" href="#piece74.7" x="265" y="135" data-piece="74.7"></use>
- <use id="use109.7" href="#piece109.7" x="275" y="135" data-piece="109.7"></use>
- <use id="use128.7" href="#piece128.7" x="205" y="145" data-piece="128.7"></use>
- <use id="use131.7" href="#piece131.7" x="215" y="145" data-piece="131.7"></use>
- <use id="use50.7" href="#piece50.7" x="225" y="145" data-piece="50.7"></use>
- <use id="use58.7" href="#piece58.7" x="235" y="145" data-piece="58.7"></use>
- <use id="use12.7" href="#piece12.7" x="245" y="145" data-piece="12.7"></use>
- <use id="use16.7" href="#piece16.7" x="255" y="145" data-piece="16.7"></use>
- <use id="use79.7" href="#piece79.7" x="265" y="145" data-piece="79.7"></use>
- <use id="use152.7" href="#piece152.7" x="275" y="145" data-piece="152.7"></use>
- <use id="use61.7" href="#piece61.7" x="205" y="155" data-piece="61.7"></use>
- <use id="use8.9" href="#piece8.9" x="215" y="155" data-piece="8.9"></use>
- <use id="use7.9" href="#piece7.9" x="225" y="155" data-piece="7.9"></use>
- <use id="use6.9" href="#piece6.9" x="235" y="155" data-piece="6.9"></use>
- <use id="use5.9" href="#piece5.9" x="245" y="155" data-piece="5.9"></use>
- <use id="use4.9" href="#piece4.9" x="255" y="155" data-piece="4.9"></use>
- <use id="use3.9" href="#piece3.9" x="265" y="155" data-piece="3.9"></use>
- <use id="use2.9" href="#piece2.9" x="275" y="155" data-piece="2.9"></use>
- <use id="use1.9" href="#piece1.9" x="240" y="100" data-piece="1.9"></use>
- <g id="defs_marker"></g>
- <defs id="defs170.5"><g id="piece170.5" transform="" data-dragraise="45"><g transform="scale(0.38 0.38) translate(-121 -123)"><!-- otter.git#67b62ea1ec2e0c2855d08397cd599bf2a951da0b+ library/edited/chess-board.usvg CC-BY-SA-4.0, see library/edited/LICENCE -->
-<svg width="242" height="246" viewBox="0 0 242 246" xmlns="http://www.w3.org/2000/svg" xmlns:usvg="https://github.com/RazrFalcon/resvg" usvg:version="0.11.0">
- <defs></defs>
- <path id="rect2850" fill="#d18b47" stroke="#b0b0b0" stroke-width="0.99999994" d="M 16.5 18.5 L 225.5 18.5 L 225.5 227.5 L 16.5 227.5 Z"></path>
- <path fill="none" stroke="#cccccc" d="M 21 13.5 C 27 15.5 20 17.5 22 20.5"></path>
-</svg>
-</g></g><path id="surround2.9" d="M 0 4.94923 a 4.94923 4.94923 0 1 0 0 -9.89846 a 4.94923 4.94923 0 1 0 0 9.89846 z"></path></defs>
- <defs id="defs1.9"><g id="piece1.9" transform="" data-dragraise="10">
-
-<g transform="translate(-20,-7)">
-
-
-<rect y="0" fill="yellow" width="40" height="7"/>
-<rect y="7" fill="lightgreen" width="40" height="7"/>
-<!--
- clock running yellow > ▶
- clock would run but held yellow = ‖
- other player white :
- clock stopped light blue [] □
- clock reset (both players only) light green O ○
- flag white / red F ⚑
- player missing pink space
--->
-<rect fill="none" stroke="black" width="40" height="14"></rect>
-<clipPath id="clockclip42">
- <rect width="40" height="14"></rect>
-</clipPath>
-<text x="1" y="6" font-family="Latin Modern Mono, monospace"
- font-weight="700" font-size="6">123○</text>
-<text x="14" y="6" font-family="Latin Modern Mono, monospace"
- font-weight="700" font-size="6">04</text>
-<text x="21" y="6" clip-path="url(#clockclip42)" font-size="4">Slartibartfast</text>
-<text x="1" y="13" fill="black"
- style="font-variant-numeric:normal; font-family:monospace;" font-size="6">909⚑99</text>
-<text x="27" y="13" background="blue" fill="pink" stroke="red"
- stroke-width="0.1" clip-path="url(#clockclip42)" font-size="8">-</text>
-
-</g>
-
- <use href="#surround1.9" stroke="black" fill="none" stroke-dasharray="3 1"></use></g><path id="surround1.9" d="M -27.500000000000004 -11 h 55.00000000000001 v 22 h -55.00000000000001 z"></path></defs>
- </svg>
-
-<p>
-</p><div id="infopane">
-
- <div id="pane_help" class="somepane">
- <div id="uos" class="uos">
- <div class="uokey-l"><b>b</b> send to bottom (below other pieces)</div><div class="uokey-l"><b>l</b> rotate left</div><div class="uokey-l"><b>r</b> rotate right</div><div class="uos-mid" id="uos-mid"></div>
- <div class="uokey-r"><b>P</b> Pin to table</div><div class="uokey-r"><b>W</b> Enter wresting mode</div></div>
- <div class="uos">
- <div class="uokey"><strong>Mouse</strong> select/deselect/drag</div>
- <div class="uokey"><strong>shift</strong> multiple selection</div>
- <div class="uokey">Show
- <strong>H</strong> this help
- <strong>U</strong> players
- </div>
- </div>
- </div>
-
- <div id="pane_players" class="somepane" style="display:none">
- <div id="player_list_columns">
-<div><strong>Players</strong> (<strong>H</strong>/<strong>U</strong>: return to help)</div>
- <div id="player_list">
-
-<!-- Copyright 2020-2021 Ian Jackson and contributors to Otter
- SPDX-License-Identifier: AGPL-3.0-or-later
- There is NO WARRANTY. -->
-
-<div class="player">
-<span class="player_num">#1</span>
-<span class="nick">alice</span>
-<span class="account">[server:alice]</span>
-</div>
-
-<div class="player">
-<span class="player_num">#2</span>
-<span class="nick">bob</span>
-<span class="account">[server:bob]</span>
-</div>
-
-
- </div>
- </div>
- </div>
-
-</div>
-
-
-<p>
- </p><div id="logscroll" style="overflow-y: scroll; height: 200px;">
- <table id="log">
-
- <tbody><tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:40 +0000</td></tr>
- <tr><td class="logmsg">alice [server:alice] joined the game</td><td class="logts">2021-03-16 18:05:42 +0000</td></tr>
- <tr><td class="logmsg">bob [server:bob] joined the game</td><td class="logts">2021-03-16 18:05:42 +0000</td></tr>
- <tr><td class="logmsg">[server:] set the link <a href="https://www.example.org/newinfo">Info</a></td><td class="logts">2021-03-16 18:05:42 +0000</td></tr>
- <tr><td class="logmsg">[server:] removed the link Info</td><td class="logts">2021-03-16 18:05:42 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:42 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:42 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:42 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:42 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:42 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:42 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:42 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:42 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:42 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:05:55 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:06:56 +0000</td></tr>
- <tr><td class="logmsg">alice grasped the chess clock</td><td class="logts">2021-03-16 18:15:23 +0000</td></tr>
- <tr><td class="logmsg">alice released the chess clock</td><td class="logts">2021-03-16 18:15:25 +0000</td></tr>
- <tr><td class="logmsg">alice grasped the chess clock</td><td class="logts">2021-03-16 18:15:26 +0000</td></tr>
- <tr><td class="logmsg">alice released the chess clock</td><td class="logts">2021-03-16 18:15:26 +0000</td></tr>
- <tr><td class="logmsg">alice grasped the chess clock</td><td class="logts">2021-03-16 18:15:26 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">[server:] (re)configured the game</td><td class="logts">2021-03-16 18:16:01 +0000</td></tr>
- <tr><td class="logmsg">alice grasped the chess clock</td><td class="logts">2021-03-16 18:16:07 +0000</td></tr>
- </tbody></table>
- </div>
-</div>
-
- <div class="footer">
- <!--
- this affects the document's overall scrollbars
- which is not what we want. so get rid of it for now
- <div class="footer"; style="
- height: 100vw;
- width: 200vw;
- left: -50vw;
- overflow-y: clip;
- position: absolute;
- z-index: -1;
- "><!-- this fills in the rest of the page, including the margins
- --x
- </div>
- -->
- <hr>
- <address style="max-height: 100vh;">
- This server is running Otter, the Online TableTop Environment
- Renderer. Otter and its shape (piece picture) libraries
- are <a href="http://localhost:8000/_/libre">Free Software</a> and come with NO
- WARRANTY.
- </address></div>
-
-</body></html>
+++ /dev/null
-"use strict";
-// -*- JavaScript -*-
-// autogenerated from templates/script.ts webassembly-types/webassembly.d.ts templates/otter_wasm.ns.d.ts
-// -*- JavaScript -*-
-
-// Copyright 2020-2021 Ian Jackson and contributors to Otter
-// SPDX-License-Identifier: AGPL-3.0-or-later
-// There is NO WARRANTY. -->
-
-// elemnts for a piece
-//
-// In svg toplevel
-//
-// uelem
-// #use{}
-// <use id="use{}", href="#piece{}" x= y= >
-// .piece piece id (static)
-// container to allow quick movement and hang stuff off
-//
-// delem
-// #defs{}
-// <def id="defs{}">
-//
-// And in each delem
-//
-// pelem
-// #piece{}
-// .dragraise dragged more than this ? raise to top!
-// <g id="piece{}" >
-// currently-displayed version of the piece
-// to allow addition/removal of selected indication
-// contains 1 or 3 subelements:
-// one is straight from server and not modified
-// one is possible <use href="#select{}" >
-// one is possible <use href="#halo{}" >
-//
-// #select{}
-// generated by server, referenced by JS in pelem for selection
-//
-// #def.{}.stuff
-// generated by server, reserved for Piece trait impl
-
-let wasm;
-var pieces = Object.create(null);
-;
-// todo turn all var into let
-// todo any exceptions should have otter in them or something
-var globalinfo_elem;
-var layout;
-var held_surround_colour;
-var general_timeout = 10000;
-var messages = Object();
-var pieceops = Object();
-var update_error_handlers = Object();
-var piece_error_handlers = Object();
-var our_dnd_type = "text/puvnex-game-server-dummy";
-var api_queue = [];
-var api_posting = false;
-var us;
-var gen = 0;
-var cseq = 0;
-var ctoken;
-var uo_map = Object.create(null);
-var keyops_local = Object();
-var last_log_ts;
-var last_zoom_factor = 1.0;
-var firefox_bug_zoom_factor_compensation = 1.0;
-var gen_update_hook = function () { };
-var svg_ns;
-var space;
-var pieces_marker;
-var defs_marker;
-var log_elem;
-var logscroll_elem;
-var status_node;
-var uos_node;
-var zoom_val;
-var zoom_btn;
-var links_elem;
-var wresting;
-const pane_keys = {
- "H": "help",
- "U": "players",
-};
-const uo_kind_prec = {
- 'GlobalExtra': 50,
- 'Client': 70,
- 'Global': 100,
- 'Piece': 200,
- 'ClientExtra': 500,
-};
-var players;
-var movements = [];
-function xhr_post_then(url, data, good) {
- var xhr = new XMLHttpRequest();
- xhr.onreadystatechange = function () {
- if (xhr.readyState != XMLHttpRequest.DONE) {
- return;
- }
- if (xhr.status != 200) {
- xhr_report_error(xhr);
- }
- else {
- good(xhr);
- }
- };
- xhr.timeout = general_timeout;
- xhr.open('POST', url);
- xhr.setRequestHeader('Content-Type', 'application/json');
- xhr.send(data);
-}
-function xhr_report_error(xhr) {
- json_report_error({
- statusText: xhr.statusText,
- responseText: xhr.responseText,
- });
-}
-function json_report_error(error_for_json) {
- let error_message = JSON.stringify(error_for_json);
- string_report_error(error_message);
-}
-function string_report_error(error_message) {
- let errornode = document.getElementById('error');
- errornode.textContent += '\nError (reloading may help?):' + error_message;
- console.error("ERROR reported via log", error_message);
- // todo want to fix this for at least basic game reconfigs, auto-reload?
-}
-function api(meth, data) {
- api_queue.push([meth, data]);
- api_check();
-}
-function api_delay(meth, data) {
- if (api_queue.length == 0)
- window.setTimeout(api_check, 10);
- api_queue.push([meth, data]);
-}
-function api_check() {
- if (api_posting) {
- return;
- }
- if (!api_queue.length) {
- return;
- }
- do {
- var [meth, data] = api_queue.shift();
- if (meth != 'm')
- break;
- let piece = data.piece;
- let p = pieces[piece];
- if (p == null)
- break;
- p.queued_moves--;
- if (p.queued_moves == 0)
- break;
- } while (1);
- api_posting = true;
- xhr_post_then('/_/api/' + meth, JSON.stringify(data), api_posted);
-}
-function api_posted() {
- api_posting = false;
- api_check();
-}
-function api_piece(f, meth, piece, p, op) {
- clear_halo(piece, p);
- cseq += 1;
- p.cseq = cseq;
- f(meth, {
- ctoken: ctoken,
- piece: piece,
- gen: gen,
- cseq: cseq,
- op: op,
- });
-}
-function svg_element(id) {
- let elem = document.getElementById(id);
- return elem;
-}
-function piece_element(base, piece) {
- return svg_element(base + piece);
-}
-// ----- key handling -----
-function recompute_keybindings() {
- uo_map = Object.create(null);
- let all_targets = [];
- for (let piece of Object.keys(pieces)) {
- let p = pieces[piece];
- if (p.held != us)
- continue;
- all_targets.push(piece);
- for (var uo of p.uos) {
- let currently = uo_map[uo.def_key];
- if (currently === null)
- continue;
- if (currently !== undefined) {
- if (currently.opname != uo.opname) {
- uo_map[uo.def_key] = null;
- continue;
- }
- }
- else {
- currently = Object.assign({ targets: [] }, uo);
- uo_map[uo.def_key] = currently;
- }
- currently.desc = currently.desc < uo.desc ? currently.desc : uo.desc;
- currently.targets.push(piece);
- }
- }
- let add_uo = function (targets, uo) {
- uo_map[uo.def_key] = Object.assign({ targets: targets }, uo);
- };
- if (all_targets.length) {
- add_uo(all_targets, {
- def_key: 'l',
- kind: 'Client',
- wrc: 'Predictable',
- opname: "left",
- desc: "rotate left",
- });
- add_uo(all_targets, {
- def_key: 'r',
- kind: 'Client',
- wrc: 'Predictable',
- opname: "right",
- desc: "rotate right",
- });
- add_uo(all_targets, {
- def_key: 'b',
- kind: 'Client',
- wrc: 'Predictable',
- opname: "lower",
- desc: "send to bottom (below other pieces)",
- });
- }
- if (all_targets.length) {
- let got = 0;
- for (let t of all_targets) {
- got |= 1 << Number(pieces[t].pinned);
- }
- if (got == 1) {
- add_uo(all_targets, {
- def_key: 'P',
- kind: 'ClientExtra',
- opname: 'pin',
- desc: 'Pin to table',
- wrc: 'Predictable',
- });
- }
- else if (got == 2) {
- add_uo(all_targets, {
- def_key: 'P',
- kind: 'ClientExtra',
- opname: 'unpin',
- desc: 'Unpin from table',
- wrc: 'Predictable',
- });
- }
- }
- add_uo(null, {
- def_key: 'W',
- kind: 'ClientExtra',
- opname: 'wrest',
- desc: wresting ? 'Exit wresting mode' : 'Enter wresting mode',
- wrc: 'Predictable',
- });
- var uo_keys = Object.keys(uo_map);
- uo_keys.sort(function (ak, bk) {
- let a = uo_map[ak];
- let b = uo_map[bk];
- return uo_kind_prec[a.kind] - uo_kind_prec[b.kind]
- || ak.localeCompare(bk);
- });
- let mid_elem = null;
- for (let celem = uos_node.firstElementChild; celem != null; celem = nextelem) {
- var nextelem = celem.nextElementSibling;
- let cid = celem.getAttribute("id");
- if (cid == "uos-mid")
- mid_elem = celem;
- else if (celem.getAttribute("class") == 'uos-mid') { }
- else
- celem.remove();
- }
- for (var kk of uo_keys) {
- let uo = uo_map[kk];
- let prec = uo_kind_prec[uo.kind];
- let ent = document.createElement('div');
- ent.innerHTML = '<b>' + kk + '</b> ' + uo.desc;
- if (prec < 400) {
- ent.setAttribute('class', 'uokey-l');
- uos_node.insertBefore(ent, mid_elem);
- }
- else {
- ent.setAttribute('class', 'uokey-r');
- uos_node.appendChild(ent);
- }
- }
-}
-function some_keydown(e) {
- // https://developer.mozilla.org/en-US/docs/Web/API/Document/keydown_event
- // says to do this, something to do with CJK composition.
- // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent
- // says that keyCode is deprecated
- // my tsc says this isComposing thing doesn't exist. wat.
- if (e.isComposing /* || e.keyCode === 229 */)
- return;
- if (e.ctrlKey || e.altKey || e.metaKey)
- return;
- let pane = pane_keys[e.key];
- if (pane) {
- return pane_switch(pane);
- }
- let uo = uo_map[e.key];
- if (uo === undefined || uo === null)
- return;
- console.log('KEY UO', e, uo);
- if (uo.kind == 'Client' || uo.kind == 'ClientExtra') {
- let f = keyops_local[uo.opname];
- f(uo);
- return;
- }
- if (!(uo.kind == 'Global' || uo.kind == 'GlobalExtra' || uo.kind == 'Piece'))
- throw 'bad kind ' + uo.kind;
- for (var piece of uo.targets) {
- let p = pieces[piece];
- api_piece(api, 'k', piece, p, { opname: uo.opname, wrc: uo.wrc });
- if (uo.wrc == 'UpdateSvg') {
- p.cseq_updatesvg = p.cseq;
- redisplay_ancillaries(piece, p);
- }
- }
-}
-function pane_switch(newpane) {
- let new_e;
- for (;;) {
- new_e = document.getElementById('pane_' + newpane);
- let style = new_e.getAttribute('style');
- if (style || newpane == 'help')
- break;
- newpane = 'help';
- }
- for (let old_e = new_e.parentElement.firstElementChild; old_e; old_e = old_e.nextElementSibling) {
- old_e.setAttribute('style', 'display: none;');
- }
- new_e.removeAttribute('style');
-}
-keyops_local['left'] = function (uo) { rotate_targets(uo, +1); };
-keyops_local['right'] = function (uo) { rotate_targets(uo, -1); };
-function rotate_targets(uo, dangle) {
- for (let piece of uo.targets) {
- let p = pieces[piece];
- p.angle += dangle + 8;
- p.angle %= 8;
- let transform = wasm_bindgen.angle_transform(p.angle);
- p.pelem.setAttributeNS(null, 'transform', transform);
- api_piece(api, 'rotate', piece, p, p.angle);
- }
- recompute_keybindings();
- return true;
-}
-keyops_local['lower'] = function (uo) { lower_targets(uo); };
-function lower_targets(uo) {
- function target_treat_pinned(p) {
- return wresting || p.pinned;
- ;
- }
- let targets_todo = Object.create(null);
- for (let piece of uo.targets) {
- let p = pieces[piece];
- let pinned = target_treat_pinned(p);
- targets_todo[piece] = { p, piece, pinned, };
- }
- let problem = lower_pieces(targets_todo);
- if (problem !== null) {
- add_log_message('Cannot lower: ' + problem);
- return false;
- }
- return true;
-}
-function lower_pieces(targets_todo) {
- // This is a bit subtle. We don't want to lower below pinned pieces
- // (unless we are pinned too, or the user is wresting). But maybe
- // the pinned pieces aren't already at the bottom. For now we will
- // declare that all pinned pieces "should" be below all non-pinned
- // ones. Not as an invariant, but as a thing we will do here to try
- // to make a sensible result. We implement this as follows: if we
- // find pinned pieces above non-pinned pieces, we move those pinned
- // pieces to the bottom too, just below us, preserving their
- // relative order.
- //
- // Disregarding pinned targets:
- //
- // Z <some stuff not including any unpinned targets>
- // Z
- // topmost unpinned target *
- // B (
- // B unpinned non-target
- // B | unpinned target *
- // B | pinned non-target, mis-stacked *
- // B )*
- // B
- // bottommost unpinned non-target
- // if that is below topmost unpinned target
- // <- tomove_unpinned: insert targets from * here Q ->
- // <- tomove_misstacked: insert non-targets from * here Q->
- // A
- // A pinned things (nomove_pinned)
- // <- tomove_pinned: insert all pinned targets here P ->
- //
- // When wresting, treat all targets as pinned.
- // bottom of the stack order first
- let tomove_unpinned = [];
- let tomove_misstacked = [];
- let nomove_pinned = [];
- let tomove_pinned = [];
- let bottommost_unpinned = null;
- let n_targets_todo_unpinned = 0;
- for (const piece of Object.keys(targets_todo)) {
- let p = targets_todo[piece];
- if (!p.pinned)
- n_targets_todo_unpinned++;
- }
- let walk = pieces_marker;
- for (;;) { // starting at the bottom of the stack order
- if (n_targets_todo_unpinned == 0
- && bottommost_unpinned !== null) {
- // no unpinned targets left, state Z, we can stop now
- console.log('LOWER STATE Z FINISHED');
- break;
- }
- if (Object.keys(targets_todo).length == 0 &&
- bottommost_unpinned !== null) {
- console.log('LOWER NO TARGETS BUT UNPINNED!', n_targets_todo_unpinned);
- break;
- }
- let new_walk = walk.nextElementSibling;
- if (new_walk == null) {
- console.log('LOWER WALK NO SIBLING!');
- break;
- }
- walk = new_walk;
- let piece = walk.dataset.piece;
- if (piece == null) {
- console.log('LOWER WALK REACHED TOP');
- break;
- }
- let todo = targets_todo[piece];
- if (todo) {
- console.log('LOWER WALK', piece, 'TODO', todo.pinned);
- delete targets_todo[piece];
- if (!todo.pinned)
- n_targets_todo_unpinned--;
- (todo.pinned ? tomove_pinned : tomove_unpinned).push(todo);
- continue;
- }
- let p = pieces[piece];
- if (bottommost_unpinned === null) { // state A
- if (!p.pinned) {
- console.log('LOWER WALK', piece, 'STATE A -> Z');
- bottommost_unpinned = { p, piece };
- }
- else {
- console.log('LOWER WALK', piece, 'STATE A');
- nomove_pinned.push({ p, piece });
- }
- continue;
- }
- // state B
- if (p.pinned) {
- console.log('LOWER WALK', piece, 'STATE B MIS-STACKED');
- tomove_misstacked.push({ p, piece });
- }
- else {
- console.log('LOWER WALK', piece, 'STATE B');
- }
- }
- let z_top = bottommost_unpinned ? bottommost_unpinned.p.z :
- walk.dataset.piece != null ? pieces[walk.dataset.piece].z :
- // rather a lack of things we are not adjusting!
- wasm_bindgen.def_zcoord();
- let plan = [];
- let partQ = tomove_unpinned.concat(tomove_misstacked);
- let partP = tomove_pinned;
- if (nomove_pinned.length == 0) {
- plan.push({
- content: partQ.concat(partP),
- z_top,
- z_bot: null,
- });
- }
- else {
- plan.push({
- content: partQ,
- z_top,
- z_bot: nomove_pinned[nomove_pinned.length - 1].p.z,
- }, {
- content: partP,
- z_top: nomove_pinned[0].p.z,
- z_bot: null,
- });
- }
- console.log('LOWER PLAN', plan);
- for (const pe of plan) {
- for (const e of pe.content) {
- if (e.p.held != null && e.p.held != us) {
- return "lowering would disturb a piece held by another player";
- }
- }
- }
- z_top = null;
- for (const pe of plan) {
- if (pe.z_top != null)
- z_top = pe.z_top;
- let z_bot = pe.z_bot;
- let zrange = wasm_bindgen.range(z_bot, z_top, pe.content.length);
- console.log('LOQER PLAN PE', pe, z_bot, z_top, pe.content.length, zrange.debug());
- for (const e of pe.content) {
- let p = e.p;
- piece_set_zlevel(e.piece, p, (oldtop_piece) => {
- let z = zrange.next();
- p.z = z;
- api_piece(api, "setz", e.piece, e.p, { z });
- });
- }
- }
- return null;
-}
-keyops_local['wrest'] = function (uo) {
- wresting = !wresting;
- document.getElementById('wresting-warning').innerHTML = !wresting ? "" :
- " <strong>(wresting mode!)</strong>";
- ungrab_all();
- recompute_keybindings();
-};
-keyops_local['pin'] = function (uo) {
- if (!lower_targets(uo))
- return;
- pin_unpin(uo, true);
-};
-keyops_local['unpin'] = function (uo) {
- pin_unpin(uo, false);
-};
-function pin_unpin(uo, newpin) {
- for (let piece of uo.targets) {
- let p = pieces[piece];
- p.pinned = newpin;
- api_piece(api, 'pin', piece, p, newpin);
- redisplay_ancillaries(piece, p);
- }
- recompute_keybindings();
-}
-var DRAGGING;
-(function (DRAGGING) {
- DRAGGING[DRAGGING["NO"] = 0] = "NO";
- DRAGGING[DRAGGING["MAYBE_GRAB"] = 1] = "MAYBE_GRAB";
- DRAGGING[DRAGGING["MAYBE_UNGRAB"] = 2] = "MAYBE_UNGRAB";
- DRAGGING[DRAGGING["YES"] = 4] = "YES";
- DRAGGING[DRAGGING["RAISED"] = 8] = "RAISED";
-})(DRAGGING || (DRAGGING = {}));
-;
-var drag_pieces = [];
-var dragging = DRAGGING.NO;
-var dcx;
-var dcy;
-const DRAGTHRESH = 5;
-function drag_add_piece(piece, p) {
- drag_pieces.push({
- piece: piece,
- dox: parseFloat(p.uelem.getAttributeNS(null, "x")),
- doy: parseFloat(p.uelem.getAttributeNS(null, "y")),
- });
-}
-function some_mousedown(e) {
- console.log('mousedown', e, e.clientX, e.clientY, e.target);
- if (e.button != 0) {
- return;
- }
- if (e.altKey) {
- return;
- }
- if (e.metaKey) {
- return;
- }
- if (e.ctrlKey) {
- return;
- }
- else {
- drag_mousedown(e, e.shiftKey);
- }
-}
-function drag_mousedown(e, shifted) {
- var target = e.target; // we check this just now!
- var piece = target.dataset.piece;
- if (!piece) {
- if (!shifted) {
- ungrab_all();
- }
- return;
- }
- let p = pieces[piece];
- let held = p.held;
- drag_cancel();
- drag_pieces = [];
- if (held == us) {
- dragging = DRAGGING.MAYBE_UNGRAB;
- drag_add_piece(piece, p); // contrive to have this one first
- for (let tpiece of Object.keys(pieces)) {
- if (tpiece == piece)
- continue;
- let tp = pieces[tpiece];
- if (tp.held != us)
- continue;
- drag_add_piece(tpiece, tp);
- }
- }
- else if (held == null || wresting) {
- // xxx prevent clicking on anything that is occulting, unless wresting
- if (!shifted) {
- ungrab_all();
- }
- if (p.pinned && !wresting) {
- add_log_message('That piece is pinned to the table.');
- return;
- }
- dragging = DRAGGING.MAYBE_GRAB;
- drag_add_piece(piece, p);
- set_grab(piece, p, us);
- api_piece(api, wresting ? 'wrest' : 'grab', piece, p, {});
- }
- else {
- add_log_message('That piece is held by another player.');
- return;
- }
- dcx = e.clientX;
- dcy = e.clientY;
- window.addEventListener('mousemove', drag_mousemove, true);
- window.addEventListener('mouseup', drag_mouseup, true);
-}
-function ungrab_all() {
- for (let tpiece of Object.keys(pieces)) {
- let tp = pieces[tpiece];
- if (tp.held == us) {
- set_ungrab(tpiece, tp);
- api_piece(api, 'ungrab', tpiece, tp, {});
- }
- }
-}
-function set_grab(piece, p, owner) {
- p.held = owner;
- redisplay_ancillaries(piece, p);
- recompute_keybindings();
-}
-function set_ungrab(piece, p) {
- p.held = null;
- redisplay_ancillaries(piece, p);
- recompute_keybindings();
-}
-function clear_halo(piece, p) {
- p.last_seen_moved = null;
- redisplay_ancillaries(piece, p);
-}
-function ancillary_node(piece, stroke) {
- var nelem = document.createElementNS(svg_ns, 'use');
- nelem.setAttributeNS(null, 'href', '#surround' + piece);
- nelem.setAttributeNS(null, 'stroke', stroke);
- nelem.setAttributeNS(null, 'fill', 'none');
- return nelem;
-}
-function redisplay_ancillaries(piece, p) {
- let href = '#surround' + piece;
- console.log('REDISPLAY ANCILLARIES', href);
- for (let celem = p.pelem.firstElementChild; celem != null; celem = nextelem) {
- var nextelem = celem.nextElementSibling;
- let thref = celem.getAttributeNS(null, "href");
- if (thref == href) {
- celem.remove();
- }
- }
- let halo_colour = null;
- if (p.cseq_updatesvg != null) {
- halo_colour = 'purple';
- }
- else if (p.last_seen_moved != null) {
- halo_colour = 'yellow';
- }
- else if (p.held != null && p.pinned) {
- halo_colour = '#8cf';
- }
- if (halo_colour != null) {
- let nelem = ancillary_node(piece, halo_colour);
- if (p.held != null) {
- nelem.setAttributeNS(null, 'stroke-width', '2px');
- }
- p.pelem.prepend(nelem);
- }
- if (p.held != null) {
- let da = players[p.held].dasharray;
- let nelem = ancillary_node(piece, held_surround_colour);
- nelem.setAttributeNS(null, 'stroke-dasharray', da);
- p.pelem.appendChild(nelem);
- }
-}
-function drag_mousemove(e) {
- var ctm = space.getScreenCTM();
- var ddx = (e.clientX - dcx) / (ctm.a * firefox_bug_zoom_factor_compensation);
- var ddy = (e.clientY - dcy) / (ctm.d * firefox_bug_zoom_factor_compensation);
- var ddr2 = ddx * ddx + ddy * ddy;
- if (!(dragging & DRAGGING.YES)) {
- if (ddr2 > DRAGTHRESH) {
- dragging |= DRAGGING.YES;
- }
- }
- //console.log('mousemove', ddx, ddy, dragging);
- if (dragging & DRAGGING.YES) {
- console.log('DRAG PIECES', drag_pieces);
- for (let dp of drag_pieces) {
- console.log('DRAG PIECES PIECE', dp);
- let tpiece = dp.piece;
- let tp = pieces[tpiece];
- var x = Math.round(dp.dox + ddx);
- var y = Math.round(dp.doy + ddy);
- tp.uelem.setAttributeNS(null, "x", x + "");
- tp.uelem.setAttributeNS(null, "y", y + "");
- tp.queued_moves++;
- api_piece(api_delay, 'm', tpiece, tp, [x, y]);
- }
- if (!(dragging & DRAGGING.RAISED) && drag_pieces.length == 1) {
- let dp = drag_pieces[0];
- let piece = dp.piece;
- let p = pieces[piece];
- let dragraise = +p.pelem.dataset.dragraise;
- if (dragraise > 0 && ddr2 >= dragraise * dragraise) {
- dragging |= DRAGGING.RAISED;
- console.log('CHECK RAISE ', dragraise, dragraise * dragraise, ddr2);
- piece_set_zlevel(piece, p, (oldtop_piece) => {
- let oldtop_p = pieces[oldtop_piece];
- let z = wasm_bindgen.increment(oldtop_p.z);
- p.z = z;
- api_piece(api, "setz", piece, p, { z: z });
- });
- }
- }
- }
- return ddr2;
-}
-function drag_mouseup(e) {
- console.log('mouseup', dragging);
- let ddr2 = drag_mousemove(e);
- drag_end();
-}
-function drag_end() {
- if (dragging == DRAGGING.MAYBE_UNGRAB ||
- (dragging & ~DRAGGING.RAISED) == (DRAGGING.MAYBE_GRAB | DRAGGING.YES)) {
- let dp = drag_pieces[0];
- let piece = dp.piece;
- let p = pieces[piece];
- set_ungrab(piece, p);
- api_piece(api, 'ungrab', piece, p, {});
- }
- drag_cancel();
-}
-function drag_cancel() {
- window.removeEventListener('mousemove', drag_mousemove, true);
- window.removeEventListener('mouseup', drag_mouseup, true);
- dragging = DRAGGING.NO;
- drag_pieces = [];
-}
-messages.AddPlayer = function (j) {
- players[j.player] = j.data;
- player_info_pane_set(j);
-};
-messages.RemovePlayer = function (j) {
- delete players[j.player];
- player_info_pane_set(j);
-};
-function player_info_pane_set(j) {
- document.getElementById('player_list')
- .innerHTML = j.new_info_pane;
-}
-messages.SetLinks = function (msg) {
- if (msg.length != 0 && layout == 'Portrait') {
- msg += " |";
- }
- links_elem.innerHTML = msg;
-};
-// ----- logs -----
-messages.Log = function (j) {
- add_timestamped_log_message(j.when, j.logent.html);
-};
-function add_log_message(msg_html) {
- add_timestamped_log_message('', msg_html);
-}
-function add_timestamped_log_message(ts_html, msg_html) {
- var lastent = log_elem.lastElementChild;
- var in_scrollback = lastent == null ||
- // inspired by
- // https://stackoverflow.com/questions/487073/how-to-check-if-element-is-visible-after-scrolling/21627295#21627295
- // rejected
- // https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API
- (() => {
- let le_top = lastent.getBoundingClientRect().top;
- let le_bot = lastent.getBoundingClientRect().bottom;
- let ld_bot = logscroll_elem.getBoundingClientRect().bottom;
- console.log("ADD_LOG_MESSAGE bboxes: le t b, bb", le_top, le_bot, ld_bot);
- return 0.5 * (le_bot + le_top) > ld_bot;
- })();
- console.log('ADD LOG MESSAGE ', in_scrollback, layout, msg_html);
- var ne;
- function add_thing(elemname, cl, html) {
- var ie = document.createElement(elemname);
- ie.innerHTML = html;
- ie.setAttribute("class", cl);
- ne.appendChild(ie);
- }
- if (layout == 'Portrait') {
- ne = document.createElement('tr');
- add_thing('td', 'logmsg', msg_html);
- add_thing('td', 'logts', ts_html);
- }
- else if (layout == 'Landscape') {
- ts_html = last_log_ts.update(ts_html);
- ne = document.createElement('div');
- add_thing('span', 'logts', ts_html);
- ne.appendChild(document.createElement('br'));
- add_thing('span', 'logmsg', msg_html);
- ne.appendChild(document.createElement('br'));
- }
- else {
- throw 'bad layout ' + layout;
- }
- log_elem.appendChild(ne);
- if (!in_scrollback) {
- logscroll_elem.scrollTop = logscroll_elem.scrollHeight;
- }
-}
-// ----- zoom -----
-function zoom_pct() {
- let str = zoom_val.value;
- let val = parseFloat(str);
- if (isNaN(val)) {
- return undefined;
- }
- else {
- return val;
- }
-}
-function zoom_enable() {
- zoom_btn.disabled = (zoom_pct() === undefined);
-}
-function zoom_activate() {
- let pct = zoom_pct();
- if (pct !== undefined) {
- let fact = pct * 0.01;
- let last_ctm_a = space.getScreenCTM().a;
- document.getElementsByTagName('body')[0]
- .style.transform = 'scale(' + fact + ',' + fact + ')';
- if (fact != last_zoom_factor) {
- if (last_ctm_a == space.getScreenCTM().a) {
- console.log('FIREFOX GETSCREENCTM BUG');
- firefox_bug_zoom_factor_compensation = fact;
- }
- else {
- console.log('No firefox getscreenctm bug');
- firefox_bug_zoom_factor_compensation = 1.0;
- }
- last_zoom_factor = fact;
- }
- }
- zoom_btn.disabled = true;
-}
-function handle_piece_update(j) {
- console.log('PIECE UPDATE ', j);
- var piece = j.piece;
- var m = j.op;
- var k = Object.keys(m)[0];
- let p = pieces[piece];
- pieceops[k](piece, p, m[k]);
-}
-;
-messages.Piece = handle_piece_update;
-pieceops.ModifyQuiet = function (piece, p, info) {
- console.log('PIECE UPDATE MODIFY QUIET ', piece, info);
- piece_modify(piece, p, info, false);
-};
-pieceops.Modify = function (piece, p, info) {
- console.log('PIECE UPDATE MODIFY LOuD ', piece, info);
- piece_note_moved(piece, p);
- piece_modify(piece, p, info, false);
-};
-piece_error_handlers.PosOffTable = function () { return true; };
-piece_error_handlers.Conflict = function () { return true; };
-function piece_modify(piece, p, info, conflict_expected) {
- p.delem.innerHTML = info.svg;
- p.pelem = piece_element('piece', piece);
- p.uelem.setAttributeNS(null, "x", info.pos[0] + "");
- p.uelem.setAttributeNS(null, "y", info.pos[1] + "");
- p.held = info.held;
- p.pinned = info.pinned;
- p.angle = info.angle;
- p.uos = info.uos;
- piece_set_zlevel(piece, p, (oldtop_piece) => {
- p.z = info.z;
- p.zg = info.zg;
- });
- piece_checkconflict_nrda(piece, p, conflict_expected);
- redisplay_ancillaries(piece, p);
- recompute_keybindings();
- console.log('MODIFY DONE');
-}
-/*
-pieceops.Insert = <PieceHandler>function
-(piece: PieceId, p: null,
- info: { svg: string, held: PlayerId, pos: Pos, z: number, zg: Generation}) {
- console.log('PIECE UPDATE INSERT ',piece,info)
- delem = document.createElementNS(svg_ns,'defs');
- delem.setAttributeNS(null,'id','defs'+piece);
- delem.innerHTML = info.svg;
- space.appendChild(delem);
- pelem =
-
- nelem.setAttributeNS(null,'stroke',stroke);
- nelem.setAttributeNS(null,'fill','none');
-*/
-function piece_set_zlevel(piece, p, modify) {
- // Calls modify, which should set .z and/or .gz, and/or
- // make any necessary API call.
- //
- // Then moves uelem to the right place in the DOM. This is done
- // by assuming that uelem ought to go at the end, so this is
- // O(new depth), which is right (since the UI for inserting
- // an object is itself O(new depth) UI operations to prepare.
- let oldtop_elem = defs_marker.previousElementSibling;
- let oldtop_piece = oldtop_elem.dataset.piece;
- modify(oldtop_piece);
- let ins_before = defs_marker;
- let earlier_elem;
- for (;; ins_before = earlier_elem) {
- earlier_elem = ins_before.previousElementSibling;
- if (earlier_elem == pieces_marker)
- break;
- if (earlier_elem == p.uelem)
- continue;
- let earlier_p = pieces[earlier_elem.dataset.piece];
- if (!piece_z_before(p, earlier_p))
- break;
- }
- if (ins_before != p.uelem)
- space.insertBefore(p.uelem, ins_before);
-}
-function piece_note_moved(piece, p) {
- let now = performance.now();
- let need_redisplay = p.last_seen_moved == null;
- p.last_seen_moved = now;
- if (need_redisplay)
- redisplay_ancillaries(piece, p);
- let cutoff = now - 1000.;
- while (movements.length > 0 && movements[0].this_motion < cutoff) {
- let mr = movements.shift();
- if (mr.p.last_seen_moved != null &&
- mr.p.last_seen_moved < cutoff) {
- mr.p.last_seen_moved = null;
- redisplay_ancillaries(mr.piece, mr.p);
- }
- }
- movements.push({ piece: piece, p: p, this_motion: now });
-}
-function piece_z_before(a, b) {
- if (a.z < b.z)
- return true;
- if (a.z > b.z)
- return false;
- if (a.zg < b.zg)
- return true;
- if (a.zg > b.zg)
- return false;
- return false;
-}
-pieceops.Move = function (piece, p, info) {
- piece_checkconflict_nrda(piece, p, false);
- piece_note_moved(piece, p);
- p.uelem.setAttributeNS(null, "x", info[0] + "");
- p.uelem.setAttributeNS(null, "y", info[1] + "");
-};
-pieceops.SetZLevel = function (piece, p, info) {
- piece_note_moved(piece, p);
- piece_set_zlevel(piece, p, (oldtop_piece) => {
- let oldtop_p = pieces[oldtop_piece];
- p.z = info.z;
- p.zg = info.zg;
- });
-};
-messages.Recorded = function (j) {
- let piece = j.piece;
- let p = pieces[piece];
- piece_recorded_cseq(p, j);
- if (p.cseq_updatesvg != null && j.cseq >= p.cseq_updatesvg) {
- p.cseq_updatesvg = null;
- redisplay_ancillaries(piece, p);
- }
- if (j.svg != null) {
- p.delem.innerHTML = j.svg;
- p.pelem = piece_element('piece', piece);
- redisplay_ancillaries(piece, p);
- }
- if (j.zg != null) {
- var zg_new = j.zg; // type narrowing doesn't propagate :-/
- piece_set_zlevel(piece, p, (oldtop_piece) => {
- p.zg = zg_new;
- });
- }
-};
-function piece_recorded_cseq(p, j) {
- if (p.cseq != null && j.cseq >= p.cseq) {
- p.cseq = null;
- }
-}
-messages.RecordedUnpredictable = function (j) {
- let piece = j.piece;
- let p = pieces[piece];
- piece_recorded_cseq(p, j);
- piece_modify(piece, p, j.ns, false);
-};
-messages.Error = function (m) {
- console.log('ERROR UPDATE ', m);
- var k = Object.keys(m)[0];
- update_error_handlers[k](m[k]);
-};
-update_error_handlers.PieceOpError = function (m) {
- let piece = m.state.piece;
- let p = pieces[piece];
- console.log('ERROR UPDATE PIECE ', m, p);
- if (p == null)
- return;
- let conflict_expected = piece_error_handlers[m.error](piece, p, m);
- handle_piece_update(m.state);
-};
-function piece_checkconflict_nrda(piece, p, conflict_expected) {
- if (p.cseq != null) {
- p.cseq = null;
- if (drag_pieces.some(function (dp) { return dp.piece == piece; })) {
- console.log('drag end due to conflict');
- drag_end();
- }
- if (!conflict_expected) {
- add_log_message('Conflict! - simultaneous update');
- }
- }
- return false;
-}
-function test_swap_stack() {
- let old_bot = pieces_marker.nextElementSibling;
- let container = old_bot.parentElement;
- container.insertBefore(old_bot, defs_marker);
- window.setTimeout(test_swap_stack, 1000);
-}
-function startup() {
- console.log('STARTUP');
- console.log(wasm_bindgen.setup("OK"));
- var body = document.getElementById("main-body");
- zoom_btn = document.getElementById("zoom-btn");
- zoom_val = document.getElementById("zoom-val");
- links_elem = document.getElementById("links");
- ctoken = body.dataset.ctoken;
- us = body.dataset.us;
- gen = +body.dataset.gen;
- let sse_url_prefix = body.dataset.sseUrlPrefix;
- status_node = document.getElementById('status');
- status_node.innerHTML = 'js-done';
- log_elem = document.getElementById("log");
- logscroll_elem = document.getElementById("logscroll") || log_elem;
- let dataload = JSON.parse(body.dataset.load);
- held_surround_colour = dataload.held_surround_colour;
- players = dataload.players;
- delete body.dataset.load;
- uos_node = document.getElementById("uos");
- space = svg_element('space');
- pieces_marker = svg_element("pieces_marker");
- defs_marker = svg_element("defs_marker");
- svg_ns = space.getAttribute('xmlns');
- for (let uelem = pieces_marker.nextElementSibling; uelem != defs_marker; uelem = uelem.nextElementSibling) {
- let piece = uelem.dataset.piece;
- let p = JSON.parse(uelem.dataset.info);
- p.uelem = uelem;
- p.delem = piece_element('defs', piece);
- p.pelem = piece_element('piece', piece);
- p.queued_moves = 0;
- delete uelem.dataset.info;
- pieces[piece] = p;
- redisplay_ancillaries(piece, p);
- }
- last_log_ts = wasm_bindgen.timestamp_abbreviator(dataload.last_log_ts);
- var es = new EventSource(sse_url_prefix + "/_/updates?ctoken=" + ctoken + '&gen=' + gen);
- es.onmessage = function (event) {
- console.log('GOTEVE', event.data);
- var k;
- var m;
- try {
- var [tgen, ms] = JSON.parse(event.data);
- for (m of ms) {
- k = Object.keys(m)[0];
- messages[k](m[k]);
- }
- gen = tgen;
- gen_update_hook();
- }
- catch (exc) {
- var s = exc.toString();
- string_report_error('exception handling update '
- + k + ': ' + JSON.stringify(m) + ': ' + s);
- }
- };
- es.addEventListener('commsworking', function (event) {
- console.log('GOTDATA', event.data);
- status_node.innerHTML = event.data;
- });
- es.addEventListener('player-gone', function (event) {
- console.log('PLAYER-GONE', event);
- status_node.innerHTML = event.data;
- add_log_message('<strong>You are no longer in the game</strong>');
- space.removeEventListener('mousedown', some_mousedown);
- document.removeEventListener('keydown', some_keydown);
- es.close();
- });
- es.addEventListener('updates-expired', function (event) {
- console.log('UPDATES-EXPIRED', event);
- string_report_error('connection to server interrupted too long');
- });
- es.onerror = function (e) {
- console.log('FOO', e, es);
- json_report_error({
- updates_error: e,
- updates_event_source: es,
- updates_event_source_ready: es.readyState,
- update_oe: e.className,
- });
- };
- recompute_keybindings();
- space.addEventListener('mousedown', some_mousedown);
- document.addEventListener('keydown', some_keydown);
-}
-var wasm_promise;
-;
-function doload() {
- console.log('DOLOAD');
- globalinfo_elem = document.getElementById('global-info');
- layout = globalinfo_elem.dataset.layout;
- var elem = document.getElementById('loading_token');
- var ptoken = elem.dataset.ptoken;
- xhr_post_then('/_/session/' + layout, JSON.stringify({ ptoken: ptoken }), loaded);
- wasm_promise = wasm_input
- .then(wasm_bindgen);
-}
-function loaded(xhr) {
- console.log('LOADED');
- var body = document.getElementById('loading_body');
- wasm_promise.then((got_wasm) => {
- wasm = got_wasm;
- body.outerHTML = xhr.response;
- startup();
- });
-}
-// todo scroll of log messages to bottom did not always work somehow
-// think I have fixed this with approximation
-doload();