]> git.mar77i.info Git - hublib/blob - webroot/first/index.js
8cae34e6e39a60df7b28a53fafb70fe958de9d5a
[hublib] / webroot / first / index.js
1 (function () {
2 "use strict";
3 var input_div = null;
4
5 function write(msg) {
6 common.write(input_div.previousSibling, msg);
7 }
8
9 function change_name_button(hub) {
10 var btn = common.tag(
11 "button",
12 {
13 "event_click": function () {
14 setup_change_name(hub);
15 }
16 }
17 );
18 btn.append(document.createTextNode("change name"));
19 return btn;
20 }
21
22 function setup_chat(hub) {
23 input_div = common.tag("div");
24 input_div.append(
25 common.input_with_keydown_event(
26 function (event, target, keycode) {
27 if (keycode !== "Enter" && keycode !== "NumpadEnter") {
28 return;
29 }
30 hub.send(JSON.stringify({"data": target.value}));
31 target.value = "";
32 }
33 )
34 );
35 input_div.append(document.createTextNode(" "));
36 input_div.append(change_name_button(hub));
37
38 document.body.append(common.tag("div"));
39 document.body.append(input_div);
40 }
41
42 function setup_change_name(hub) {
43 var div = common.tag("div");
44 div.append(document.createTextNode("Enter name: "));
45 div.append(
46 common.input_with_keydown_event(
47 function (event, target, keycode) {
48 if (keycode !== "Enter" && keycode !== "NumpadEnter") {
49 return;
50 }
51 if (input_div.childNodes[0] !== input_div.children[0]) {
52 input_div.childNodes[0].remove();
53 }
54 input_div.insertBefore(
55 document.createTextNode(target.value + " "), input_div.children[0]
56 );
57 hub.send(JSON.stringify({"action": "set_name", "name": target.value}));
58 div.remove();
59 input_div.style.display = "";
60 input_div.children[0].focus();
61 }
62 )
63 )
64 document.body.append(div);
65 input_div.style.display = "none";
66 div.children[0].focus();
67 }
68
69 function open() {
70 setup_chat(this);
71 write("connected to " + ws_uri);
72 setup_change_name(this);
73 }
74
75 function close() {
76 write("connection lost");
77 input_div.remove();
78 }
79
80 function message(msg) {
81 var obj = JSON.parse(msg.data);
82 if (obj.action === "join" || obj.action === "leave") {
83 write("[action]: " + obj.name + " " + obj.action + "s");
84 } else if (obj.action == "set_name") {
85 write(
86 "[action]: " +
87 obj.old_name +
88 " changes name to " +
89 obj.name
90 );
91 } else if (obj.hasOwnProperty("data")) {
92 write(obj.name + ": " + obj.data);
93 }
94 }
95
96 common.setup(function () {new common.HubClient(ws_uri, open, close, message)});
97 })();