<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta name="format-detection" content="telephone=no">
    <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width" />
    <meta name="description" content="{% if page.excerpt %}{{ page.excerpt | strip_html | strip_newlines | truncate: 160 }}{% else if page.description %}{{ page.description }} {% else %}{{ site.description }}{% endif %}">

    <title>
        {% if page.title %}
            {% if page.title_suffix %}
                {{ page.title }} - {{ page.title_suffix }}
            {% else %}
                {{ page.title }} - {{ site.title_suffix }}
            {% endif %}
        {% else %}
            {{ site.title }}
        {% endif %}
    </title>

    <link rel="SHORTCUT ICON" href="{{ site.baseurl }}/favicon.ico"/>

    {% capture canonical_link %}{{ site.url }}{{ site.baseurl }}{{ page.url | replace:'index.html','' }}{% endcapture %}

    {% comment %}
    Canonical link for docs pages should point to the latest version of the page
    {% endcomment %}
    {% if page.version %}
        {% capture latest_url %}{{ page.url | replace_first: page.version, 'latest' }}{% endcapture %}

        {% if site.data.all-pages contains latest_url %}
            {% capture canonical_link %}{{ canonical_link | replace_first: page.version, 'latest' }}{% endcapture %}
        {% endif %}
    {% endif %}

    <link rel="canonical" href="{{ canonical_link }}">

    <!-- CSS -->
    <link rel="stylesheet" type="text/css" href="{{ site.baseurl }}/static/css/main.css">
    <link rel="stylesheet" type="text/css" href="{{ site.baseurl }}/static/css/lib/syntax.css">
    <!-- Algolia Search CSS -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css" />

    <!-- Fonts -->
    <!-- For attribution information, see www/attributions.html -->
    <link href='https://fonts.googleapis.com/css?family=Raleway:700,400,300,700italic,400italic,300italic' rel='stylesheet' type='text/css'>

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
        <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
        <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    <script type="text/javascript">
        var disqus_developer = 1; // this would set it to developer mode
    </script>

    <!-- JS -->
    <script defer type="text/javascript" src="{{ site.baseurl }}/static/js/lib/jquery-2.1.1.min.js"></script>
    <script defer type="text/javascript" src="{{ site.baseurl }}/static/js/lib/bootstrap.min.js"></script>

    {% include analytics.html %}
</head>
