[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) }
|
[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) }
|