---
title: Documentation
sectionid: docs
---

<!DOCTYPE html>
<html lang="en">
  <head>
    {% include site_head.html %}
  </head>

  <body>
    {% include page_header.html %}

    <div class="container doc-container">
      {% assign parts = (page.url | split: '/') %}
      {% assign version = parts[2] %}

      {% if version != site.druid_versions[0].versions[0].version and version != 'latest' %}
      <p> Looking for the <a href="/docs/{{ site.druid_versions[0].versions[0].version }}/">latest stable documentation</a>?</p>
      {% endif %}

      <div class="row">
        <div class="col-md-9 doc-content">
          <p>
            <a class="btn btn-default btn-xs visible-xs-inline-block visible-sm-inline-block" href="#toc">Table of Contents</a>
          </p>
          {{ content }}
        </div>
        <div class="col-md-3">
          <div class="searchbox">
            <gcse:searchbox-only></gcse:searchbox-only>
          </div>
          <div id="toc" class="nav toc hidden-print">
          </div>
        </div>
      </div>
    </div>

    {% include page_footer.html %}

    <script>
    $(function() {
      $(".toc").load("/docs/{{ version }}/toc.html");

      // There is no way to tell when .gsc-input will be async loaded into the page so just try to set a placeholder until it works
      var tries = 0;
      var timer = setInterval(function() {
        tries++;
        if (tries > 300) clearInterval(timer);
        var searchInput = $('input.gsc-input');
        if (searchInput.length) {
          searchInput.attr('placeholder', 'Search');
          clearInterval(timer);
        }
      }, 100);
    });
    </script>
  </body>
</html>
