...

Source file src/github.com/jedib0t/go-pretty/v6/list/render_html.go

Documentation: github.com/jedib0t/go-pretty/v6/list

     1  package list
     2  
     3  import (
     4  	"html"
     5  	"strconv"
     6  	"strings"
     7  )
     8  
     9  // RenderHTML renders the List in the HTML format. Example:
    10  //  <ul class="go-pretty-table">
    11  //    <li>Game Of Thrones</li>
    12  //    <ul class="go-pretty-table-1">
    13  //      <li>Winter</li>
    14  //      <li>Is</li>
    15  //      <li>Coming</li>
    16  //      <ul class="go-pretty-table-2">
    17  //        <li>This</li>
    18  //        <li>Is</li>
    19  //        <li>Known</li>
    20  //      </ul>
    21  //    </ul>
    22  //    <li>The Dark Tower</li>
    23  //    <ul class="go-pretty-table-1">
    24  //      <li>The Gunslinger</li>
    25  //    </ul>
    26  //  </ul>
    27  func (l *List) RenderHTML() string {
    28  	l.initForRender()
    29  
    30  	var out strings.Builder
    31  	if len(l.items) > 0 {
    32  		l.htmlRenderRecursively(&out, 0, l.items[0])
    33  	}
    34  	return l.render(&out)
    35  }
    36  
    37  func (l *List) htmlRenderRecursively(out *strings.Builder, idx int, item *listItem) int {
    38  	linePrefix := strings.Repeat("  ", item.Level)
    39  
    40  	out.WriteString(linePrefix)
    41  	out.WriteString("<ul class=\"")
    42  	out.WriteString(l.htmlCSSClass)
    43  	if item.Level > 0 {
    44  		out.WriteRune('-')
    45  		out.WriteString(strconv.Itoa(item.Level))
    46  	}
    47  	out.WriteString("\">\n")
    48  	var numItemsRendered int
    49  	for itemIdx := idx; itemIdx < len(l.items); itemIdx++ {
    50  		if l.items[itemIdx].Level == item.Level {
    51  			out.WriteString(linePrefix)
    52  			out.WriteString("  <li>")
    53  			out.WriteString(strings.Replace(html.EscapeString(l.items[itemIdx].Text), "\n", "<br/>", -1))
    54  			out.WriteString("</li>\n")
    55  			numItemsRendered++
    56  		} else if l.items[itemIdx].Level > item.Level { // indent
    57  			numItemsRenderedRecursively := l.htmlRenderRecursively(out, itemIdx, l.items[itemIdx])
    58  			numItemsRendered += numItemsRenderedRecursively
    59  			itemIdx += numItemsRenderedRecursively - 1
    60  			if numItemsRendered > 0 {
    61  				out.WriteRune('\n')
    62  			}
    63  		} else { // un-indent
    64  			break
    65  		}
    66  	}
    67  	out.WriteString(linePrefix)
    68  	out.WriteString("</ul>")
    69  	return numItemsRendered
    70  }
    71  

View as plain text