diff options
Diffstat (limited to 'src/modules')
| -rw-r--r-- | src/modules/helpers.ts | 41 | ||||
| -rw-r--r-- | src/modules/messages.ts | 47 |
2 files changed, 88 insertions, 0 deletions
diff --git a/src/modules/helpers.ts b/src/modules/helpers.ts new file mode 100644 index 0000000..862f121 --- /dev/null +++ b/src/modules/helpers.ts @@ -0,0 +1,41 @@ +export default class Helpers { + //@ts-expect-error + readonly chatListScroll = $("#chatlist").tinyscrollbar(); + + isColor(strColor: string) { + const s = new Option().style; + s.color = strColor; + return s.color !== ""; + } + + suicide(msg: string): void { + document.body.innerHTML = /* html */ ` + <div class="text-center" style="margin: 45vh auto; font-size: 3em;">${msg}</div> + `; + throw new Error( + "This page has committed suicide by design, that's a feature!" + ); + } + + updateScrollbar(update: string) { + $(this.chatListScroll).data().plugin_tinyscrollbar.update(update); + } + + get getRandomColor(): string { + return "#" + (Math.random().toString(16) + "000000").substring(2, 8); + } + + get getUsername(): string { + let username = prompt("Gimme your name: "); + if (username === null) { + this.suicide("You should give me your name!"); + throw new Error("NoNameError"); + } + username = username.trim(); + if (username === "Server") { + this.suicide("That name is illegal!"); + throw new Error("IllegalNameError"); + } + return username; + } +} diff --git a/src/modules/messages.ts b/src/modules/messages.ts new file mode 100644 index 0000000..4a4b48a --- /dev/null +++ b/src/modules/messages.ts @@ -0,0 +1,47 @@ +// import Irc from "@/index"; + +export default class Messages { + readonly url = "http://localhost:5000/"; + + sendMessage(msg: Message): void { + fetch(this.url + "send", { + method: "POST", + headers: { + Accept: "application/json", + "Content-Type": "application/json", + }, + body: JSON.stringify(msg), + }); + } + + async addMessage(msg: Message): Promise<void> { + const board = $(".overview")[0], + time = new Date(msg.time), + div = document.createElement("div"), + spans = [ + document.createElement("span"), + document.createElement("span"), + document.createElement("span"), + ]; + + let min = new Date().getMinutes().toString(); + min = min.length === 1 ? "0" + min : min; + + spans[0].innerText = `[${time.getHours()}:${min}] `; + spans[1].innerText = `<@${msg.username}> `; + spans[1].style.color = msg.color; + spans[2].innerText = msg.text; + + // @ts-expect-error + $(spans[2]).emoticonize(); + spans.forEach(span => div.appendChild(span)); + + board.appendChild(div); + } +} +export interface Message { + text: string; + color: string; + username: string; + time: number; +} |
