diff options
| author | Syndamia <kamen.d.mladenov@protonmail.com> | 2021-07-09 09:30:49 +0300 |
|---|---|---|
| committer | Syndamia <kamen.d.mladenov@protonmail.com> | 2021-07-09 09:30:49 +0300 |
| commit | 4fe16d9b4949304984badf85801cdccea847f06c (patch) | |
| tree | 74d632106a9e8f2ed56b104d58c45e959c512082 | |
| parent | 84b81badbb4fab7a735b82e28d5cd47ecfbecb64 (diff) | |
| download | ctfc-4fe16d9b4949304984badf85801cdccea847f06c.tar ctfc-4fe16d9b4949304984badf85801cdccea847f06c.tar.gz ctfc-4fe16d9b4949304984badf85801cdccea847f06c.zip | |
Reworked ui to print it's own values (than having windows print those values)
| -rw-r--r-- | go-src/ui/ui.go | 41 | ||||
| -rw-r--r-- | go-src/windows.go | 64 |
2 files changed, 52 insertions, 53 deletions
diff --git a/go-src/ui/ui.go b/go-src/ui/ui.go index a35eac0..1a362e6 100644 --- a/go-src/ui/ui.go +++ b/go-src/ui/ui.go @@ -39,16 +39,19 @@ const ( var scanner = bufio.NewScanner(os.Stdin) // Returns an error box -func ErrorBox(message string) (box string) { +func ErrorBox(message string) { + var box string // 2+len because message length doesn't accomodate the spaces between the left and right border box += fmt.Sprintf("%c%v%c\n", boxErrTopLeftCorner, utils.RepeatRune(boxErrHorLine, 2+len(message)), boxErrTopRightCorner) box += fmt.Sprintf("%c %v %c\n", boxErrVertLine, message, boxErrVertLine) box += fmt.Sprintf("%c%v%c", boxErrBottomLeftCorner, utils.RepeatRune(boxErrHorLine, 2+len(message)), boxErrBottomRightCorner) - return + fmt.Println(box) } // Returns a normal box, most commonly used for the menu items -func NormalBox(railed bool, messages ...string) (box string) { +func NormalBox(railed bool, messages ...string) { + var box string + message := strings.Join(messages, " │ ") var messagesLengths []int @@ -93,38 +96,36 @@ func NormalBox(railed bool, messages ...string) (box string) { // Replaces the border character on the bottom with one that connects to the middle broder: └───────────┴───────────┘ box = utils.ReplaceAtIndex(box, boxHorUpLine, indBot) } - return + fmt.Println(box) } -func TextField(message string) string { - return fmt.Sprintf("%c%c %v", boxVertRightLine, textRune, message) +func TextField(message string) { + fmt.Printf("%c%c %v\n", boxVertRightLine, textRune, message) } func InputField(specification string) string { - return fmt.Sprintf("%c%c %v : ", boxBottomLeftCorner, inputRune, specification) + fmt.Printf("%c%c %v : ", boxBottomLeftCorner, inputRune, specification) + scanner.Scan() + return scanner.Text() } -func InputFieldFilled(specification string, input string) string { - return utils.ReplaceAtIndex(InputField(specification), boxVertRightLine, 0) + input +func InputFieldFilled(specification string, input string) { + fmt.Printf("%c%c %v : %v\n", boxVertRightLine, inputRune, specification, input) } -func NumberedFields(messages ...string) (result string) { +func NumberedFields(messages ...string) { + var result string for i, v := range messages { result += fmt.Sprintf("%c%v %v\n", boxVertRightLine, i+1, v) } result = result[:len(result)-1] - return -} - -func GetInput() string { - scanner.Scan() - return scanner.Text() + fmt.Println(result) } -func PageField(current int, max int) string { - return fmt.Sprintf("├─Page %v/%v─┘", current, max) +func PageField(current int, max int) { + fmt.Printf("├─Page %v/%v─┘\n", current, max) } -func EmptyLine() string { - return string(boxVertLine) +func EmptyLine() { + fmt.Println(string(boxVertLine)) } diff --git a/go-src/windows.go b/go-src/windows.go index a92d239..148ee96 100644 --- a/go-src/windows.go +++ b/go-src/windows.go @@ -13,9 +13,9 @@ import ( func StartupWindow(...string) { clearScreen() - fmt.Println(ui.NormalBox(true, "Login", "Register")) - fmt.Print(ui.InputField("[L/R]")) - command := strings.ToLower(ui.GetInput()) + ui.NormalBox(true, "Login", "Register") + input := ui.InputField("[L/R]") + command := strings.ToLower(input) if command == "l" { defer loginWindow() @@ -29,21 +29,21 @@ func StartupWindow(...string) { func loginWindow(values ...string) { clearScreen() - fmt.Println(ui.NormalBox(true, "Login")) + ui.NormalBox(true, "Login") + + var input string switch len(values) { case 0: - fmt.Print(ui.InputField("Username")) + input = ui.InputField("Username") case 1: - fmt.Println(ui.InputFieldFilled("Username", values[0])) - fmt.Print(ui.InputField("Password")) + ui.InputFieldFilled("Username", values[0]) + input = ui.InputField("Password") } - val := ui.GetInput() - if len(values) == 0 { - defer loginWindow(val) - } else if logInUser(values[0], val) { + defer loginWindow(input) + } else if logInUser(values[0], input) { defer chatsWindow() } else { defer showError(invalidCredentials, loginWindow, values...) @@ -53,28 +53,27 @@ func loginWindow(values ...string) { func registerWindow(values ...string) { clearScreen() - fmt.Println(ui.NormalBox(true, "Register")) + ui.NormalBox(true, "Register") - var validationF func(string) bool + var inputidationF func(string) bool var fieldName, specification string switch len(values) { case 0: - validationF, fieldName, specification = stringValidUsername, "Username", "[A-z, 0-9, *, ., _, -; at least 1 letter]" + inputidationF, fieldName, specification = stringValidUsername, "Username", "[A-z, 0-9, *, ., _, -; at least 1 letter]" case 1: - fmt.Println(ui.InputFieldFilled("Username", values[0])) - validationF, fieldName, specification = stringValidPassword, "Password", "[5-40 characters; at least 1 number]" + ui.InputFieldFilled("Username", values[0]) + inputidationF, fieldName, specification = stringValidPassword, "Password", "[5-40 characters; at least 1 number]" case 2: - fmt.Println(ui.InputFieldFilled("Username", values[0])) - fmt.Println(ui.InputFieldFilled("Password", values[1])) - validationF, fieldName, specification = stringValidName, "Name", "[2-60 characters]" + ui.InputFieldFilled("Username", values[0]) + ui.InputFieldFilled("Password", values[1]) + inputidationF, fieldName, specification = stringValidName, "Name", "[2-60 characters]" } - fmt.Print(ui.InputField(fieldName + " " + specification)) - val := ui.GetInput() + input := ui.InputField(fieldName + " " + specification) - if validationF(val) { - values = append(values, val) + if inputidationF(input) { + values = append(values, input) // When user has entered all required values if len(values) == 3 { @@ -92,20 +91,19 @@ func registerWindow(values ...string) { func chatsWindow(values ...string) { clearScreen() - fmt.Println(ui.NormalBox(true, "Direct Messages", "Account", "Logout")) - fmt.Println(ui.PageField(0, 0)) - fmt.Println(ui.EmptyLine()) + ui.NormalBox(true, "Direct Messages", "Account", "Logout") + ui.PageField(0, 0) + ui.EmptyLine() if len(values) > 0 { if values[len(values)-1] == "ShowHelp" { - fmt.Println(ui.TextField("Chats page options: [(D)irect messages/(A)ccount/(L)ogout/(<) for previous page/(>) for next page/(C) for create chat/(name) for go to chat room by name/(number) for go to chat room by number/(H)elp]")) + ui.TextField("Chats page options: [(D)irect messages/(A)ccount/(L)ogout/(<) for previous page/(>) for next page/(C) for create chat/(name) for go to chat room by name/(number) for go to chat room by number/(H)elp]") } } - fmt.Print(ui.InputField("[D/A/L/</>/C/E/name/number/H]")) - val := ui.GetInput() + input := ui.InputField("[D/A/L/</>/C/E/name/number/H]") - handled := handleInputActions(val, true, + handled := handleInputActions(input, true, inputAction{"H", chatsWindow, []string{"ShowHelp"}}, ) if !handled { @@ -114,7 +112,7 @@ func chatsWindow(values ...string) { } type inputAction struct { - value string + inputue string execute func(...string) args []string } @@ -129,7 +127,7 @@ func handleInputActions(input string, handleNav bool, ia ...inputAction) bool { ) } for _, v := range ia { - if input == v.value { + if input == v.inputue { defer v.execute(v.args...) return true } @@ -142,7 +140,7 @@ var clearNext = true func showError(message string, callback func(...string), callbackData ...string) { clearScreen() - fmt.Println(ui.ErrorBox(message)) + ui.ErrorBox(message) clearNext = false defer callback(callbackData...) |
