{#-
       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.
-#}
{% extends g.theme.master %}

{% block title %}{{c.project.name}} / Statistics / Admins list{% endblock %}

{% block header %}Admins list{% endblock %}

{% block content %}
<table>
  <thead>
    <tr>
      <th>Project</th>
      <th>Username</th>
      <th>E-mail</th>
      <th>Name</th>
    </tr>
  </thead>
  <tbody>
    {% for entry in entries %}
    <tr>
      <td style="white-space: nowrap"><a href="{{entry.project.url()}}">{{ entry.project.name }}</a></td>
      <td>{{ entry.user.username }}</td>
      <td>{{ entry.user.preferences.email_address or 'Unknown' }}</td>
      <td>{{ entry.user.display_name }}</td>
    </tr>
    {% endfor %}
  </tbody>
</table>

<div class="grid-15" style="clear:both">
  {{page_list.display(limit=limit, page=page, count=count)}}
</div>

{% endblock %}
