From 23629a40a878a00626c98c442052c7bade8b6b95 Mon Sep 17 00:00:00 2001 From: Ron Rise Date: Tue, 13 May 2025 09:49:02 -0400 Subject: [PATCH] Batman! (this commit has no parents) --- interactive/model.go | 5 ++++ interactive/params/quality.go | 41 +++++++++++++++++++++++++++++++ interactive/view.go | 46 ++++++++++++++++++++++------------- 3 files changed, 75 insertions(+), 17 deletions(-) create mode 100644 interactive/params/quality.go diff --git a/interactive/model.go b/interactive/model.go index 872f283..5800652 100644 --- a/interactive/model.go +++ b/interactive/model.go @@ -3,6 +3,7 @@ package interactive import ( "fmt" "github.com/aws/aws-sdk-go/aws" + cbhelp "github.com/charmbracelet/bubbles/help" "github.com/charmbracelet/bubbles/key" tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/huh" @@ -21,6 +22,7 @@ type Model struct { err error focusField huh.Field inParamsFields bool + help cbhelp.Model } type UrlParam interface { @@ -61,6 +63,8 @@ func InitialModel(c *cli.Context) Model { m.generator = g + m.help = cbhelp.New() + return m } @@ -74,6 +78,7 @@ func (m Model) initialFields() []huh.Field { params.NewResize(), params.NewMinWidth(), params.NewMinHeight(), + params.NewQuality(), params.NewZoom(), params.NewEnlarge(), } diff --git a/interactive/params/quality.go b/interactive/params/quality.go new file mode 100644 index 0000000..e04e12d --- /dev/null +++ b/interactive/params/quality.go @@ -0,0 +1,41 @@ +package params + +import ( + "github.com/aws/aws-sdk-go/aws" + "github.com/charmbracelet/huh" +) + +type Quality struct { + value *string + field *huh.Input +} + +func NewQuality() *Quality { + z := &Quality{ + value: aws.String(""), + field: huh.NewInput(). + Key("q"). + Description("Quality of the image 0-100"). + Title("Quality"), + } + + z.field.Value(z.value) + + return z +} + +func (z *Quality) Value() string { + return *z.value +} + +func (z *Quality) Display() string { + return "quality" +} + +func (z *Quality) Key() string { + return "q" +} + +func (z *Quality) Input() []huh.Field { + return []huh.Field{z.field} +} diff --git a/interactive/view.go b/interactive/view.go index 8713b1c..2e8c331 100644 --- a/interactive/view.go +++ b/interactive/view.go @@ -2,35 +2,45 @@ package interactive import ( "fmt" + "github.com/charmbracelet/bubbles/key" "github.com/charmbracelet/lipgloss" ) func (m Model) View() string { - output := lipgloss.NewStyle(). - Foreground(lipgloss.Color("5")). - Background(lipgloss.Color("0")). - Bold(true). - Underline(true). - Render("Welcome to the img-proxy URL Generator!") + "\n\n" + + fieldStyle := lipgloss.NewStyle().PaddingBottom(1) if m.err != nil { - return output + "Error: " + m.err.Error() + "\n" + "Press Ctrl+C to exit.\n" + return lipgloss. + NewStyle(). + Bold(true). + Foreground(lipgloss.Color("red")). + Background(lipgloss.Color("black")). + Render("Error: " + m.err.Error() + "\n" + "Press Ctrl+C to exit.") } + output := lipgloss.NewStyle(). + Foreground(lipgloss.Color("5")). + PaddingBottom(1). + Bold(true). + Underline(true). + Render("Welcome to the img-proxy URL Generator!") + "\n" + for _, field := range m.Fields { - output += field.View() + "\n\n" + output += fieldStyle.Render("\n" + field.View()) } for _, field := range *m.selectedParams { for _, f := range field.Input() { - output += f.View() + "\n\n" + output += fieldStyle.Render("\n" + f.View()) } } if *m.url == "" { - return output + help() + return output + "\n" + m.renderHelp() } + // Generate the URL params := make([]string, 0) for _, field := range *m.selectedParams { if field.Value() != "" { @@ -45,15 +55,17 @@ func (m Model) View() string { Foreground(lipgloss.Color("#0000ff")). Render(url)) - output += help() + output += m.renderHelp() return output } -func help() string { - return lipgloss. - NewStyle(). - Inline(true). - Foreground(lipgloss.Color("#123456")). - Render("Ctrl+C | Esc: exit * Tab: Next Field * Sft+Tab: Prev Field * Space: Select\n") +func (m Model) renderHelp() string { + return m.help.ShortHelpView([]key.Binding{ + key.NewBinding(key.WithKeys("ctrl+c", "esc"), key.WithHelp("esc", "quit")), + key.NewBinding(key.WithKeys("up"), key.WithHelp("↑", "cursor up")), + key.NewBinding(key.WithKeys("down"), key.WithHelp("↓", "cursor down")), + key.NewBinding(key.WithKeys(" "), key.WithHelp("space", "select")), + key.NewBinding(key.WithKeys("tab"), key.WithHelp("tab", "next field")), + }) }