All checks were successful
continuous-integration/drone/push Build is passing
73 lines
1.5 KiB
Go
73 lines
1.5 KiB
Go
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
|
|
//go:build go1.23
|
|
|
|
package tui
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/morikuni/aec"
|
|
)
|
|
|
|
var InfoHeader = Str{
|
|
Plain: " Info -> ",
|
|
Fancy: aec.Bold.Apply(aec.LightCyanB.Apply(aec.BlackF.Apply("i")) + " " + aec.LightCyanF.Apply("Info → ")),
|
|
}
|
|
|
|
type options struct {
|
|
header Str
|
|
}
|
|
|
|
type noteOptions func(o *options)
|
|
|
|
func withHeader(header Str) noteOptions {
|
|
return func(o *options) {
|
|
o.header = header
|
|
}
|
|
}
|
|
|
|
func (o Output) printNoteWithOptions(format string, args []any, opts ...noteOptions) {
|
|
if o.isTerminal {
|
|
// TODO: Handle all flags
|
|
format = strings.ReplaceAll(format, "--platform", ColorFlag.Apply("--platform"))
|
|
}
|
|
|
|
opt := &options{
|
|
header: InfoHeader,
|
|
}
|
|
|
|
for _, override := range opts {
|
|
override(opt)
|
|
}
|
|
|
|
h := o.Sprint(opt.header)
|
|
|
|
_, _ = fmt.Fprint(o, "\n", h)
|
|
s := fmt.Sprintf(format, args...)
|
|
for idx, line := range strings.Split(s, "\n") {
|
|
if idx > 0 {
|
|
_, _ = fmt.Fprint(o, strings.Repeat(" ", Width(h)))
|
|
}
|
|
|
|
l := line
|
|
if o.isTerminal {
|
|
l = aec.Italic.Apply(l)
|
|
}
|
|
_, _ = fmt.Fprintln(o, l)
|
|
}
|
|
}
|
|
|
|
func (o Output) PrintNote(format string, args ...any) {
|
|
o.printNoteWithOptions(format, args, withHeader(InfoHeader))
|
|
}
|
|
|
|
var warningHeader = Str{
|
|
Plain: " Warn -> ",
|
|
Fancy: aec.Bold.Apply(aec.LightYellowB.Apply(aec.BlackF.Apply("w")) + " " + ColorWarning.Apply("Warn → ")),
|
|
}
|
|
|
|
func (o Output) PrintWarning(format string, args ...any) {
|
|
o.printNoteWithOptions(format, args, withHeader(warningHeader))
|
|
}
|