mirror of
https://github.com/onyx-and-iris/lottery-cli.git
synced 2026-08-17 08:44:25 +00:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3f0af6e5ec |
@@ -81,10 +81,19 @@ var cmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
|
|
||||||
count := viper.GetInt("count")
|
count := viper.GetInt("count")
|
||||||
|
includeDrawHeading := count > 1
|
||||||
|
renders := make([]string, 0, count)
|
||||||
|
drawTitle := "Lottery"
|
||||||
|
|
||||||
for range count {
|
for i := range count {
|
||||||
l.Draw()
|
l.Draw()
|
||||||
fmt.Println(renderDraw(l))
|
title, entry := renderDrawEntry(l, i+1, includeDrawHeading)
|
||||||
|
drawTitle = title
|
||||||
|
renders = append(renders, entry)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(renders) > 0 {
|
||||||
|
fmt.Println(renderDrawCollection(drawTitle, renders))
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -9,6 +9,24 @@ import (
|
|||||||
"github.com/onyx-and-iris/lottery-cli"
|
"github.com/onyx-and-iris/lottery-cli"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// nolint:misspell
|
||||||
|
var (
|
||||||
|
titleStyle = lipgloss.NewStyle().Bold(true).Foreground(lipgloss.Color("12"))
|
||||||
|
drawHeadingStyle = lipgloss.NewStyle().
|
||||||
|
Bold(true).
|
||||||
|
Underline(true).
|
||||||
|
Foreground(lipgloss.Color("14"))
|
||||||
|
labelStyle = lipgloss.NewStyle().Foreground(lipgloss.Color("8"))
|
||||||
|
numbersStyle = lipgloss.NewStyle().Bold(true).Foreground(lipgloss.Color("10"))
|
||||||
|
specialStyle = lipgloss.NewStyle().Bold(true).Foreground(lipgloss.Color("11"))
|
||||||
|
separatorStyle = lipgloss.NewStyle().Foreground(lipgloss.Color("8"))
|
||||||
|
cardStyle = lipgloss.NewStyle().
|
||||||
|
BorderStyle(lipgloss.RoundedBorder()).
|
||||||
|
BorderForeground(lipgloss.Color("8")).
|
||||||
|
Padding(0, 1).
|
||||||
|
MarginTop(1)
|
||||||
|
)
|
||||||
|
|
||||||
func formatNumberList(numbers []int) string {
|
func formatNumberList(numbers []int) string {
|
||||||
parts := make([]string, len(numbers))
|
parts := make([]string, len(numbers))
|
||||||
for i, n := range numbers {
|
for i, n := range numbers {
|
||||||
@@ -17,13 +35,7 @@ func formatNumberList(numbers []int) string {
|
|||||||
return strings.Join(parts, " ")
|
return strings.Join(parts, " ")
|
||||||
}
|
}
|
||||||
|
|
||||||
// nolint:misspell
|
func drawTitleAndLines(l lottery.Lottery) (string, []string) {
|
||||||
func renderDraw(l lottery.Lottery) string {
|
|
||||||
titleStyle := lipgloss.NewStyle().Bold(true).Foreground(lipgloss.Color("12"))
|
|
||||||
labelStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("8"))
|
|
||||||
numbersStyle := lipgloss.NewStyle().Bold(true).Foreground(lipgloss.Color("10"))
|
|
||||||
specialStyle := lipgloss.NewStyle().Bold(true).Foreground(lipgloss.Color("11"))
|
|
||||||
|
|
||||||
var title string
|
var title string
|
||||||
var lines []string
|
var lines []string
|
||||||
|
|
||||||
@@ -91,12 +103,44 @@ func renderDraw(l lottery.Lottery) string {
|
|||||||
lines = append(lines, "Unknown lottery type")
|
lines = append(lines, "Unknown lottery type")
|
||||||
}
|
}
|
||||||
|
|
||||||
body := strings.Join(lines, "\n")
|
return title, lines
|
||||||
card := lipgloss.NewStyle().
|
}
|
||||||
BorderStyle(lipgloss.RoundedBorder()).
|
|
||||||
BorderForeground(lipgloss.Color("8")).
|
func renderDrawEntry(l lottery.Lottery, drawNumber int, includeHeading bool) (string, string) {
|
||||||
Padding(0, 1).
|
title, lines := drawTitleAndLines(l)
|
||||||
MarginTop(1)
|
|
||||||
|
entry := make([]string, 0, len(lines)+1)
|
||||||
return card.Render(titleStyle.Render(title+" draw") + "\n" + body)
|
if includeHeading {
|
||||||
|
entry = append(entry, drawHeadingStyle.Render("Draw "+strconv.Itoa(drawNumber)))
|
||||||
|
}
|
||||||
|
entry = append(entry, lines...)
|
||||||
|
|
||||||
|
return title, strings.Join(entry, "\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
func maxLineWidth(blocks []string) int {
|
||||||
|
maxWidth := 0
|
||||||
|
for _, block := range blocks {
|
||||||
|
for line := range strings.SplitSeq(block, "\n") {
|
||||||
|
width := lipgloss.Width(line)
|
||||||
|
if width > maxWidth {
|
||||||
|
maxWidth = width
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if maxWidth < 12 {
|
||||||
|
return 12
|
||||||
|
}
|
||||||
|
return maxWidth
|
||||||
|
}
|
||||||
|
|
||||||
|
func renderDrawCollection(title string, entries []string) string {
|
||||||
|
if len(entries) == 0 {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
separator := separatorStyle.Render(strings.Repeat("─", maxLineWidth(entries)))
|
||||||
|
body := strings.Join(entries, "\n"+separator+"\n")
|
||||||
|
|
||||||
|
return cardStyle.Render(titleStyle.Render(title+" draws") + "\n" + body)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user