{#-
       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 = 'delete_projects' %}

{% extends 'allura:templates/site_admin.html' %}

{% block title %}Delete Projects{% endblock %}
{% block header %}Delete Projects{% endblock %}

{% block content %}
  <div class="grid-19">
    <p>
      Put project URLs separated by newline (anything after "#" is considered comment and ignored).
      <a href="https://forge-allura.apache.org/docs/getting_started/administration.html#deleting-projects" target="_blank">Detailed docs</a>
    </p>
    {% set form_step = 'delete' %}
    {% include 'allura:templates/site_admin_delete_projects_form.html' %}
  </div>
{% endblock %}

{% block extra_css %}
<style>
#delete_projects textarea {
  width: 90%;
  height: 100px;
}
.warning { color: red; }
.pad table { width: 98%; }
</style>
{% endblock %}
