This repository has been archived by the owner on Mar 27, 2022. It is now read-only.
/
label.go
73 lines (65 loc) · 1.5 KB
/
label.go
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package renderer
import (
"fmt"
"github.com/l-lin/tcli/trello"
"github.com/muesli/termenv"
"strings"
)
var (
foregroundColor = termenv.ANSIBlack
mapColors = map[string]termenv.Color{
"black": termenv.ANSIBrightBlack,
"blue": termenv.ANSIBrightBlue,
"green": termenv.ANSIBrightGreen,
"lime": termenv.ANSIGreen,
"orange": termenv.ANSIYellow,
"pink": termenv.ANSIMagenta,
"purple": termenv.ANSIBrightMagenta,
"red": termenv.ANSIBrightRed,
"sky": termenv.ANSIBrightCyan,
"yellow": termenv.ANSIBrightYellow,
}
)
// Labels rendering labels
type Labels interface {
Render(labels trello.Labels) string
}
type PlainLabel struct{}
func (p PlainLabel) Render(labels trello.Labels) string {
sb := strings.Builder{}
for _, label := range labels {
if label.Name != "" {
sb.WriteString(label.Name)
} else {
sb.WriteString(label.Color)
}
sb.WriteString(" ")
}
return sb.String()
}
type TermEnvLabel struct{}
func (t TermEnvLabel) Render(labels trello.Labels) string {
sb := strings.Builder{}
for _, label := range labels {
labelName := ""
if label.Name != "" {
labelName = fmt.Sprintf(" %s ", label.Name)
} else {
labelName = " "
}
sb.WriteString(
termenv.String(labelName).
Background(getTermEnvColor(label.Color)).
Foreground(foregroundColor).
String(),
)
sb.WriteString(" ")
}
return sb.String()
}
func getTermEnvColor(color string) termenv.Color {
if c := mapColors[color]; c != nil {
return c
}
return termenv.ANSIWhite
}