<div class="sidebar">
  <div class="container sidebar-sticky">
    <div class="sidebar-about">
      <a href="{{ site.github.url }}">
        <img alt="Zipkin logo" src="{{ site.github.url }}/public/img/zipkin-logo-200x119.jpg"
             class="sidebar-logo">
      </a>
      {% for link in site.data.sidebar_links %}
      <a href="{{ link.url }}" target="_blank" title="{{ link.text }}">
        <img class="sidebar-social-icon" alt="{{ link.text }}" src="{{ site.github.url }}/public/img/{{ link.img }}">
      </a>
      {% endfor %}
    </div>

    <nav class="sidebar-nav">
      {% assign pages_list = site.pages | sort:"weight" %}
      {% for node in pages_list %}
        {% if node.title != null %}
          {% if node.layout == "page" %}
            <a class="sidebar-nav-item{% if page.url == node.url %} active{% endif %}" href="{{ node.url | prepend: site.github.url }}">{{ node.title }}</a>
          {% endif %}
        {% endif %}
      {% endfor %}
    </nav>
    <nav>
      <span>Apache Links</span>
      <a class="sidebar-nav-item" href="http://www.apache.org/">Apache Software Foundation</a>
      <a class="sidebar-nav-item" href="http://www.apache.org/licenses/">License</a>
      <a class="sidebar-nav-item" href="http://www.apache.org/events/current-event">Events</a>
      <a class="sidebar-nav-item" href="http://www.apache.org/foundation/thanks">Thanks</a>
      <a class="sidebar-nav-item" href="http://www.apache.org/security">Security</a>
      <a class="sidebar-nav-item" href="http://www.apache.org/foundation/sponsorship">Sponsor Apache</a>
    </nav>
  </div>
</div>
