<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        {% if config.site_description %}<meta name="description" content="{{ config.site_description }}">{% endif %}
        {% if config.site_author %}<meta name="author" content="{{ config.site_author }}">{% endif %}
        <!-- This is broken by doc revisioning.
        {% if canonical_url %}<link rel="canonical" href="{{ canonical_url }}">{% endif %} -->
        {% if favicon %}<link rel="shortcut icon" href="{{ favicon }}">
        {% else %}<link rel="shortcut icon" href="{{ base_url }}/img/favicon.ico">{% endif %}

        <title>{% if page.title != 'Home' %}{{ page.title }} - {% endif %}{{ config.site_name }}</title>

        <link href="{{ base_url }}/css/bootstrap-3.0.3.min.css" rel="stylesheet">
        <link rel="stylesheet" href="{{ base_url }}/css/highlight.css">
        <link href="{{ base_url }}/css/base.css" rel="stylesheet">
        <link href="{{ base_url }}/css/custom.css" rel="stylesheet">
        <link href="{{ base_url }}/css/v2.css" rel="stylesheet">
        <link href="https://fonts.googleapis.com/css?family=Lato" rel="stylesheet">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
        {%- for path in config.extra_css %}
        <link href="{{ path }}" rel="stylesheet">
        {%- endfor %}

        <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
        <!--[if lt IE 9]>
            <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
            <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
        <![endif]-->

        {% if config.google_analytics %}
            <script>
            (function(i, s, o, g, r, a, m) {
    i["GoogleAnalyticsObject"] = r;
    (i[r] =
        i[r] ||
        function() {
            (i[r].q = i[r].q || []).push(arguments);
        }),
        (i[r].l = 1 * new Date());
    (a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]);
    a.async = 1;
    a.src = g;
    m.parentNode.insertBefore(a, m);
})(window, document, "script", "//www.google-analytics.com/analytics.js", "ga");

ga("create", "{{ config.google_analytics[0] }}", "{{ config.google_analytics[1] }}");
ga("send", "pageview");
</script>
        {% endif %}
    </head>

{% if page.title != None %}
    <body class="{{ page.title }}">
{% else %}
    <body class="home">
{% endif %}

        {% include 'main-banner.html' %}

        {% include "nav.html" %}

        {% set full_width_page_titles = [None, 'Home', 'Quick Start', 'About', 'Talks', 'Documentation', 'Download', 'Community', 'CVE'] %}

        <div class="container">
            {% if page.title == 'Home' %}
                {% include "landing.html" %}
            {% elif meta and meta.html %}
                {% include meta.html[0] %}
            {% elif page.title == 'About' %}
                {% include "about.html" %}
            {% elif page.title == 'Talks' %}
                {% include "talks.html" %}
            {% elif page.title == 'Quick Start' %}
                {% include "quick-start.html" %}
            {% elif page.title == 'Documentation' %}
                {% include "documentation.html" %}
            {% elif page.title == 'Download' %}
                {% include "download.html" %}
            {% elif page.title == 'Community' %}
                {% include "community.html" %}
            {% elif page.title == 'CVE' %}
                {% include "cve.html" %}
            {% else %}
                <div class="row">
                    <div class="col-md-3 v2-sidebar sidebar-container">{% include "toc.html" %}</div>

                    <div class="col-md-9" role="main">
                        <div class="doc-header">
                            {% include 'breadcrumbs.html' %}
                        </div>
                        {% for version in config.extra.versions %}
                          {% if config.extra.version == version.dir and not version.latest %}
                            <div class="alert alert-warning">
                                <p>
                                    Version {{ version.label }} is not the most recent version of the Apache Mynewt
                                    documentation. Click <a href="/latest">here</a> to read the latest
                                    version.
                                </p>
                            </div>
                          {% endif %}
                        {% endfor %}
                        {% block content %}
                            {{ page.content }}
                        {% endblock %}
                        <div class="row">
                            {% include 'next_prev_links.html' %}
                        </div>
                        {% include 'footer.html' %}
                    </div>
                </div>
            {% endif %}
            {% if page.title in full_width_page_titles or (meta and meta.html) %}
                {% include 'footer.html' %}
            {% endif %}
        </div>

        <script src="{{ base_url }}/js/jquery-1.10.2.min.js"></script>
        <script src="{{ base_url }}/js/bootstrap-3.0.3.min.js"></script>
        <script src="{{ base_url }}/js/highlight.pack.js"></script>
        <script src="{{ base_url }}/js/base.js"></script>
        <script src="{{ base_url }}/js/custom.js"></script>

        {%- for path in config.extra_javascript %}
            <script src="{{ path }}"></script>
        {%- endfor %}

    </body>
</html>
