{#-
       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 'allura:templates/repo/repo_master.html' %}

{% block title %}
  {% if c.app.repo %}
    {{title or 'Tags'}}: {{c.app.repo.name}}
  {% else %}
    {{title or 'Tags'}}
  {% endif %}
{% endblock %}

{% block header %}{{c.app.config.options.mount_label}} {{title or 'Tags'}}{% endblock %}

{% block content %}
  <div class="grid-19">
  {% for b in tags %}
    <a href="{{c.app.repo.url_for_commit(b.name)}}tree/" rel="nofollow">{{b.name}}</a><br>
  {% endfor %}
  </div>
{% endblock %}
