From 577eb7a63dd498bbc292e85cf42867745fd9fdf6 Mon Sep 17 00:00:00 2001
From: Volker Schukai <volker.schukai@schukai.com>
Date: Wed, 20 Jul 2022 11:37:55 +0200
Subject: [PATCH] chore: commit save point

---
 application/source/document/html.go           |  40 ++---
 application/source/document/tree.go           |  66 ++++----
 application/source/document/tree_test.go      |  18 +--
 application/source/environment/config.go      |   6 +
 application/source/environment/state_html.go  |  48 ++++++
 .../examples/example3/build/index.html        | 145 +++++++++++-------
 development/examples/example3/config/web.yaml |   8 +-
 .../examples/example3/doc/feature-1.md        |  10 +-
 .../examples/example3/doc/feature-3.md        |   5 +
 .../example3/templates/html/index.html        |  67 ++------
 10 files changed, 228 insertions(+), 185 deletions(-)
 create mode 100644 development/examples/example3/doc/feature-3.md

diff --git a/application/source/document/html.go b/application/source/document/html.go
index eed244f..289807b 100644
--- a/application/source/document/html.go
+++ b/application/source/document/html.go
@@ -37,14 +37,6 @@ type HtmlDocument struct {
 	*SourceFile
 }
 
-//type DocumentTree struct {
-//	Level int
-//	//ID       string
-//	//Title    string
-//	//Content  string
-//	Children []DocumentTree
-//}
-
 type DocumentNode struct {
 	Level int
 	ID    string
@@ -60,7 +52,7 @@ type SinglePageHtmlDataset struct {
 		Keywords    string
 		Language    string
 	}
-	DocumentTree *tree[DocumentNode]
+	DocumentTree *Tree[DocumentNode]
 	TOC          []DocumentNode
 }
 
@@ -74,23 +66,6 @@ func BuildHTML(env BuildHtmlEnvironment) error {
 
 }
 
-//func buildMdSingleFile(env BuildHtmlEnvironment) string {
-//
-//	content := environment.ReadTemplate(env.Templates.Markdown)
-//	t, err := template.New("HTML").Parse(content)
-//	checkError(err)
-//
-//	d, err := NewHTMLDataset(env)
-//	checkError(err)
-//
-//	buf := new(bytes.Buffer)
-//	err = t.Execute(buf, d)
-//	checkError(err)
-//
-//	return buf.String()
-//
-//}
-
 func getSingleHtmlOutputFile(env BuildHtmlEnvironment) string {
 	output := env.OutputPath
 
@@ -125,8 +100,6 @@ func renderSinglePageHtml(env BuildHtmlEnvironment) error {
 
 	output := getSingleHtmlOutputFile(env)
 
-	//c := buildMdSingleFile(env)
-
 	t := environment.ReadTemplate(env.Templates.HTML)
 	p, err := template.New("HTML").Parse(t)
 	checkError(err)
@@ -149,7 +122,7 @@ func renderMultiPageHtml(env BuildHtmlEnvironment) error {
 	return nil
 }
 
-func buildTree(body string) *tree[DocumentNode] {
+func buildTree(body string) *Tree[DocumentNode] {
 
 	buf := new(bytes.Buffer)
 	buf.Write([]byte(body))
@@ -215,6 +188,11 @@ func NewHTMLDataset(env BuildHtmlEnvironment) (*SinglePageHtmlDataset, error) {
 
 	d := &SinglePageHtmlDataset{}
 
+	d.Meta.Language = environment.State.GetHTMLMetaLanguage("")
+	d.Meta.Title = environment.State.GetHTMLMetaTitle("")
+	d.Meta.Description = environment.State.GetHTMLMetaDescription("")
+	d.Meta.Keywords = environment.State.GetHTMLMetaKeywords("")
+
 	docs := []string{}
 
 	for _, key := range keys {
@@ -256,12 +234,12 @@ func NewHTMLDataset(env BuildHtmlEnvironment) (*SinglePageHtmlDataset, error) {
 	d.DocumentTree = buildTree(strings.Join(docs, "\n"))
 
 	d.TOC = []DocumentNode{}
-	d.DocumentTree.recursiveIterate(func(t *tree[DocumentNode]) {
+	d.DocumentTree.recursiveIterate(func(t *Tree[DocumentNode]) {
 		if t.getLevel() == 0 {
 			return
 		}
 
-		d.TOC = append(d.TOC, t.payload)
+		d.TOC = append(d.TOC, t.Payload)
 	})
 
 	format := environment.State.GetDocumentDateFormat("")
diff --git a/application/source/document/tree.go b/application/source/document/tree.go
index ce56b12..e0a7432 100644
--- a/application/source/document/tree.go
+++ b/application/source/document/tree.go
@@ -2,18 +2,18 @@ package document
 
 import "fmt"
 
-type tree[T any] struct {
+type Tree[T any] struct {
 	Level    int
-	Children []*tree[T]
-	parent   *tree[T]
-	payload  T
+	Children []*Tree[T]
+	Parent   *Tree[T]
+	Payload  T
 }
 
-func newTree[T any]() *tree[T] {
-	return &tree[T]{}
+func newTree[T any]() *Tree[T] {
+	return &Tree[T]{}
 }
 
-func (t *tree[T]) traverseAndInitLevel(level int) {
+func (t *Tree[T]) traverseAndInitLevel(level int) {
 	t.Level = level
 	for _, child := range t.Children {
 		child.traverseAndInitLevel(level + 1)
@@ -21,54 +21,54 @@ func (t *tree[T]) traverseAndInitLevel(level int) {
 
 }
 
-func (t *tree[T]) addChild(child *tree[T]) {
+func (t *Tree[T]) addChild(child *Tree[T]) {
 	t.Children = append(t.Children, child)
-	child.parent = t
+	child.Parent = t
 
 	t.getRoot().traverseAndInitLevel(0)
 
 }
 
-func (t *tree[T]) addChildren(children []*tree[T]) {
+func (t *Tree[T]) addChildren(children []*Tree[T]) {
 	for _, child := range children {
 		t.addChild(child)
-		child.parent = t
+		child.Parent = t
 	}
 	t.getRoot().traverseAndInitLevel(0)
 }
 
-func (t *tree[T]) getChildren() []*tree[T] {
+func (t *Tree[T]) getChildren() []*Tree[T] {
 	return t.Children
 }
 
-func (t *tree[T]) getLevel() int {
+func (t *Tree[T]) getLevel() int {
 	return t.Level
 }
 
-func (t *tree[T]) getParent() *tree[T] {
-	return t.parent
+func (t *Tree[T]) getParent() *Tree[T] {
+	return t.Parent
 }
 
-func (t *tree[T]) getRoot() *tree[T] {
-	if t.parent == nil {
+func (t *Tree[T]) getRoot() *Tree[T] {
+	if t.Parent == nil {
 		return t
 	}
-	return t.parent.getRoot()
+	return t.Parent.getRoot()
 }
 
-func (t *tree[T]) getPayload() T {
-	return t.payload
+func (t *Tree[T]) getPayload() T {
+	return t.Payload
 }
 
-func (t *tree[T]) setPayload(payload T) {
-	t.payload = payload
+func (t *Tree[T]) setPayload(payload T) {
+	t.Payload = payload
 }
 
-func (t *tree[T]) getPayloadAsString() string {
-	return fmt.Sprintf("%v", t.payload)
+func (t *Tree[T]) getPayloadAsString() string {
+	return fmt.Sprintf("%v", t.Payload)
 }
 
-func (t *tree[T]) appendAndGet() *tree[T] {
+func (t *Tree[T]) appendAndGet() *Tree[T] {
 	parent := t.getParent()
 
 	if parent == nil {
@@ -80,7 +80,7 @@ func (t *tree[T]) appendAndGet() *tree[T] {
 	return n
 }
 
-func (t *tree[T]) up(level int) *tree[T] {
+func (t *Tree[T]) up(level int) *Tree[T] {
 
 	if level > t.getLevel() {
 		panic("level>t.getLevel()")
@@ -90,18 +90,18 @@ func (t *tree[T]) up(level int) *tree[T] {
 		return t
 	}
 
-	return t.parent.up(level)
+	return t.Parent.up(level)
 
 }
 
-func (t *tree[T]) recursiveIterate(f func(*tree[T])) {
+func (t *Tree[T]) recursiveIterate(f func(*Tree[T])) {
 	f(t)
 	for _, child := range t.Children {
 		child.recursiveIterate(f)
 	}
 }
 
-func (t *tree[T]) down(level int) *tree[T] {
+func (t *Tree[T]) down(level int) *Tree[T] {
 
 	if level < t.Level {
 		panic("level < t.Level")
@@ -119,15 +119,15 @@ func (t *tree[T]) down(level int) *tree[T] {
 	return t.Children[len(t.Children)-1].down(level)
 }
 
-//func (t *tree[T]) getSubTree() []tree {
+//func (t *Tree[T]) getSubTree() []Tree {
 //	return t.getSubTreeWithLevel(t.Level)
 //}
 //
-//func (t *tree[T]) getSubTreeWithLevel(level int) []tree {
+//func (t *Tree[T]) getSubTreeWithLevel(level int) []Tree {
 //	if t.Level == level {
-//		return []tree{*t}
+//		return []Tree{*t}
 //	}
-//	var result []tree
+//	var result []Tree
 //	for _, child := range t.Children {
 //		result = append(result, child.getSubTreeWithLevel(level)...)
 //	}
diff --git a/application/source/document/tree_test.go b/application/source/document/tree_test.go
index 3106592..b9390ce 100644
--- a/application/source/document/tree_test.go
+++ b/application/source/document/tree_test.go
@@ -30,7 +30,7 @@ func TestParseList(t *testing.T) {
 	}
 
 	count := 0
-	obj.recursiveIterate(func(t *tree[int]) {
+	obj.recursiveIterate(func(t *Tree[int]) {
 		count++
 	})
 
@@ -69,7 +69,7 @@ func TestParseList2(t *testing.T) {
 	}
 
 	count := 0
-	obj.recursiveIterate(func(t *tree[int]) {
+	obj.recursiveIterate(func(t *Tree[int]) {
 		count++
 	})
 
@@ -89,7 +89,7 @@ func TestRecursiveIterator(t *testing.T) {
 	obj.addChild(sub)
 
 	count := 0
-	obj.recursiveIterate(func(t *tree[int]) {
+	obj.recursiveIterate(func(t *Tree[int]) {
 		count++
 	})
 
@@ -152,7 +152,7 @@ func TestTreeAddChild(t *testing.T) {
 	tree.addChild(newTree[int]())
 
 	if len(tree.getChildren()) != 3 {
-		t.Error("tree.getChildren() != 3")
+		t.Error("Tree.getChildren() != 3")
 	}
 
 }
@@ -161,10 +161,10 @@ func TestTreeAddChildren(t *testing.T) {
 
 	obj := newTree[int]()
 
-	obj.addChildren([]*tree[int]{newTree[int](), newTree[int](), newTree[int]()})
+	obj.addChildren([]*Tree[int]{newTree[int](), newTree[int](), newTree[int]()})
 
 	if len(obj.getChildren()) != 3 {
-		t.Error("tree.getChildren() != 3")
+		t.Error("Tree.getChildren() != 3")
 	}
 
 }
@@ -176,7 +176,7 @@ func TestTreeGetParent(t *testing.T) {
 	obj.addChild(newTree[int]())
 
 	if obj.getChildren()[0].getParent() != obj {
-		t.Error("tree.getChildren()[0].getParent() != obj")
+		t.Error("Tree.getChildren()[0].getParent() != obj")
 	}
 
 }
@@ -191,7 +191,7 @@ func TestTreeGetRoot(t *testing.T) {
 	obj.addChild(sub)
 
 	if obj.getChildren()[0].getChildren()[0].getRoot() != obj {
-		t.Error("tree.getChildren()[0].getChildren()[0].getRoot() != obj")
+		t.Error("Tree.getChildren()[0].getChildren()[0].getRoot() != obj")
 	}
 
 }
@@ -206,7 +206,7 @@ func TestTreeGetRoot(t *testing.T) {
 //	obj.addChild(sub)
 //
 //	if len(obj.getChildren()[0].getSubTree()) != 1 {
-//		t.Error("tree.getChildren()[0].getSubTree() != 1")
+//		t.Error("Tree.getChildren()[0].getSubTree() != 1")
 //	}
 //
 //}
diff --git a/application/source/environment/config.go b/application/source/environment/config.go
index a6d796d..da45a7b 100644
--- a/application/source/environment/config.go
+++ b/application/source/environment/config.go
@@ -35,6 +35,12 @@ type Configuration struct {
 			Templates  struct {
 				HTML string `yaml:"HTML" envconfig:"HTML_HTML_TEMPLATE"`
 			} `yaml:"Templates"`
+			Meta struct {
+				Title       string `yaml:"Title" envconfig:"HTML_TITLE"`
+				Description string `yaml:"Description" envconfig:"HTML_DESCRIPTION"`
+				Keywords    string `yaml:"Keywords" envconfig:"HTML_KEYWORDS"`
+				Language    string `yaml:"Language" envconfig:"HTML_LANGUAGE"`
+			} `yaml:"Meta"`
 		} `yaml:"HTML"`
 	} `yaml:"Document"`
 }
diff --git a/application/source/environment/state_html.go b/application/source/environment/state_html.go
index 9cde61a..6703aad 100644
--- a/application/source/environment/state_html.go
+++ b/application/source/environment/state_html.go
@@ -23,6 +23,54 @@ func (e *stateStruct) GetHTMLSinglePageState(arg bool) bool {
 	return e.configuration.Document.HTML.SinglePage
 }
 
+func (e *stateStruct) GetHTMLMetaTitle(arg string) string {
+	if arg != "" {
+		return arg
+	}
+
+	if e.configuration.Document.HTML.Meta.Title != "" {
+		return e.configuration.Document.HTML.Meta.Title
+	}
+
+	return "documentation"
+}
+
+func (e *stateStruct) GetHTMLMetaLanguage(arg string) string {
+	if arg != "" {
+		return arg
+	}
+
+	if e.configuration.Document.HTML.Meta.Language != "" {
+		return e.configuration.Document.HTML.Meta.Language
+	}
+
+	return "en"
+}
+
+func (e *stateStruct) GetHTMLMetaDescription(arg string) string {
+	if arg != "" {
+		return arg
+	}
+
+	if e.configuration.Document.HTML.Meta.Description != "" {
+		return e.configuration.Document.HTML.Meta.Description
+	}
+
+	return ""
+}
+
+func (e *stateStruct) GetHTMLMetaKeywords(arg string) string {
+	if arg != "" {
+		return arg
+	}
+
+	if e.configuration.Document.HTML.Meta.Keywords != "" {
+		return e.configuration.Document.HTML.Meta.Keywords
+	}
+
+	return ""
+}
+
 func (e *stateStruct) GetDocumentHTMLOutputPath(arg string) string {
 	if arg != "" {
 		return arg
diff --git a/development/examples/example3/build/index.html b/development/examples/example3/build/index.html
index f0ce839..64d66e0 100644
--- a/development/examples/example3/build/index.html
+++ b/development/examples/example3/build/index.html
@@ -1,12 +1,12 @@
 <!DOCTYPE html>
-<html lang="">
+<html lang="de">
 <head>
     <meta charset="UTF-8"/>
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1.0, shrink-to-fit=no">
     <link href="assets/images/favicon.png" rel="icon"/>
-    <title></title>
-    <meta name="description" content="">
+    <title>Example 3</title>
+    <meta name="description" content="Example 3">
     <link rel="stylesheet" type="text/css" href="assets/vendor/bootstrap/css/bootstrap.min.css"/>
     <link rel="stylesheet" type="text/css" href="assets/vendor/font-awesome/css/all.min.css"/>
     <link rel="stylesheet" type="text/css" href="assets/vendor/magnific-popup/magnific-popup.min.css"/>
@@ -91,59 +91,84 @@
         ============================ -->
         <div class="idocs-navigation bg-light">
             
-        </div>
+            <ul class="nav flex-column ">
+                
+                <li class="nav-item">
+                    <a class="nav-link" href="#rel-titel-1-level1">Titel 1 (level1)</a>
+
+                    
+                    <ul class="nav flex-column ">
+                        
+                        <li class="nav-item">
+                            <a class="nav-link" href="#rel-titel-2-level2">Titel 2 (level2)</a>
+                        </li>
+                        
+                    </ul>
+                    
+
+
+                </li>
+                
+                <li class="nav-item">
+                    <a class="nav-link" href="#rel-titel-3-level3">Titel 3 (level3)</a>
+
+                    
+                    <ul class="nav flex-column ">
+                        
+                        <li class="nav-item">
+                            <a class="nav-link" href="#rel-titel-4-level2">Titel 4 (level2)</a>
+                        </li>
+                        
+                    </ul>
+                    
+
+
+                </li>
+                
+                <li class="nav-item">
+                    <a class="nav-link" href="#rel-a">A</a>
+
+                    
+                    <ul class="nav flex-column ">
+                        
+                        <li class="nav-item">
+                            <a class="nav-link" href="#rel-aa">AA</a>
+                        </li>
+                        
+                    </ul>
+                    
 
 
-        <!--            <ul class="nav flex-column ">-->
-        <!--                <li class="nav-item"><a class="nav-link active" href="#idocs_start">Getting Started</a>-->
-        <!--                    <ul class="nav flex-column">-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_installation">Installation</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_html_structure">HTML Structure</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_sass">Sass</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_color_schemes">Color Schemes</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_theme_customization">Customization</a>-->
-        <!--                        </li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_logo_settings">Logo Settings</a></li>-->
-        <!--                    </ul>-->
-        <!--                </li>-->
-        <!--                <li class="nav-item"><a class="nav-link" href="#idocs_layout">Layout</a>-->
-        <!--                    <ul class="nav flex-column">-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_header">Header</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_navbar">Navbar</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_sidebar">Sidebar</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_footer">Footer</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_box_layout">Box Layout</a></li>-->
-        <!--                    </ul>-->
-        <!--                </li>-->
-        <!--                <li class="nav-item"><a class="nav-link" href="#idocs_content">Content</a>-->
-        <!--                    <ul class="nav flex-column">-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_typography">Typography</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_code">Code</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_table">Table</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_icons">Icons</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_image">Image</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_video">Video</a></li>-->
-        <!--                    </ul>-->
-        <!--                </li>-->
-        <!--                <li class="nav-item"><a class="nav-link" href="#idocs_components">Components</a>-->
-        <!--                    <ul class="nav flex-column">-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_accordion">Accordion</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_tabs">Tabs</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_social_icon">Social Icon</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_helper_classes">Helper Classes</a></li>-->
-        <!--                    </ul>-->
-        <!--                </li>-->
-        <!--                <li class="nav-item"><a class="nav-link" href="#idocs_faq">FAQ</a></li>-->
-        <!--                <li class="nav-item"><a class="nav-link" href="#idocs_source_credits">Source & Credits</a></li>-->
-        <!--                <li class="nav-item"><a class="nav-link" href="#idocs_support">Support</a></li>-->
-        <!--                <li class="nav-item"><a class="nav-link" href="#idocs_templates">More Templates</a></li>-->
-        <!--                <li class="nav-item"><a class="nav-link" href="#idocs_changelog">Changelog</a>-->
-        <!--                    <ul class="nav flex-column">-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#v1-1">v1.1</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#v1-0">v1.0</a></li>-->
-        <!--                    </ul>-->
-        <!--                </li>-->
-        <!--            </ul>-->
+                </li>
+                
+                <li class="nav-item">
+                    <a class="nav-link" href="#rel-neuer-titel-1-level1">Neuer Titel 1 (level1)</a>
+
+                    
+                    <ul class="nav flex-column ">
+                        
+                        <li class="nav-item">
+                            <a class="nav-link" href="#rel-neuer-titel-2-level2">Neuer Titel 2 (level2)</a>
+                        </li>
+                        
+                    </ul>
+                    
+
+
+                </li>
+                
+                <li class="nav-item">
+                    <a class="nav-link" href="#rel-n1">N1</a>
+
+                    
+
+
+                </li>
+                
+            </ul>
+            
+        </div>
+
     </div>
 
     <!-- Docs Content
@@ -165,7 +190,7 @@ Lorem Ipsum is simply dummy text of the printing and typesetting industry.</p>
 Lorem Ipsum is simply dummy text of the printing and typesetting industry.
 Lorem Ipsum is simply dummy text of the printing and typesetting industry.</p>
 
-<h3 id="rel-titel-3-level3">Titel 3 (level3)</h3>
+<h1 id="rel-titel-3-level3">Titel 3 (level3)</h1>
 
 <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry.
 Lorem Ipsum is simply dummy text of the printing and typesetting industry.
@@ -182,6 +207,10 @@ Lorem Ipsum is simply dummy text of the printing and typesetting industry.</p>
 <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry.
 Lorem Ipsum is simply dummy text of the printing and typesetting industry.
 Lorem Ipsum is simply dummy text of the printing and typesetting industry.</p>
+
+<h1 id="rel-a">A</h1>
+
+<h2 id="rel-aa">AA</h2>
 
             </section>
             <hr class="divider">
@@ -198,6 +227,12 @@ Lorem Ipsum is simply dummy text of the printing and typesetting industry.</p>
             </section>
             <hr class="divider">
             
+            <section id="925145316dfa630953b809f55ec1d870">
+                <h1 id="rel-n1">N1</h1>
+
+            </section>
+            <hr class="divider">
+            
 
         </div>
     </div>
diff --git a/development/examples/example3/config/web.yaml b/development/examples/example3/config/web.yaml
index 464c6a8..48ff4ca 100644
--- a/development/examples/example3/config/web.yaml
+++ b/development/examples/example3/config/web.yaml
@@ -6,5 +6,9 @@ Document:
     Output: ../build/index.html
     SinglePage: true
     Templates:
-      Markdown: ../templates/html/web.md
-      HTML: ../templates/html/index.html
\ No newline at end of file
+      HTML: ../templates/html/index.html
+    Meta:
+      Title: "Example 3"
+      Description: "Example 3"
+      Keywords: "Example 3"
+      Language: "de"
diff --git a/development/examples/example3/doc/feature-1.md b/development/examples/example3/doc/feature-1.md
index dd96cd4..135bc92 100644
--- a/development/examples/example3/doc/feature-1.md
+++ b/development/examples/example3/doc/feature-1.md
@@ -19,7 +19,7 @@ Language: de
 
 ...
 
-# Titel 1 (level1)
+# Titel 1 (level1) 
 
 Lorem Ipsum is simply dummy text of the printing and typesetting industry.
 Lorem Ipsum is simply dummy text of the printing and typesetting industry.
@@ -31,7 +31,7 @@ Lorem Ipsum is simply dummy text of the printing and typesetting industry.
 Lorem Ipsum is simply dummy text of the printing and typesetting industry.
 Lorem Ipsum is simply dummy text of the printing and typesetting industry.
 
-### Titel 3 (level3)
+# Titel 3 (level3)
 
 Lorem Ipsum is simply dummy text of the printing and typesetting industry.
 Lorem Ipsum is simply dummy text of the printing and typesetting industry.
@@ -49,4 +49,10 @@ Lorem Ipsum is simply dummy text of the printing and typesetting industry.
 Lorem Ipsum is simply dummy text of the printing and typesetting industry.
 Lorem Ipsum is simply dummy text of the printing and typesetting industry.
 
+# A
+
+## AA
+
+
+
 
diff --git a/development/examples/example3/doc/feature-3.md b/development/examples/example3/doc/feature-3.md
new file mode 100644
index 0000000..c08e94b
--- /dev/null
+++ b/development/examples/example3/doc/feature-3.md
@@ -0,0 +1,5 @@
+
+
+# N1
+
+
diff --git a/development/examples/example3/templates/html/index.html b/development/examples/example3/templates/html/index.html
index 62f58c2..3cbb210 100644
--- a/development/examples/example3/templates/html/index.html
+++ b/development/examples/example3/templates/html/index.html
@@ -92,66 +92,27 @@
         <div class="idocs-navigation bg-light">
             {{if .DocumentTree }}
             <ul class="nav flex-column ">
-                {{range $children := .DocumentTree.Children}}
+                {{range $children1 := .DocumentTree.Children}}
                 <li class="nav-item">
-                    <a class="nav-link" href="#{{ $children.Payload.ID }}">{{ $children.Payload.Title }}</a>
+                    <a class="nav-link" href="#{{ $children1.Payload.ID }}">{{ $children1.Payload.Title }}</a>
+
+                    {{if $children1.Children }}
+                    <ul class="nav flex-column ">
+                        {{range $children2 := $children1.Children}}
+                        <li class="nav-item">
+                            <a class="nav-link" href="#{{ $children2.Payload.ID }}">{{ $children2.Payload.Title }}</a>
+                        </li>
+                        {{end}}
+                    </ul>
+                    {{end}}
+
+
                 </li>
                 {{end}}
             </ul>
             {{end}}
         </div>
 
-
-        <!--            <ul class="nav flex-column ">-->
-        <!--                <li class="nav-item"><a class="nav-link active" href="#idocs_start">Getting Started</a>-->
-        <!--                    <ul class="nav flex-column">-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_installation">Installation</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_html_structure">HTML Structure</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_sass">Sass</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_color_schemes">Color Schemes</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_theme_customization">Customization</a>-->
-        <!--                        </li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_logo_settings">Logo Settings</a></li>-->
-        <!--                    </ul>-->
-        <!--                </li>-->
-        <!--                <li class="nav-item"><a class="nav-link" href="#idocs_layout">Layout</a>-->
-        <!--                    <ul class="nav flex-column">-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_header">Header</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_navbar">Navbar</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_sidebar">Sidebar</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_footer">Footer</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_box_layout">Box Layout</a></li>-->
-        <!--                    </ul>-->
-        <!--                </li>-->
-        <!--                <li class="nav-item"><a class="nav-link" href="#idocs_content">Content</a>-->
-        <!--                    <ul class="nav flex-column">-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_typography">Typography</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_code">Code</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_table">Table</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_icons">Icons</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_image">Image</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_video">Video</a></li>-->
-        <!--                    </ul>-->
-        <!--                </li>-->
-        <!--                <li class="nav-item"><a class="nav-link" href="#idocs_components">Components</a>-->
-        <!--                    <ul class="nav flex-column">-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_accordion">Accordion</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_tabs">Tabs</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_social_icon">Social Icon</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#idocs_helper_classes">Helper Classes</a></li>-->
-        <!--                    </ul>-->
-        <!--                </li>-->
-        <!--                <li class="nav-item"><a class="nav-link" href="#idocs_faq">FAQ</a></li>-->
-        <!--                <li class="nav-item"><a class="nav-link" href="#idocs_source_credits">Source & Credits</a></li>-->
-        <!--                <li class="nav-item"><a class="nav-link" href="#idocs_support">Support</a></li>-->
-        <!--                <li class="nav-item"><a class="nav-link" href="#idocs_templates">More Templates</a></li>-->
-        <!--                <li class="nav-item"><a class="nav-link" href="#idocs_changelog">Changelog</a>-->
-        <!--                    <ul class="nav flex-column">-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#v1-1">v1.1</a></li>-->
-        <!--                        <li class="nav-item"><a class="nav-link" href="#v1-0">v1.0</a></li>-->
-        <!--                    </ul>-->
-        <!--                </li>-->
-        <!--            </ul>-->
     </div>
 
     <!-- Docs Content
-- 
GitLab