<nav id="sidebar">
  <div id="header-wrapper">
    <div id="header">
      {{ partial "logo.html" . }}
    </div>
</div>


  <div class="highlightable">
    <ul class="topics">
      {{ if $.Site.Params.menu }}
        {{ $.Scratch.Set "menuItems" $.Site.Params.menu }}
      {{ else }}
        {{ $.Scratch.Set "_pages" (slice) }}
        {{ range $key, $value := .Site.Sections }}
          {{ $sectionPage := $.Site.GetPage "section" $key }}
          {{ if $sectionPage.Content }}
            {{ $.Scratch.Add "_pages" $sectionPage }}
          {{ else if gt $value.Len 0 }}
            {{ $.Scratch.Add "_pages" (index $value 0).Page }}
          {{ end }}
        {{ end }}
        {{ $.Scratch.Set "menuItems" (slice)}}
        {{ range $key, $value := sort ($.Scratch.Get "_pages") "Weight" }}
          {{ $.Scratch.Add "menuItems" $value.Section }}
        {{ end }}
      {{ end }}
      {{ $menuItems := $.Scratch.Get "menuItems" }}
      {{ range $i, $key := $menuItems }}
      {{ if ne $key "" }}

      {{ $value := (index $.Site.Sections $key) }}
      {{ $.Scratch.Set "_value" $value }}
      {{ with $index := $.Site.GetPage "section" $key }}
        {{ if .Content }}
          {{ $.Scratch.Set "first" $index }}
        {{ else if gt $value.Len 0}}
          {{ $.Scratch.Set "first" (index $value 0).Page }}
          {{ if gt $value.Len 1 }}
            {{ $.Scratch.Set "_value" (after 1 $value) }}
          {{ else }}
            {{ $.Scratch.Set "_value" nil }}
          {{ end }}
        {{ end }}
      {{ end }}
      {{ $first := $.Scratch.Get "first" }}
      {{ $value := $.Scratch.Get "_value" }}

      <li class="dd-item {{ if eq $.UniqueID $first.UniqueID }}active{{ end }} {{if eq $.Section $first.Section }}parent{{ end }}" data-nav-id="{{ $first.RelPermalink }}">
        <a href="{{ $first.RelPermalink }}">
          <span>
            {{ if isset $first.Params "icon" }}
              {{ printf $first.Params.icon | safeHTML }}
            {{ end }}
             {{ $first.Title }}
            {{ if $.Site.Params.showVisitedLinks}}
              <i class="fa fa-check read-icon"></i>
             {{ end }}
           </span>
        </a>
        {{ if gt $value.Len 0}}
        <ul>
          {{ range $k, $p := $value }}
            <li class="dd-item {{ if eq $.UniqueID $p.Page.UniqueID }}active{{ end }}" data-nav-id="{{ $p.Page.RelPermalink }}">
              <a href="{{ $p.Page.RelPermalink }}">
                <span>{{ $p.Page.Title }}    {{ if $.Site.Params.showVisitedLinks}}  <i class="fa fa-check read-icon">  {{ end }} </i></span>
              </a>
            </li>
          {{ end }}
        </ul>
        {{ end }}
      </li>
      {{ end }}
      {{ end }}
    </ul>
    <hr>
     {{ if .Site.Params.showVisitedLinks}}
     <a class="padding" href="#" data-clear-history-toggle=""><i class="fa fa-fw fa-history"></i> Clear History</a>
     {{ end }}
  </div>
</nav>
