aboutsummaryrefslogtreecommitdiff
path: root/ui/messages/html/list.go
diff options
context:
space:
mode:
Diffstat (limited to 'ui/messages/html/list.go')
-rw-r--r--ui/messages/html/list.go33
1 files changed, 33 insertions, 0 deletions
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)
}