-
Notifications
You must be signed in to change notification settings - Fork 1
/
chat.html
93 lines (91 loc) · 2.54 KB
/
chat.html
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
92
93
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<style>
body,
textarea {
background: black;
color: pink;
}
.chat {
height: 600px;
overflow-y: scroll;
border: 1px solid pink;
}
textarea {
border: 1px solid pink;
}
</style>
<div class="chat"></div>
<textarea rows="5" cols="100" class="message-entry"></textarea>
<button onclick="send()">Send!</button>
<script>
function scrollToBottom() {
var objDiv = document.querySelector(".chat");
objDiv.scrollTop = objDiv.scrollHeight;
}
scrollToBottom();
function escapeHtml(unsafe) {
unsafe = unsafe.toString();
if (typeof unsafe !== "string") {
throw new Error("Cannot escape " + typeof unsafe);
}
return unsafe
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
async function run() {
while (true) {
try {
const resp = await fetch("?wait");
const text = await resp.text();
var el = document.createElement("html");
el.innerHTML = text;
console.log(el);
console.log(el.innerHTML);
document.querySelector(".chat").innerHTML = el.querySelector(
".chat"
).innerHTML;
scrollToBottom();
} catch (e) {
console.error(e);
}
}
}
run();
async function send() {
let nick = localStorage.getItem("name");
while (!nick) {
nick = prompt("Who are you?");
localStorage.setItem("name", nick);
}
document.querySelector(".chat").innerHTML += `<div><strong>${escapeHtml(
nick
)}: </strong> ${escapeHtml(
document.querySelector(".message-entry").value
)}</div>`;
document.querySelector(".message-entry").value = "";
try {
const resp = await fetch("?", {
method: "PUT",
body: `<!DOCTYPE html>
<html lang="en">
${document.body.parentElement.innerHTML}
</html>`,
});
} catch (e) {
console.error(e);
}
}
</script>
</body>
</html>