From db0e24ccc268d0a9c7575d660a9397e53747894b Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Wed, 10 Apr 2019 21:06:19 +0300 Subject: Use already parsed events for replies if possible --- ui/messages/html/list.go | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'ui/messages/html/list.go') diff --git a/ui/messages/html/list.go b/ui/messages/html/list.go index 9f45b92..c611e66 100644 --- a/ui/messages/html/list.go +++ b/ui/messages/html/list.go @@ -56,6 +56,14 @@ func NewListEntity(ordered bool, start int, children []Entity) *ListEntity { return entity } +func (le *ListEntity) Clone() Entity { + return &ListEntity{ + BaseEntity: le.BaseEntity.Clone().(*BaseEntity), + Ordered: le.Ordered, + Start: le.Start, + } +} + func (le *ListEntity) Draw(screen mauview.Screen) { width, _ := screen.Size() @@ -75,6 +83,31 @@ func (le *ListEntity) Draw(screen mauview.Screen) { } } +func (le *ListEntity) PlainText() string { + if len(le.Children) == 0 { + return "" + } + var buf strings.Builder + for i, child := range le.Children { + indent := strings.Repeat(" ", le.Indent) + if le.Ordered { + number := le.Start + i + _, _ = fmt.Fprintf(&buf, "%d. %s", number, strings.Repeat(" ", le.Indent-2-digits(number))) + } else { + buf.WriteString("● ") + } + for j, row := range strings.Split(child.PlainText(), "\n") { + if j != 0 { + buf.WriteRune('\n') + buf.WriteString(indent) + } + buf.WriteString(row) + } + buf.WriteRune('\n') + } + return strings.TrimSpace(buf.String()) +} + func (le *ListEntity) String() string { return fmt.Sprintf("&html.ListEntity{Ordered=%t, Start=%d, Base=%s},\n", le.Ordered, le.Start, le.BaseEntity) } -- cgit v1.2.3