]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
markup: Add Level to Heading struct
authorJoe Mooring <joe.mooring@veriphor.com>
Sat, 2 Dec 2023 20:55:54 +0000 (12:55 -0800)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Mon, 4 Dec 2023 10:41:01 +0000 (11:41 +0100)
Closes #10776

markup/goldmark/toc.go
markup/tableofcontents/integration_test.go [new file with mode: 0644]
markup/tableofcontents/tableofcontents.go

index ac5040e85373a63502a060944cb76d61dd9bef7a..bc209adf233d83b3004480ec7cde16a2bcd2295d 100644 (file)
@@ -80,6 +80,7 @@ func (t *tocTransformer) Transform(n *ast.Document, reader text.Reader, pc parse
                        id, found := heading.AttributeString("id")
                        if found {
                                tocHeading.ID = string(id.([]byte))
+                               tocHeading.Level = level
                        }
                case
                        ast.KindCodeSpan,
diff --git a/markup/tableofcontents/integration_test.go b/markup/tableofcontents/integration_test.go
new file mode 100644 (file)
index 0000000..a51ad3d
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2023 The Hugo Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package tableofcontents_test
+
+import (
+       "testing"
+
+       "github.com/gohugoio/hugo/hugolib"
+)
+
+// Issue #10776
+func TestHeadingsLevel(t *testing.T) {
+       t.Parallel()
+
+       files := `
+-- hugo.toml --
+disableKinds = ['page','rss','section','sitemap','taxonomy','term']
+-- layouts/index.html --
+{{ range .Fragments.HeadingsMap }}
+       {{ printf "%s|%d|%s" .ID .Level .Title }}
+{{ end }}
+-- content/_index.md --
+## Heading L2
+### Heading L3
+##### Heading L5
+`
+
+       b := hugolib.Test(t, files)
+       b.AssertFileContent("public/index.html",
+               "heading-l2|2|Heading L2",
+               "heading-l3|3|Heading L3",
+               "heading-l5|5|Heading L5",
+       )
+}
index 9109ba87cc4f348d145eb963db92b51ba08cbf41..49a9cdeb79c205121349a0e7c8966a7b4cdac58d 100644 (file)
@@ -77,6 +77,7 @@ func (h Headings) FilterBy(fn func(*Heading) bool) Headings {
 // Heading holds the data about a heading and its children.
 type Heading struct {
        ID    string
+       Level int
        Title string
 
        Headings Headings