{% assign navigation = site.data.navigation.t[page.lang][include.nav] %}

<nav class="nav__list">
  {% if page.sidebar.title %}<h3 class="nav__title" style="padding-left: 0;">{{ page.sidebar.title }}</h3>{% endif %}
  <input id="ac-toc" name="accordion-toc" type="checkbox" />
  <label for="ac-toc">{{ site.data.ui-text[page.lang].menu_label | default: "Toggle Menu" }}</label>
  <ul class="nav__items">
    {% for nav in navigation %}
      <li>
        {% if nav.url %}
          {% comment %} internal/external URL check {% endcomment %}
          {% if nav.url contains "://" %}
            {% assign domain = "" %}
          {% else %}
            {% assign domain = site.url | append: site.baseurl %}
          {% endif %}

          <a href="{{ domain }}{{ nav.url }}"><span class="nav__sub-title nav__sub-title-with-url">{{ nav.title }}</span></a>
        {% else %}
          <span class="nav__sub-title">{{ nav.title }}</span>
        {% endif %}

        {% if nav.children != null %}
        <ul>
          {% for child in nav.children %}
            {% comment %} internal/external URL check {% endcomment %}
            {% if child.url contains "://" %}
              {% assign domain = "" %}
            {% else %}
              {% assign domain = site.url | append: site.baseurl %}
            {% endif %}

            {% comment %} set "active" class on current page {% endcomment %}
            {% if child.url == page.url %}
              {% assign active = "active" %}
            {% else %}
              {% assign active = "" %}
            {% endif %}

            <li><a href="{{ domain }}{{ child.url }}" class="{{ active }}">{{ child.title }}</a></li>
          {% endfor %}
        </ul>
        {% endif %}
      </li>
    {% endfor %}
  </ul>
</nav>
