<!--
 Licensed 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. See accompanying LICENSE file.
-->
{{partial "header.html" .}}
<div class="container">

  <h1>Documentation</h1>

Choose a version:

<p>
  <table class="table table-striped">
     <tr>
       <td><a href="/docs/edge/">edge (master)</a></td>
     </tr>
   {{range first 5 (where (where .Site.Pages "Section" "release") ".Params.linked" true) }}
     <tr>
       <td><a href="/docs/{{.File.BaseFileName }}">{{.File.BaseFileName}}</a></td>
     </tr>
  {{end}}
  </table>
</p>

  {{.Content}}
</div>
{{partial "footer.html" .}}
