}
// ToHTML renders the ToC as HTML.
-func (toc Root) ToHTML(startLevel, stopLevel int) string {
+func (toc Root) ToHTML(startLevel, stopLevel int, ordered bool) string {
b := &tocBuilder{
s: strings.Builder{},
h: toc.Headers,
startLevel: startLevel,
stopLevel: stopLevel,
+ ordered: ordered,
}
b.Build()
return b.s.String()
startLevel int
stopLevel int
+ ordered bool
}
func (b *tocBuilder) Build() {
if hasChildren {
b.s.WriteString("\n")
b.indent(indent + 1)
- b.s.WriteString("<ul>\n")
+ if b.ordered {
+ b.s.WriteString("<ol>\n")
+ } else {
+ b.s.WriteString("<ul>\n")
+ }
}
for _, h := range h {
if hasChildren {
b.indent(indent + 1)
- b.s.WriteString("</ul>")
+ if b.ordered {
+ b.s.WriteString("</ol>")
+ } else {
+ b.s.WriteString("</ul>")
+ }
b.s.WriteString("\n")
b.indent(indent)
}
var DefaultConfig = Config{
StartLevel: 2,
EndLevel: 3,
+ Ordered: false,
}
type Config struct {
// Heading end level, inclusive, to include in the table of contents.
// Default is 3, a value of -1 will include everything.
EndLevel int
+
+ // Whether to produce a ordered list or not.
+ Ordered bool
}
toc.AddAt(Header{Text: "1-H3-1", ID: "1-h2-2"}, 0, 2)
toc.AddAt(Header{Text: "Header 2", ID: "h1-2"}, 1, 0)
- got := toc.ToHTML(1, -1)
+ got := toc.ToHTML(1, -1, false)
c.Assert(got, qt.Equals, `<nav id="TableOfContents">
<ul>
<li><a href="#h1-1">Header 1</a>
</ul>
</nav>`, qt.Commentf(got))
- got = toc.ToHTML(1, 1)
+ got = toc.ToHTML(1, 1, false)
c.Assert(got, qt.Equals, `<nav id="TableOfContents">
<ul>
<li><a href="#h1-1">Header 1</a></li>
</ul>
</nav>`, qt.Commentf(got))
- got = toc.ToHTML(1, 2)
+ got = toc.ToHTML(1, 2, false)
c.Assert(got, qt.Equals, `<nav id="TableOfContents">
<ul>
<li><a href="#h1-1">Header 1</a>
</ul>
</nav>`, qt.Commentf(got))
- got = toc.ToHTML(2, 2)
+ got = toc.ToHTML(2, 2, false)
c.Assert(got, qt.Equals, `<nav id="TableOfContents">
<ul>
<li><a href="#1-h2-1">1-H2-1</a></li>
</ul>
</nav>`, qt.Commentf(got))
+ got = toc.ToHTML(1, -1, true)
+ c.Assert(got, qt.Equals, `<nav id="TableOfContents">
+ <ol>
+ <li><a href="#h1-1">Header 1</a>
+ <ol>
+ <li><a href="#1-h2-1">1-H2-1</a></li>
+ <li><a href="#1-h2-2">1-H2-2</a>
+ <ol>
+ <li><a href="#1-h2-2">1-H3-1</a></li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li><a href="#h1-2">Header 2</a></li>
+ </ol>
+</nav>`, qt.Commentf(got))
}
func TestTocMissingParent(t *testing.T) {
toc.AddAt(Header{Text: "H3", ID: "h3"}, 1, 2)
toc.AddAt(Header{Text: "H3", ID: "h3"}, 1, 2)
- got := toc.ToHTML(1, -1)
+ got := toc.ToHTML(1, -1, false)
c.Assert(got, qt.Equals, `<nav id="TableOfContents">
<ul>
<li>
</ul>
</nav>`, qt.Commentf(got))
- got = toc.ToHTML(3, 3)
+ got = toc.ToHTML(3, 3, false)
c.Assert(got, qt.Equals, `<nav id="TableOfContents">
<ul>
<li><a href="#h3">H3</a></li>
</ul>
</nav>`, qt.Commentf(got))
+ got = toc.ToHTML(1, -1, true)
+ c.Assert(got, qt.Equals, `<nav id="TableOfContents">
+ <ol>
+ <li>
+ <ol>
+ <li><a href="#h2">H2</a></li>
+ </ol>
+ </li>
+ <li>
+ <ol>
+ <li>
+ <ol>
+ <li><a href="#h3">H3</a></li>
+ <li><a href="#h3">H3</a></li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+</nav>`, qt.Commentf(got))
+
}