From d6ce974e6d18df621c9c74cc1f323cc27e8aadd2 Mon Sep 17 00:00:00 2001 From: Oliver <480930+rivo@users.noreply.github.com> Date: Thu, 11 Jan 2018 16:13:01 +0100 Subject: [PATCH] Added masking to InputField, password field to form. Resolves #7, resolves #8. --- demos/form/main.go | 1 + demos/form/screenshot.png | Bin 25793 -> 29493 bytes form.go | 22 +++++++++++++++++++++- inputfield.go | 24 ++++++++++++++++++++++-- 4 files changed, 44 insertions(+), 3 deletions(-) diff --git a/demos/form/main.go b/demos/form/main.go index 7939b0d..ef24cdb 100644 --- a/demos/form/main.go +++ b/demos/form/main.go @@ -12,6 +12,7 @@ func main() { AddInputField("First name", "", 20, nil, nil). AddInputField("Last name", "", 20, nil, nil). AddCheckbox("Age 18+", false, nil). + AddPasswordField("Password", "", 10, '*', nil). AddButton("Save", nil). AddButton("Quit", func() { app.Stop() diff --git a/demos/form/screenshot.png b/demos/form/screenshot.png index a32b31550c702e8b780008451970531a86ac5f93..a7c0379b22fa4c29f115da1c8d009533c48c4d6a 100644 GIT binary patch literal 29493 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 literal 25793 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 diff --git a/form.go b/form.go index a3e30d6..ab8bd6e 100644 --- a/form.go +++ b/form.go @@ -138,7 +138,27 @@ func (f *Form) AddInputField(label, value string, fieldLength int, accept func(t SetLabel(label). SetText(value). SetFieldLength(fieldLength). - SetAcceptanceFunc(accept)) + SetAcceptanceFunc(accept). + SetChangedFunc(changed)) + return f +} + +// AddPasswordField adds a password field to the form. This is similar to an +// input field except that the user's input not shown. Instead, a "mask" +// character is displayed. The password field has a label, an optional initial +// value, a field length (a value of 0 extends it as far as possible), and an +// (optional) callback function which is invoked when the input field's text has +// changed. +func (f *Form) AddPasswordField(label, value string, fieldLength int, mask rune, changed func(text string)) *Form { + if mask == 0 { + mask = '*' + } + f.items = append(f.items, NewInputField(). + SetLabel(label). + SetText(value). + SetFieldLength(fieldLength). + SetMaskCharacter(mask). + SetChangedFunc(changed)) return f } diff --git a/inputfield.go b/inputfield.go index 2403973..12a4e5e 100644 --- a/inputfield.go +++ b/inputfield.go @@ -3,6 +3,8 @@ package tview import ( "math" "regexp" + "strings" + "unicode/utf8" "github.com/gdamore/tcell" runewidth "github.com/mattn/go-runewidth" @@ -11,6 +13,9 @@ import ( // InputField is a one-line box (three lines if there is a title) where the // user can enter text. // +// Use SetMaskCharacter() to hide input from onlookers (e.g. for password +// input). +// // See https://github.com/rivo/tview/wiki/InputField for an example. type InputField struct { *Box @@ -34,6 +39,10 @@ type InputField struct { // possible. fieldLength int + // A character to mask entered text (useful for password fields). A value of 0 + // disables masking. + maskCharacter rune + // An optional function which may reject the last character that was entered. accept func(text string, ch rune) bool @@ -116,6 +125,13 @@ func (i *InputField) SetFieldLength(length int) *InputField { return i } +// SetMaskCharacter sets a character that masks user input on a screen. A value +// of 0 disables masking. +func (i *InputField) SetMaskCharacter(mask rune) *InputField { + i.maskCharacter = mask + return i +} + // SetAcceptanceFunc sets a handler which may reject the last character that was // entered (by returning false). // @@ -180,11 +196,15 @@ func (i *InputField) Draw(screen tcell.Screen) { } // Draw entered text. + text := i.text + if i.maskCharacter > 0 { + text = strings.Repeat(string(i.maskCharacter), utf8.RuneCountInString(i.text)) + } fieldLength-- // We need one cell for the cursor. if fieldLength < runewidth.StringWidth(i.text) { - Print(screen, i.text, x, y, fieldLength, AlignRight, i.fieldTextColor) + Print(screen, text, x, y, fieldLength, AlignRight, i.fieldTextColor) } else { - Print(screen, i.text, x, y, fieldLength, AlignLeft, i.fieldTextColor) + Print(screen, text, x, y, fieldLength, AlignLeft, i.fieldTextColor) } // Set cursor.