---
layout: default
---

<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->


<div class="docs-container container-fluid">
  <div class="row">
    <nav class="sidebar-nav hidden-md-down col-lg-3">
      {% include sidebar.html %}
    </nav>

    <article class="col-xs-12 col-sm-12 col-md-12 col-lg-7">
      <section class="docs-header">
        <h1 class="docs-title">{{ page.title }}</h1>
        {% if page.lead %}<span class="docs-lead">{{ page.lead }}</span><br />{% endif %}
        <section class="tags">
          {% for tag in page.tags %}
          <!-- <span class="badge badge-pill badge-primary">{{ tag }}</span> -->
          <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#modal-{{ tag | replace: " ", "-" | downcase }}">{{ tag }}</button>
          {% include tags-modal.html %}
          {% endfor %}
        </section>

        <hr class="hr">
      </section>

      <section class="content">
        {{ content }}
      </section>
    </article>

    <nav class="toc-bar hidden-md-down col-lg-2">
      {% unless page.toc_disable %}
      <div id="toc">
        <h4>{{ page.title }}</h4>
      </div>
      {% endunless %}
    </nav>
  </div>
</div>
