summary refs log tree commit diff
path: root/v2
diff options
context:
space:
mode:
Diffstat (limited to 'v2')
-rw-r--r--v2/client.ts31
-rw-r--r--v2/elements.ts20
-rw-r--r--v2/screen.ts2
-rw-r--r--v2/screen/home.ts27
-rw-r--r--v2/screen/login.ts15
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",