Browse code

[add] possibility to open queries

Christian Fraß authored on 20/11/2021 15:20:07
Showing 1 changed files
... ...
@@ -93,6 +93,25 @@ namespace ns_control
93 93
 				}
94 94
 			);
95 95
 		}
96
+		// open query
97
+		{
98
+			document.querySelectorAll(".user").forEach
99
+			(
100
+				(dom_user) =>
101
+				{
102
+					register_listener
103
+					(
104
+						(dom_user as HTMLElement),
105
+						"click",
106
+						(e) =>
107
+						{
108
+							const user_name: string = JSON.parse(dom_user.getAttribute("rel"));
109
+							ns_model.open_query(model, user_name);
110
+						}
111
+					);
112
+				}
113
+			);
114
+		}
96 115
 	}
97 116
 	
98 117
 }
Browse code

[mov] source/*.ts -> source/logic/*.ts

Christian Fraß authored on 20/11/2021 15:04:11
Showing 1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,98 @@
1
+namespace ns_control
2
+{
3
+	
4
+	/**
5
+	 * ugly hack to prevent multiple listener addition
6
+	 */
7
+	function register_listener
8
+	(
9
+		dom_element: HTMLElement,
10
+		eventname: string,
11
+		handler: (event)=>void
12
+	): void
13
+	{
14
+		const classname: string = `has_listener_for_${eventname}`;
15
+		if (! dom_element.classList.contains(classname))
16
+		{
17
+			dom_element.addEventListener(eventname, handler);
18
+			dom_element.classList.add(classname);
19
+		}
20
+		else
21
+		{
22
+			// do nothing
23
+		}
24
+	}
25
+	
26
+	
27
+	/**
28
+	 * sets up the control
29
+	 */
30
+	export function setup
31
+	(
32
+		conf: type_conf,
33
+		model: type_model
34
+	): void
35
+	{
36
+		// connect
37
+		{
38
+			register_listener
39
+			(
40
+				document.querySelector<HTMLFormElement>("#connect > form"),
41
+				"submit",
42
+				(e) =>
43
+				{
44
+					e.preventDefault();
45
+					const nickname: string = document.querySelector<HTMLInputElement>("#nickname").value;
46
+					const channel_names: Array<string> = document.querySelector<HTMLInputElement>("#channel").value.split(",");
47
+					ns_model.connect(conf, model, nickname, channel_names);
48
+				}
49
+			);
50
+		}
51
+		// disconnect
52
+		{
53
+			register_listener
54
+			(
55
+				document.querySelector<HTMLButtonElement>("#disconnect"),
56
+				"click",
57
+				(e) =>
58
+				{
59
+					ns_model.disconnect(conf, model);
60
+				}
61
+			);
62
+		}
63
+		// send
64
+		{
65
+			register_listener
66
+			(
67
+				document.querySelector("#main > form"),
68
+				"submit",
69
+				(e) =>
70
+				{
71
+					e.preventDefault();
72
+					const content: string = document.querySelector<HTMLInputElement>("#content").value;
73
+					ns_model.send(conf, model, content);
74
+				}
75
+			);
76
+		}
77
+		// switch spot
78
+		{
79
+			document.querySelectorAll(".spot").forEach
80
+			(
81
+				(dom_spot) =>
82
+				{
83
+					register_listener
84
+					(
85
+						(dom_spot as HTMLElement),
86
+						"click",
87
+						(e) =>
88
+						{
89
+							const spot: type_spot = JSON.parse(dom_spot.getAttribute("rel"));
90
+							ns_model.set_active(model, spot);
91
+						}
92
+					);
93
+				}
94
+			);
95
+		}
96
+	}
97
+	
98
+}