summaryrefslogtreecommitdiffstats
path: root/pkg/utils
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2020-02-14 22:07:56 +1100
committerJesse Duffield <jessedduffield@gmail.com>2020-02-15 08:47:36 +1100
commit814a0ea36f9f2e2d438ccb43a76402fe0479421b (patch)
treeaf332966e36e807f10242b5a6a05a0e8ceb0ac28 /pkg/utils
parent71e018a3dd01af4cb12c18b2e73ed34d6ce3b010 (diff)
begin refactor of menu panel
Diffstat (limited to 'pkg/utils')
-rw-r--r--pkg/utils/utils.go27
1 files changed, 18 insertions, 9 deletions
diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go
index 26d1b9021..093f8069e 100644
--- a/pkg/utils/utils.go
+++ b/pkg/utils/utils.go
@@ -151,14 +151,14 @@ func renderDisplayableList(items []Displayable, isFocused bool) (string, error)
stringArrays := getDisplayStringArrays(items, isFocused)
- if !displayArraysAligned(stringArrays) {
- return "", errors.New("Each item must return the same number of strings to display")
- }
+ return RenderDisplayStrings(stringArrays), nil
+}
- padWidths := getPadWidths(stringArrays)
- paddedDisplayStrings := getPaddedDisplayStrings(stringArrays, padWidths)
+func RenderDisplayStrings(displayStringsArr [][]string) string {
+ padWidths := getPadWidths(displayStringsArr)
+ paddedDisplayStrings := getPaddedDisplayStrings(displayStringsArr, padWidths)
- return strings.Join(paddedDisplayStrings, "\n"), nil
+ return strings.Join(paddedDisplayStrings, "\n")
}
// Decolorise strips a string of color
@@ -168,10 +168,13 @@ func Decolorise(str string) string {
}
func getPadWidths(stringArrays [][]string) []int {
- if len(stringArrays[0]) <= 1 {
- return []int{}
+ maxWidth := 0
+ for _, stringArray := range stringArrays {
+ if len(stringArray) > maxWidth {
+ maxWidth = len(stringArray)
+ }
}
- padWidths := make([]int, len(stringArrays[0])-1)
+ padWidths := make([]int, maxWidth-1)
for i := range padWidths {
for _, strings := range stringArrays {
uncoloredString := Decolorise(strings[i])
@@ -190,8 +193,14 @@ func getPaddedDisplayStrings(stringArrays [][]string, padWidths []int) []string
continue
}
for j, padWidth := range padWidths {
+ if len(stringArray)-1 < j {
+ continue
+ }
paddedDisplayStrings[i] += WithPadding(stringArray[j], padWidth) + " "
}
+ if len(stringArray)-1 < len(padWidths) {
+ continue
+ }
paddedDisplayStrings[i] += stringArray[len(padWidths)]
}
return paddedDisplayStrings