<div role="navigation" aria-label="breadcrumbs navigation">
  <ul class="wy-breadcrumbs">
    <li><a href="/documentation/">Docs</a></li>
    {% if page %}
    {% for doc in page.ancestors %}
        {% if doc.children[0].url and doc.children[0].url != page.url %}
          <li>&raquo; <a href="{{ doc.children[0].url|e }}">{{ doc.title }}</a></li>
        {% else %}
          <li>&raquo; {{ doc.title }}</li>
        {% endif %}
      {% endfor %}
      {% if page.title != "toc" %}
        <li>&raquo; {{ page.title }}</li>
      {% endif %}
    {% endif %}
    {% if config.repo_url %}
      <li class="wy-breadcrumbs-aside">
        {%- block repo %}
        {% if page and page.edit_url %}
          <a href="{{ page.edit_url }}"
          {%- if config.repo_name|lower == 'github' %}
            class="icon icon-github"
          {%- elif config.repo_name|lower == 'bitbucket' %}
            class="icon icon-bitbucket"
          {% endif %}> Edit on {{ config.repo_name }}</a>
        {% endif %}
        {%- endblock %}
      </li>
    {% endif %}
  </ul>
</div>
