aboutsummaryrefslogtreecommitdiff
path: root/go-src/windows.go
diff options
context:
space:
mode:
Diffstat (limited to 'go-src/windows.go')
-rw-r--r--go-src/windows.go51
1 files changed, 42 insertions, 9 deletions
diff --git a/go-src/windows.go b/go-src/windows.go
index d442287..183849e 100644
--- a/go-src/windows.go
+++ b/go-src/windows.go
@@ -10,6 +10,8 @@ import (
"gitlab.com/Syndamia/ctfc/go-src/ui"
)
+type window func(...string)
+
func StartupWindow(...string) {
clearScreen()
@@ -26,11 +28,14 @@ func StartupWindow(...string) {
}
func loginWindow(values ...string) {
- inputs := formWindow("Login", []formInput{
- {"Username", "", nil},
+ inputs := formWindow("Login", StartupWindow, []formInput{
+ {"Username", " or [B for Back to start page]", nil},
{"Password", "", nil},
}, values...,
)
+ if len(inputs) == 0 {
+ return
+ }
if logInUser(inputs[0], inputs[1]) {
defer chatsWindow()
@@ -40,12 +45,15 @@ func loginWindow(values ...string) {
}
func registerWindow(values ...string) {
- inputs := formWindow("Register", []formInput{
- {"Username", " [A-z, 0-9, *, ., _, -; at least 1 letter]", stringValidUsername},
+ inputs := formWindow("Register", StartupWindow, []formInput{
+ {"Username", " [A-z, 0-9, *, ., _, -; at least 1 letter] or [B for Back to start page]", stringValidUsername},
{"Password", " [5-40 characters; at least 1 number]", stringValidPassword},
{"Name", " [2-60 characters]", stringValidName},
}, values...,
)
+ if len(inputs) == 0 {
+ return
+ }
createUser(inputs)
logInUser(inputs[0], inputs[1])
@@ -67,6 +75,7 @@ func chatsWindow(values ...string) {
input := ui.InputField("[D/A/L/</>/C/E/name/number/H]")
handled := handleInputActions(input, true,
+ inputAction{"C", createChatWindow, nil},
inputAction{"H", chatsWindow, []string{"ShowHelp"}},
)
if !handled {
@@ -74,6 +83,25 @@ func chatsWindow(values ...string) {
}
}
+func createChatWindow(values ...string) {
+ inputs := formWindow("Creating a new chat", chatsWindow, []formInput{
+ {"Name", " [2-20 characters; A-z, 0-9, spaces, _, -] or [B for Back to chats page]", stringValidChatName},
+ {"Description", " [0-30 characters]", stringValidChatDesc},
+ }, values...,
+ )
+ if len(inputs) == 0 {
+ return
+ }
+
+ createChat(inputs[0], inputs[1], loggedInUser.Username)
+ defer chatWindow(inputs[0])
+}
+
+func chatWindow(values ...string) {
+ currChat := getChat(values[0])
+ fmt.Println(currChat)
+}
+
func logoutWindow(...string) {
clearScreen()
@@ -98,9 +126,9 @@ type formInput struct {
validationFunc func(string) bool
}
-func formWindow(boxTitle string, formInputs []formInput, currentValues ...string) (userInputs []string) {
+func formWindow(boxTitle string, backWindow window, formInputs []formInput, currentValues ...string) (userInputs []string) {
userInputs = currentValues
- for _, v := range formInputs[len(currentValues):] {
+ for i, v := range formInputs[len(currentValues):] {
clearScreen()
ui.NormalBox(true, boxTitle)
@@ -111,10 +139,15 @@ func formWindow(boxTitle string, formInputs []formInput, currentValues ...string
input := ui.InputField(v.name + v.specification)
+ if i == 0 && backWindow != nil && strings.ToLower(input) == "b" {
+ defer backWindow()
+ return
+ }
+
if v.validationFunc != nil {
if !v.validationFunc(input) {
formCallback := func(...string) {
- defer formWindow(boxTitle, formInputs, userInputs...)
+ defer formWindow(boxTitle, backWindow, formInputs, userInputs...)
}
defer showError(invalidValueFor(v.name), formCallback)
return
@@ -130,7 +163,7 @@ func formWindow(boxTitle string, formInputs []formInput, currentValues ...string
type inputAction struct {
value string
- execute func(...string)
+ execute window
args []string
}
@@ -156,7 +189,7 @@ func handleInputActions(input string, handleNav bool, ia ...inputAction) bool {
var clearNext = true
-func showError(message string, callback func(...string), callbackData ...string) {
+func showError(message string, callback window, callbackData ...string) {
clearScreen()
ui.ErrorBox(message)