<!-- 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>
          <li>
            <a href="{{ base }}blog">Blog</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 -->
