source/logic/control.ts
6faf71a8
 namespace ns_control
 {
 	
 	/**
 	 * ugly hack to prevent multiple listener addition
 	 */
 	function register_listener
 	(
 		dom_element: HTMLElement,
 		eventname: string,
 		handler: (event)=>void
 	): void
 	{
 		const classname: string = `has_listener_for_${eventname}`;
 		if (! dom_element.classList.contains(classname))
 		{
 			dom_element.addEventListener(eventname, handler);
 			dom_element.classList.add(classname);
 		}
 		else
 		{
 			// do nothing
 		}
 	}
 	
 	
 	/**
 	 * sets up the control
 	 */
 	export function setup
 	(
 		conf: type_conf,
 		model: type_model
 	): void
 	{
 		// connect
 		{
 			register_listener
 			(
 				document.querySelector<HTMLFormElement>("#connect > form"),
 				"submit",
 				(e) =>
 				{
 					e.preventDefault();
 					const nickname: string = document.querySelector<HTMLInputElement>("#nickname").value;
 					const channel_names: Array<string> = document.querySelector<HTMLInputElement>("#channel").value.split(",");
 					ns_model.connect(conf, model, nickname, channel_names);
 				}
 			);
 		}
 		// disconnect
 		{
 			register_listener
 			(
 				document.querySelector<HTMLButtonElement>("#disconnect"),
 				"click",
 				(e) =>
 				{
 					ns_model.disconnect(conf, model);
 				}
 			);
 		}
 		// send
 		{
 			register_listener
 			(
 				document.querySelector("#main > form"),
 				"submit",
 				(e) =>
 				{
 					e.preventDefault();
 					const content: string = document.querySelector<HTMLInputElement>("#content").value;
 					ns_model.send(conf, model, content);
 				}
 			);
 		}
 		// switch spot
 		{
 			document.querySelectorAll(".spot").forEach
 			(
 				(dom_spot) =>
 				{
 					register_listener
 					(
 						(dom_spot as HTMLElement),
 						"click",
 						(e) =>
 						{
 							const spot: type_spot = JSON.parse(dom_spot.getAttribute("rel"));
 							ns_model.set_active(model, spot);
 						}
 					);
 				}
 			);
 		}
de5e1e21
 		// open query
 		{
 			document.querySelectorAll(".user").forEach
 			(
 				(dom_user) =>
 				{
 					register_listener
 					(
 						(dom_user as HTMLElement),
 						"click",
 						(e) =>
 						{
 							const user_name: string = JSON.parse(dom_user.getAttribute("rel"));
 							ns_model.open_query(model, user_name);
 						}
 					);
 				}
 			);
 		}
6faf71a8
 	}
 	
 }