{#
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License.  You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
#}

{% if meta is defined and meta is not none %}
    {% set check_meta = True %}
{% else %}
    {% set check_meta = False %}
{% endif %}

{% if check_meta and 'github_url' in meta %}
    {% set display_github = True %}
{% endif %}

<div role="navigation" aria-label="breadcrumbs navigation" class="d-none d-md-block d-print-none">

    <ul class="breadcrumb">
        {% block breadcrumbs %}
            <li class="breadcrumb-item"><a href="{{ pathto(master_doc) }}" class="icon icon-home"> {{ _('Home') }}</a></li>
            {% for doc in parents %}
                <li class="breadcrumb-item"><a href="{{ doc.link|e }}">{{ doc.title }}</a></li>
            {% endfor %}
            <li class="breadcrumb-item"><a href="{{ pagename.split('/')[-1] }}{{ file_suffix }}"> {{ title }}</a></li>
        {% endblock %}
    </ul>
</div>
