de5e1e21de98b42a2876fcd3ba3334209249a8e2
Christian Fraß [mod] clean model-view-control

Christian Fraß authored 2 years ago

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

Christian Fraß authored 2 years ago

source/logic/control.ts  96) 		// open query
source/logic/control.ts  97) 		{
source/logic/control.ts  98) 			document.querySelectorAll(".user").forEach
source/logic/control.ts  99) 			(
source/logic/control.ts 100) 				(dom_user) =>
source/logic/control.ts 101) 				{
source/logic/control.ts 102) 					register_listener
source/logic/control.ts 103) 					(
source/logic/control.ts 104) 						(dom_user as HTMLElement),
source/logic/control.ts 105) 						"click",
source/logic/control.ts 106) 						(e) =>
source/logic/control.ts 107) 						{
source/logic/control.ts 108) 							const user_name: string = JSON.parse(dom_user.getAttribute("rel"));
source/logic/control.ts 109) 							ns_model.open_query(model, user_name);
source/logic/control.ts 110) 						}
source/logic/control.ts 111) 					);
source/logic/control.ts 112) 				}
source/logic/control.ts 113) 			);
source/logic/control.ts 114) 		}