diff options
Diffstat (limited to 'v2')
-rw-r--r-- | v2/client.ts | 31 | ||||
-rw-r--r-- | v2/elements.ts | 20 | ||||
-rw-r--r-- | v2/screen.ts | 2 | ||||
-rw-r--r-- | v2/screen/home.ts | 27 | ||||
-rw-r--r-- | v2/screen/login.ts | 15 |
5 files changed, 90 insertions, 5 deletions
diff --git a/v2/client.ts b/v2/client.ts new file mode 100644 index 0000000..eedc578 --- /dev/null +++ b/v2/client.ts @@ -0,0 +1,31 @@ +import { Screen } from "./screen.ts"; + +export let token: string; +export let account; + +let screen: Screen; + +export function setScreen(screenN: Screen) { + screen = screenN +} + +export async function login(username: string, password: string) { + const authr = await (await fetch("https://api.meower.org/auth/login", { + method: "post", + headers: { + "content-type": "application/json" + }, + body: JSON.stringify({ + username, + password + }) + })).json(); + + token = authr.token; + account = authr.account +} + +export async function loadHome() { + const home = (await (await fetch("https://api.meower.org/home")).json()).autoget; + +} \ No newline at end of file diff --git a/v2/elements.ts b/v2/elements.ts index 530ecbb..56ef7da 100644 --- a/v2/elements.ts +++ b/v2/elements.ts @@ -27,6 +27,8 @@ export class Input extends Element { focusable: boolean = true; value: string = ""; + br = false; + isPassword: boolean = false; render(): void { @@ -53,24 +55,36 @@ export class Input extends Element { this.value = prevValue.substring(0, prevValue.length - 1) break; } + this.screen.render() return; } if (!key.sequence || key.sequence.length > 1 || key.name != key.sequence?.toLowerCase()) return; this.value += key.sequence; + this.screen.render() } - constructor(isPassword: boolean, ) { + constructor(isPassword: boolean = false, br: boolean = false) { super() + this.br = br this.isPassword = isPassword } } export class Button extends Text { focusable: boolean = true; - constructor (text: string) { - super(text) + onclick: ()=>void; + constructor (text: string, onclick=()=>{}) { + super(text); + this.onclick = onclick } render(): void { console.log(`(${(this.focused ? chalk.bgWhite : (a:string)=>a)(this.text)})`) } + + onkeypres(key: Key): void { + //@ts-ignore + if (["return", "space"].includes(key.name)) { + this.onclick.call(this.screen) + } + } } diff --git a/v2/screen.ts b/v2/screen.ts index 0ff6f98..2d90dde 100644 --- a/v2/screen.ts +++ b/v2/screen.ts @@ -17,6 +17,7 @@ export class Screen { elements: Map<string, Element> = new Map<string, Element>(); name: string; focusedElementId: string = ''; + logs = logs constructor(name: string) { this.name = name; @@ -45,7 +46,6 @@ export class Screen { if (!screen.focusedElementId) return; const focusedElement = screen.getFocusedElement(); focusedElement?.onkeypres(key) - this.render() } getKeypressHandler(screen: Screen) { diff --git a/v2/screen/home.ts b/v2/screen/home.ts new file mode 100644 index 0000000..6fb4f24 --- /dev/null +++ b/v2/screen/home.ts @@ -0,0 +1,27 @@ +import { ElemType } from "../screenbuilder.ts"; +import { Screen } from "../screen.ts"; +import * as client from "../client.ts" + +export default { + elements: [ + { + type: ElemType.TextElem, + id: 'home', + data: ["Username: \n"] + }, + { + type: ElemType.InputElem, + id: 'msg-input', + data: [false, false] + }, + { + type: ElemType.ButtonElem, + id: 'done-btn', + data: ["Send", async function (this: Screen) { + + }] + } + ], + focus: "msg-input", + name: 'home' +} \ No newline at end of file diff --git a/v2/screen/login.ts b/v2/screen/login.ts index c9e4fec..525127b 100644 --- a/v2/screen/login.ts +++ b/v2/screen/login.ts @@ -1,4 +1,8 @@ import { ElemType } from "../screenbuilder.ts"; +import { Screen } from "../screen.ts"; +import * as client from "../client.ts" +import { build } from "../screenbuilder.ts"; +import HomeScreen from "./home.ts"; export default { elements: [ @@ -25,7 +29,16 @@ export default { { type: ElemType.ButtonElem, id: 'done-btn', - data: ["Done"] + data: ["Done", async function (this: Screen) { + this.off() + this.logs.push(`clicked button`) + console.clear() + console.log("logging in...") + //@ts-ignore + await client.login(this.elements.get("username-input").value, this.elements.get("password-input").value) + build(HomeScreen); + client + }] } ], focus: "username-input", |