-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathclient.js
More file actions
91 lines (82 loc) · 2.18 KB
/
Copy pathclient.js
File metadata and controls
91 lines (82 loc) · 2.18 KB
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
79
80
81
82
83
84
85
86
87
88
89
90
91
'use strict';
const socket = new WebSocket('ws://127.0.0.1:8000/');
const user = document.getElementById('user');
const source = document.getElementById('source');
const buttons = document.getElementById('buttons');
const settings = document.getElementById('settings');
const clients = {};
let selectedClient = null;
let selectedButton = null;
let localUser = '';
const toElement = (html) => {
const template = document.createElement('template');
template.innerHTML = html;
return template.content.firstChild;
};
const showSource = (clientName) => {
selectedClient = clientName;
const client = clients[clientName];
if (client) {
source.value = client.source;
}
};
const addClient = (client) => {
const button = toElement(
`<button id="button${client.name}">${client.name}</button>`,
);
buttons.appendChild(button);
button.clientName = client.name;
button.addEventListener('click', () => {
if (button.clientName !== selectedButton) {
if (selectedButton) selectedButton.className = '';
button.className = 'selected';
selectedButton = button;
selectedClient = button.clientName;
showSource(selectedClient);
}
});
clients[client.name] = { button, client, source: '' };
return button;
};
const changeSource = (edit) => {
const client = clients[edit.name];
client.source = edit.value;
if (selectedClient === edit.name) {
showSource(edit.name);
}
};
user.addEventListener('keydown', (event) => {
if (event.keyCode === 13) {
localUser = user.value;
const event = {
client: {
name: user.value,
},
};
settings.hidden = true;
socket.send(JSON.stringify(event));
const button = addClient(event.client);
button.className = 'selected';
}
});
source.addEventListener('input', () => {
const client = clients[localUser];
client.source = source.value;
socket.send(
JSON.stringify({
edit: {
name: localUser,
value: source.value,
},
}),
);
});
socket.onmessage = (event) => {
const change = JSON.parse(event.data);
console.log(event.data);
if (change.client) {
addClient(change.client);
} else if (change.edit) {
changeSource(change.edit);
}
};