{{- $context := . -}}

{{- $pages := union .RegularPages .Sections -}}
{{- $pages = where $pages "Params.sidebar.exclude" "!=" true -}}

{{- $data := slice -}}

{{- range $pages.ByWeight -}}
  {{ $structure := (partial "sidebar/section-walk" .) | unmarshal -}}
  {{ $data = $data | append $structure -}}
{{ end -}}

{{- define "partials/sidebar/section-walk" -}}
  {{- with . -}}
  {
    "title": "{{ partial "utils/title" . }}",
    "link": "{{ .RelPermalink }}",
    "toc": {{ partial "sidebar/section-page-toc" . }},
    "open": {{ .Params.sidebar.open | default false }}
    {{- if .IsSection }},
    "items": [
      {{ $pages := union .RegularPages .Sections -}}
      {{ $pages = where $pages "Params.sidebar.exclude" "!=" true -}}
      {{ range $index, $page := $pages.ByWeight -}}
        {{ partial "sidebar/section-walk" . }}{{ if not (ge $index (sub (len $pages) 1)) }},{{ end -}}
      {{ end -}}
    ]
    {{ end -}}
  }
  {{- end }}
{{- end -}}

{{- define "partials/sidebar/section-page-toc" -}}
  {{/* Get level 2 headings list used mainly for mobile navigation */}}
  [
    {{- with .Fragments.Headings -}}
      {{/* Loop over level 1 headings */}}
      {{- range . }}
        {{- with .Headings }}
          {{ $headings := . }}
          {{- range $index, $heading := $headings }}
            {{ $heading.Title | jsonify (dict "noHTMLEscape" true) }}
            {{- if not (ge $index (sub (len $headings) 1)) }},{{ end -}}
          {{ end -}}
        {{- end -}}
      {{ end -}}
    {{- end -}}
  ]
{{- end -}}

{{ return ($data | jsonify (dict "noHTMLEscape" true)) }}
