summary refs log tree commit diff
path: root/client.html
blob: db7a4d3b4106dde733568b0de473f846e1548424 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<div class="container">
    <div class="title">wsChat</div>
    <div class="logs">
    </div>
    <div class="msg">
        <form id="msg">
            <input type="text" id="msg-content" autocomplete="off">
            <input type="submit">
        </form>
    </div>
</div>
<script>
    const logs = document.querySelector(".logs");
    const msgForm = document.querySelector("#msg");
    const server = prompt("Enter server URL", "ws://127.0.0.1:9933")
    const ws = new WebSocket(server); // CHANGE ME
    ws.onopen = openEv => {
        if(logs.innerText.length != 0) logs.innerText += "\n";
        logs.innerText += `Connected to wsChat server at ${ws.url}`;
        document.querySelector(".title").innerHTML += ` - ${new URL(ws.url).host}`;
    }
    ws.onmessage = msg => {;
        console.log(msg);
        if(logs.innerText.length != 0) logs.innerText += "\n";
        logs.innerText += msg.data;
    };
    ws.onclose = cls => {
        if(logs.innerText.length != 0) logs.innerText += "\n";
        logs.innerText += `Connection closed with code ${cls.code}, reason: ${cls.reason}`;
    }
    msgForm.addEventListener('submit', ev => {
        ev.preventDefault();
        const message = document.querySelector("#msg-content");
        ws.send(message.value);
        message.value = "";
    });
</script>
<style>
    * {
        box-sizing: border-box;
    }
    body {
        margin: 0;
        width: 100%;
        min-height: 100vh;
        position: absolute;
    }
    .container {
        position: relative;
        display: flex;
        flex-direction: column;
        height: calc(100vh - 3em);
        border: 2px red solid;
        margin: 1.5em;
    }
    .logs {
        flex-grow: 1;
        padding: 1em;
    }
    .title {
        border-bottom: 2px red solid;
        padding: 1em;
        font-size:  larger;
        font-weight:  bold;
        text-align: center;
    }
    #msg {
        border-top: 2px red solid;
        padding: 1em;
        display: flex;
        margin: 0;
        height: 2em;
        box-sizing: content-box;
    }
    #msg-content {
        flex-grow: 1;
    }
</style>