<!--
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.
-->
{{> www/common-header.tmpl }}

<table id="flags" class='table table-hover table-bordered'
       style='table-layout:fixed; word-wrap: break-word'>
  <thead>
    <tr>
      <th>Flag</th>
      <th>Description</th>
      <th>Default</th>
      <th>Current value</th>
      <th>Experimental</th>
    </tr>
  </thead>
  <tbody>
    {{#flags}}
    <tr {{?value_changed}}class="active"{{/value_changed}}>
      <td> <samp>{{name}} ({{type}})</samp></td>
      <td>{{description}}</td>
      <td><samp>{{default}}</samp></td>
      <td><samp>{{current}}</samp></td>
      <td><samp>{{experimental}}</samp></td>
    </tr>
    {{/flags}}
  </tbody>
</table>

<script>
    $(document).ready(function() {
        $('#flags').DataTable({
            "order": [[ 1, "desc" ]],
            "pageLength": 100
        });
    });
</script>

{{> www/common-footer.tmpl }}
