Files
MujicaUI/messaging/quoted_text.go
T

42 lines
1.2 KiB
Go

package messaging
import (
"fmt"
"strings"
"github.com/egoist/mygo/ui"
"github.com/ZacharyZhang-NY/MujicaUI/core"
"github.com/ZacharyZhang-NY/MujicaUI/data"
"github.com/ZacharyZhang-NY/MujicaUI/theme"
)
// QuotedText folds or expands one level of quoted text.
func QuotedText(c *ui.Context, text string, open *bool) core.ChoiceResult {
body := QuoteStrip(text)
n := strings.Count(body, "\n") + 1
k := core.Tokens(c)
u := core.Density(c).Unit()
title := fmt.Sprintf(core.Msg(c, "quoted_text.show"), n)
if n == 1 {
title = core.Msg(c, "quoted_text.showOne")
}
if *open {
title = core.Msg(c, "quoted_text.hide")
}
return data.Collapsible(c, open, data.CollapsibleOptions{Title: title}, func() {
ui.Text(c, body).Selectable().FocusRing(false).TextColor(k.TextMuted).LineHeight(theme.LineHeight).
Padding(0, 0, 0, u*3).BorderWidth(0, 0, 0, 2).BorderColor(k.Border)
})
}
// QuoteStrip removes one quote prefix from each line.
func QuoteStrip(text string) string {
lines := strings.Split(strings.TrimRight(text, "\n"), "\n")
for i, l := range lines {
l = strings.TrimPrefix(l, ">")
lines[i] = strings.TrimPrefix(l, " ")
}
return strings.Join(lines, "\n")
}