<!-- 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/latest/">{{ 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/latest/">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>
        <h1>
          Join the 4.0 World Party | April 28, 2021
        </h1>
        <p>
        <a class="btn btn-default download" role="button" href="{{ base }}worldparty/">Join Party</a>
        </p>
        <p>
      </div><!-- /.jumbotron -->
      {% endif %}
    </div>
  </nav><!-- /.navbar -->
</div><!-- /.topnav -->
