8da87eddc73f45c2dd65076ff3e22f9da0664e7e

Author
TheEdgeOfRage <git@theedgeofrage.com>
Committer
TheEdgeOfRage <git@theedgeofrage.com>
Date

Message

Improve result rendering

Diff

 1diff --git a/ui.go b/ui.go
 2index 7a9cd717dad722c004a0407a23a027f670d28a87..12e10454e3a114381258c50ac620e73e12eef1d7 100644
 3--- a/ui.go
 4+++ b/ui.go
 5@@ -34,9 +34,11 @@ type model struct {
 6 	order       []int
 7 	pos         int
 8 	rounds      int
 9-	played      int
10-	score       int
11-	resultParts []string
12+	played       int
13+	score        int
14+	resultParts  []string
15+	guesses      []string
16+	fieldCorrect []bool
17 
18 	inputs []textinput.Model
19 	active int
20@@ -221,9 +223,14 @@ func (m *model) submitGuess() tea.Cmd {
21 
22 	points := 0
23 	var parts []string
24+	m.guesses = make([]string, len(m.inputs))
25+	m.fieldCorrect = make([]bool, len(m.inputs))
26 	for i, input := range m.inputs {
27-		if v := input.Value(); v != "" && fuzzyMatch(v, answers[i]) {
28+		v := input.Value()
29+		m.guesses[i] = v
30+		if v != "" && fuzzyMatch(v, answers[i]) {
31 			points += fieldWeights[i]
32+			m.fieldCorrect[i] = true
33 			parts = append(parts, fieldLabels[i])
34 		}
35 	}
36@@ -248,6 +255,7 @@ func (m *model) submitGuess() tea.Cmd {
37 }
38 
39 var red = lipgloss.NewStyle().Foreground(lipgloss.Color("#cc241d"))
40+var strikeRed = lipgloss.NewStyle().Foreground(lipgloss.Color("#cc241d")).Strikethrough(true)
41 var green = lipgloss.NewStyle().Foreground(lipgloss.Color("#98971a"))
42 var yellow = lipgloss.NewStyle().Foreground(lipgloss.Color("#d79921"))
43 var orange = lipgloss.NewStyle().Foreground(lipgloss.Color("#d65a00"))
44@@ -296,14 +304,26 @@ func (m model) View() string {
45 			style, mark = yellow, "✔ "
46 		}
47 		b.WriteString(style.Render(mark + m.resultMsg))
48-		b.WriteString("\n\n")
49-		b.WriteString(dim.Render("Title:  ") + bright.Render(m.answer.Title))
50-		b.WriteString("\n")
51-		b.WriteString(dim.Render("Album:  ") + bright.Render(m.answer.Album))
52-		b.WriteString("\n")
53-		b.WriteString(dim.Render("Artist: ") + bright.Render(m.answer.Artist))
54-		b.WriteString("\n\n")
55+		if !m.done {
56+			b.WriteString("\n\n")
57+			for i, label := range fieldPrompts {
58+				if i > 0 {
59+					b.WriteString("\n")
60+				}
61+				answer := []string{m.answer.Title, m.answer.Album, m.answer.Artist}[i]
62+				switch {
63+				case m.fieldCorrect[i]:
64+					b.WriteString(dim.Render(label) + green.Render(answer))
65+				case m.guesses[i] == "":
66+					b.WriteString(dim.Render(label) + yellow.Render(answer))
67+				default:
68+					b.WriteString(dim.Render(label) + strikeRed.Render(m.guesses[i]) + dim.Render("  ") + green.Render(answer))
69+				}
70+			}
71+			b.WriteString("\n\n")
72+		}
73 		if m.done {
74+			b.WriteString("\n\n")
75 			b.WriteString(dim.Render("Press Enter to quit."))
76 		} else {
77 			b.WriteString(dim.Render("Press Enter for the next song."))