summary refs log tree commit diff
path: root/v2/screen/home.ts
blob: 4de3c5b382a94caf431d7d05dff3cb4586c3c7c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import { ElemType } from "../screenbuilder.ts";
import { Screen } from "../screen.ts";
import type { Input, Element, Text } from "../elements.ts";
import * as client from "../client.ts"

export default {
    elements: [
        {
            type: ElemType.TextElem,
            id: 'home',
            data: ["Loading home posts...\n", function (this: Text, text: string) {
                const msgInput: Input = this.screen.elements.get("msg-input") as Input;
                const inputValueHeight = msgInput.value.split("\n").length + 1;
                const termHeight = process.stdout.rows;
                const termWidth  = process.stdout.columns;

                let splitText = this.text.split("\n");
                splitText = splitText.map(t => t.replace(new RegExp(`([^]){${termWidth}}`, "g"),"$1\n"));
                splitText = splitText.join("\n").split("\n")

                splitText = splitText.slice(-(termHeight - inputValueHeight - 1));

                return splitText.join("\n")
            }]
        },
        {
            type: ElemType.HR,
            id: 'hr',
            data: []
        },
        {
            type: ElemType.InputElem,
            id: 'msg-input',
            data: [false, false, true]
        },
        {
            type: ElemType.ButtonElem,
            id: 'done-btn',
            data: ["Send", async function (this: Screen) {
                const msgInput: Input = this.elements.get('msg-input') as Input
                client.sendHome(msgInput.value);
                msgInput.value = ""
                this.render()
            }]
        }
    ],
    focus: "msg-input",
    name: 'home',
    onload (screen: Screen) {
        client.setScreen(screen)
        client.loadHome(screen)
    }
}