From 22a2150eef88430f9d9d5491a002e23e7813ac0c Mon Sep 17 00:00:00 2001 From: wlodekm Date: Sat, 9 Nov 2024 16:37:43 +0200 Subject: v2 progress --- deno.lock | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++- v2/client.ts | 31 +++++++++++++++++++++++++++++ v2/elements.ts | 20 ++++++++++++++++--- v2/screen.ts | 2 +- v2/screen/home.ts | 27 ++++++++++++++++++++++++++ v2/screen/login.ts | 15 +++++++++++++- 6 files changed, 146 insertions(+), 6 deletions(-) create mode 100644 v2/client.ts create mode 100644 v2/screen/home.ts diff --git a/deno.lock b/deno.lock index 58cf564..f598709 100644 --- a/deno.lock +++ b/deno.lock @@ -5,7 +5,62 @@ "https://deno.land/x/crayon@3.3.3/src/conversions.ts": "9bfd3b1fbe412bcba092890ac558b6beaad4c3aa399cd99d45fadb324d28afd6", "https://deno.land/x/crayon@3.3.3/src/crayon.ts": "6b237baa08a31c903436e040afd2228a7fffaa5d11dddc58e3c402f79b3c1d04", "https://deno.land/x/crayon@3.3.3/src/styles.ts": "aa588b57b2c0482dc5c6f53109b4287831a9827c0aeef9a88129beae1172c1ee", - "https://deno.land/x/crayon@3.3.3/src/util.ts": "af8884a917488de76ac0c2b92482093ade74514ece77a4c64e5eb5b0f6ed68e6" + "https://deno.land/x/crayon@3.3.3/src/util.ts": "af8884a917488de76ac0c2b92482093ade74514ece77a4c64e5eb5b0f6ed68e6", + "https://deno.land/x/tui@2.1.11/mod.ts": "b32347385f2efc7dd90a9e5f6386fded9bde505e3f1c4b07b8509c77206d15a6", + "https://deno.land/x/tui@2.1.11/src/canvas/box.ts": "3f6a41af65942b069795d895c2a73d039a83ba35c01b5236ea88d1de65ba3ebf", + "https://deno.land/x/tui@2.1.11/src/canvas/canvas.ts": "31daa080882956f19f5bf8a6b52f7a946ebc34bdba103b007ce4e73c2b922409", + "https://deno.land/x/tui@2.1.11/src/canvas/draw_object.ts": "2b8a48f10c343aee61d9dc7f00ea7917119ea41374a994e1db7b5b1ee188f0f8", + "https://deno.land/x/tui@2.1.11/src/canvas/mod.ts": "9da429bfb1d4f53eed661c3e2a2ae4b610380526597aa5f35a6604b810a83ac7", + "https://deno.land/x/tui@2.1.11/src/canvas/text.ts": "e6c0f5ecb985a037e55397810bc212bae206240acd3e2b15fb786ae2746abdea", + "https://deno.land/x/tui@2.1.11/src/component.ts": "d7a35cd1a4bc8a6177b047595c86e1df3418b340701e343ee83a08ac7a8005de", + "https://deno.land/x/tui@2.1.11/src/components/box.ts": "bc0be923353e6b146dd5275097d5c12606f4e966cf9e1386f5482c2d49320be7", + "https://deno.land/x/tui@2.1.11/src/components/button.ts": "90128d9f919a4506c2324a2c49c029f7fb7dd4872ea2b7df45505a01c125d660", + "https://deno.land/x/tui@2.1.11/src/components/checkbox.ts": "d185ceb9a3508b62311fb9b553e4da4282932a763c4494e76f1f221afbf95e9c", + "https://deno.land/x/tui@2.1.11/src/components/combobox.ts": "3e52c6c41afb12d6721ebe9a2c22cbaa4ccba8f752b018762c866403985eaf33", + "https://deno.land/x/tui@2.1.11/src/components/frame.ts": "e2f1a5c67a52a3a06243af461f8418ebf68e3c84c9c3ac6a59d6996e88941d11", + "https://deno.land/x/tui@2.1.11/src/components/input.ts": "e1df616d36b2d1df3202947e2cd5176bc9c7b966219db0ed2cc2932a112b8daf", + "https://deno.land/x/tui@2.1.11/src/components/label.ts": "c6d82665745a0251f7cfcc50ca96163faf8f82cd4e54fe82f4df9558043d8ef4", + "https://deno.land/x/tui@2.1.11/src/components/mod.ts": "3b43cf7fe523a877a2fddbb7c42d64db886debe491a6bc664c0d67b1ed3ef9a5", + "https://deno.land/x/tui@2.1.11/src/components/progressbar.ts": "3e58aa1d00b59149ba6309f4bf23bde6151fcac264ac3294369181cabd9faaba", + "https://deno.land/x/tui@2.1.11/src/components/slider.ts": "d88565a13eb9f2c55d1343889f0bb9af525edc1bd200c8ba43b5b174efec9cbe", + "https://deno.land/x/tui@2.1.11/src/components/table.ts": "1ef221fa3442f9c619ac3ea63051913b947e379efdf1567d8c611561ecf8a032", + "https://deno.land/x/tui@2.1.11/src/components/text.ts": "ea9b427d0bd056cded424bebf73ece62c3b7257651db80b82a51482a801a4f4f", + "https://deno.land/x/tui@2.1.11/src/components/textbox.ts": "c8799b13c0fc8ba22d9a0dcf4d8917abf991f73a8e0475ea07c9638eeb524f8d", + "https://deno.land/x/tui@2.1.11/src/controls.ts": "e0e91f61a8a73fb044ce980fd3d070407c2f950635cbce73d97f060ef19a780e", + "https://deno.land/x/tui@2.1.11/src/event_emitter.ts": "e4ee1de2037c89952c5c4c54dc336b7992024f0cb41c9e49229944e773386824", + "https://deno.land/x/tui@2.1.11/src/input.ts": "4ddc4049718847b2f76c2d022b740694ed50f958c2c42bb3a2eacfe0b0d83b0d", + "https://deno.land/x/tui@2.1.11/src/input_reader/decoders/keyboard.ts": "70d4f54605a650612601e654bc28a5d4260374a893e27b8a86fe7181cb626377", + "https://deno.land/x/tui@2.1.11/src/input_reader/decoders/mouse.ts": "a119c6261a27fb9b5e1711ba3d5161c45eac5615ea0aa739e4e6bca759434e6e", + "https://deno.land/x/tui@2.1.11/src/input_reader/mod.ts": "4213a920c69fd51badd1091fe7c61eff1bd1ead32659785c16f976ae377491cc", + "https://deno.land/x/tui@2.1.11/src/input_reader/types.ts": "c940a6d656b2fbdc051c2e0508f8eeefa322dd16e60fc6a3bac8d1e9337f7d6c", + "https://deno.land/x/tui@2.1.11/src/layout/errors.ts": "3df98a8f7747657fd252f602b26e9b5ee130dbfb236bcb4b2d2c912d7ae1eef9", + "https://deno.land/x/tui@2.1.11/src/layout/grid_layout.ts": "7b2fca94d1a074c61d838c36800dca47f518f720c6539a33d0ad674081a29a76", + "https://deno.land/x/tui@2.1.11/src/layout/horizontal_layout.ts": "e2ea27519c44c124cb228f19d4b14aa314e7db2cc92ef83fccfa146ced29d4e4", + "https://deno.land/x/tui@2.1.11/src/layout/mod.ts": "65381a8dd7e8f6287742ebeffef866ae98932d16daf3ea3325f0180b37e327b8", + "https://deno.land/x/tui@2.1.11/src/layout/types.ts": "ebc78ef4adbf802a49f5319474d81183a2b9edc2947443d9f40f23c4730e16f3", + "https://deno.land/x/tui@2.1.11/src/layout/vertical_layout.ts": "41f1ec4b897a0f45478b6392f0c74d0c010a74693b99f36f532c85d5525dfca0", + "https://deno.land/x/tui@2.1.11/src/signals/computed.ts": "824428cfda7c9e4a6aed8caee32a9aa62cd257fac9e7ca64d54c99a15ea56019", + "https://deno.land/x/tui@2.1.11/src/signals/dependency_tracking.ts": "b89e933a912e8c32881e13ba1555201ec22cc0be69600862ff824f72f1bd6d55", + "https://deno.land/x/tui@2.1.11/src/signals/effect.ts": "b478ca6469a151e93970679108e01a786b6e121023294d15b7293476161ec049", + "https://deno.land/x/tui@2.1.11/src/signals/flusher.ts": "b47eeca9547a39487bef56ab82272f050883474995d5e92191296aec936180cb", + "https://deno.land/x/tui@2.1.11/src/signals/lazy_computed.ts": "b4653efd855ce920657510b4cd086c58a8c72be6511465e3234f4e0b134bb9c6", + "https://deno.land/x/tui@2.1.11/src/signals/lazy_effect.ts": "b8bdebf29d4b5ae204bc8c0300f03d9c60ff097aef28e0df6515665497b919f0", + "https://deno.land/x/tui@2.1.11/src/signals/mod.ts": "e76b1303c74c257956d29f9169f3f12af410a0e8540c7a467e5405ba839cc431", + "https://deno.land/x/tui@2.1.11/src/signals/reactivity.ts": "8520655a0b948d979b1b3450139695726c1dfeb46b46d49b8e4159fe4651368d", + "https://deno.land/x/tui@2.1.11/src/signals/signal.ts": "5f351000a3316196ac3836fd9f3ef2a708aec85713df720a01c853d4859060be", + "https://deno.land/x/tui@2.1.11/src/signals/types.ts": "e04d088a849a58d184c30420fec9ab3726985e3bcbe2cdc1b4bbc218fb299dbe", + "https://deno.land/x/tui@2.1.11/src/theme.ts": "87f3da7e6a5bbbeb04c3c5384069225c244bcce0bac833a87828c5208af07cfc", + "https://deno.land/x/tui@2.1.11/src/tui.ts": "9b9bb4da296e96aadbe846520446d76570cf6105dcbc3c59e26a4301b4c6d2f4", + "https://deno.land/x/tui@2.1.11/src/types.ts": "7e39e8c59a1d28e379e54455dd7d7bb1a349191970d9af8d47a74b590e0de401", + "https://deno.land/x/tui@2.1.11/src/utils/ansi_codes.ts": "be83f249ab09d33b64540adda5191c58580d386cc7627b8d10ea3363c9a6d23d", + "https://deno.land/x/tui@2.1.11/src/utils/async.ts": "3f3bfe526c05467313237c434bc951a02344935dba61fe7b4e14d818d03ba1ca", + "https://deno.land/x/tui@2.1.11/src/utils/component.ts": "a7f5396b480c7ed437c5e08ec56c3e5c85a55963ee8520c2e5cc7a185577f1a3", + "https://deno.land/x/tui@2.1.11/src/utils/mod.ts": "4daef102e2406625f32faf08d238b702a26b3dc87232c35e97a215b9dbf9e781", + "https://deno.land/x/tui@2.1.11/src/utils/numbers.ts": "9d4322b7a184e111184f37507ccdf0d4a29ee7eb8f2ce8f942f078bd165f8941", + "https://deno.land/x/tui@2.1.11/src/utils/signals.ts": "a78893aa2e379468df65045a4d1f45e0111237b24e18c19bf5a92b6ee9074c4a", + "https://deno.land/x/tui@2.1.11/src/utils/sorted_array.ts": "d7b55e9c6489102fbee46d632040449f960f2ed3ae0d6bc3326e6d6ec1450d97", + "https://deno.land/x/tui@2.1.11/src/utils/strings.ts": "0f7d24072e3d2ed4993f0f2692f148b0af4d9b7a665193dec835101af4dabf7b", + "https://deno.land/x/tui@2.1.11/src/view.ts": "77c9dfdb3632f95c2456036c5e30f90cfbbad62cbb4f370cba48b992523aa619" }, "workspace": { "packageJson": { 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 = new Map(); 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", -- cgit 1.4.1-2-gfad0