{#-
       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.
-#}
{% set page="stats" %}
{% extends 'allura:templates/site_admin.html' %}

{% block content %}
<h2>Neighborhood Stats</h2>
<table>
  <thead>
    <tr><th>Name</th><th>Projects</th><th>Configured</th></tr>
  </thead>
  {% for name, count, count_configured in neighborhoods %}
  <tr><td>{{name}}</td><td>{{count}}</td><td>{{count_configured}}</td></tr>
  {% endfor %}
</table>
{% endblock %}
