<!-- breadcrumbs -->
<div class="topnav">
  <div class="container breadcrumb-container">
    <ul class="breadcrumb">
      <li>
        <div class="dropdown">
          <img class="asf-logo" src="{{ base }}img/asf_feather.png" />
          <a data-toggle="dropdown" href="#">Apache Software Foundation <span class="caret"></span></a>
          <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
            <li><a href="http://www.apache.org">Apache Homepage</a></li>
            <li><a href="http://www.apache.org/licenses/">License</a></li>
            <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
            <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
            <li><a href="http://www.apache.org/security/">Security</a></li>
          </ul>
        </div>
      </li>

      {% if page.is_homepage %}
      <li>Apache Cassandra</li>
      {% else %}
      <li><a href="{{ base }}">Apache Cassandra</a></li>
      {% endif %}

      {% unless page.is_homepage %}
        {% if page.is_sphinx_doc %}
        <li><a href="{{ base }}doc">{{ page.title }}</a></li>
        {% else %}
        <li>{{ page.title }}</li>
        {% endif %}
      {% endunless %}

      {% if page.doc-parent %}
      <li><a href="./">{{ page.doc-parent }}</a></li>
      {% endif %}

      {% if page.doc-title %}
      <li>{{ page.doc-title }}</li>
      {% endif %}
    </ul>
  </div>

  <!-- navbar -->
  <nav class="navbar navbar-default navbar-static-top" role="navigation">
    <div class="container">
      <div class="navbar-header">
        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#cassandra-menu" aria-expanded="false">
          <span class="sr-only">Toggle navigation</span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand" href="{{ base }}"><img src="{{ base }}img/cassandra_logo.png" alt="Apache Cassandra logo" /></a>
      </div><!-- /.navbar-header -->

      <div id="cassandra-menu" class="collapse navbar-collapse">
        <ul class="nav navbar-nav navbar-right">
          <li><a href="{{ base }}">Home</a></li>
          <li><a href="{{ base }}download/">Download</a></li>
          <li><a href="{{ base }}doc/">Documentation</a></li>
          <li><a href="{{ base }}community/">Community</a></li>
        </ul>
      </div><!-- /#cassandra-menu -->

      {% if page.is_homepage %}
      <div class="jumbotron">
        <h1>
          Manage massive amounts of data, fast, without losing sleep
        </h1>
        <p>
        <a class="btn btn-default download" role="button" href="{{ base }}download/">Download Cassandra</a>
        </p>
        <p>
        {% assign latest = site.data.releases.latest.name %}
          <a class="changelog"
             href="{{ latest | changelog_link }}">Cassandra {{ latest }} Changelog
          </a>
        </p>
      </div><!-- /.jumbotron -->
      {% endif %}
    </div>
  </nav><!-- /.navbar -->
</div><!-- /.topnav -->
