<!--!
  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.
-->

<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:py="http://genshi.edgewall.org/"
      xmlns:i18n="http://genshi.edgewall.org/i18n"
      xmlns:xi="http://www.w3.org/2001/XInclude">
  <xi:include href="layout.html" />
  <head>
    <title>$title</title>
    <script type="text/javascript" py:if="show_args_form">
      jQuery(document).ready(function($) {
        $("fieldset legend").enableFolding(false);
      });
    </script>
  </head>

  <body>
    <div id="content" class="report row">
      <h1>$title
        <small py:if="numrows" class="numrows">(${ngettext('%(num)s match', '%(num)s matches', numrows)})</small>
      </h1>

      <div class="span9">
        <div py:if="description" id="description" xml:space="preserve">
          ${wiki_to_html(context, description)}
        </div>
  
        <div class="buttons control-group">
          <form py:if="'REPORT_MODIFY' in perm(report.resource)" action="" method="get">
            <div>
              <input type="hidden" name="action" value="edit" />
              <input type="submit" value="${_('Edit report')}" accesskey="e" 
                  class="btn" />
            </div>
          </form>
          <form py:if="'REPORT_CREATE' in perm(report.resource)" action="" method="get">
            <div>
              <input type="hidden" name="action" value="copy" />
              <input type="submit" value="${_('Copy report')}" class="btn" />
            </div>
          </form>
          <form py:if="'REPORT_DELETE' in perm(report.resource)" action="" method="get">
            <div>
              <input type="hidden" name="action" value="delete" />
              <input type="submit" value="${_('Delete report')}" 
                  class="btn" />
            </div>
          </form>
        </div>
      </div>
      <div class="span3">
        <form method="get" action="">
          <div id="prefs" class="well">
            <div>
              <label>
                Max items per page
                <input type="text" naime="max" size="10" value="${max}" 
                    class="input-mini" />
              </label>
              <fieldset id="reportfilters" py:if="show_args_form">
                <legend class="foldable">Arguments</legend>
                <table summary="Report arguments">
                  <tbody>
                    <tr style="height: 1px"><td colspan="2"></td></tr>
                  </tbody>
                  <tbody py:for="(name, value) in sorted(args.items())" py:if="name != 'USER'">
                    <tr>
                      <th scope="row"><label>${name}</label></th>
                      <td class="filter">
                        <input type="text" name="${name}" value="${value or None}" size="42" />
                      </td>
                    </tr>
                  </tbody>
                </table>
              </fieldset>
            </div>
            <div class="buttons control-group">
              <input type="submit" value="${_('Update')}" class="btn btn-mini"/>
            </div>
          </div>
        </form>
      </div>
      <div class="span12">
        <xi:include href="widget_grid.html" />
      </div>

      <div py:if="message" class="alert">$message</div>

      <div id="help" class="help-block pull-right" i18n:msg="">
        <span class="label label-info">Note</span>
        See <a href="${href.wiki('TracReports')}">TracReports</a> for help on using and creating reports.
      </div>
    </div>
  </body>
</html>

