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

{% block title %}{{neighborhood.name}} / Moderate{% endblock %}

{% block header %}{{neighborhood.name}} Moderation{% endblock %}

{% block content %}
  <h2>Invite Projects?</h2>
  <form method="POST" action="invite" class="grid-10">
    <p>
    <select name="neighborhood_id">
      {% for n in neighborhoods %}
        <option value="{{n._id}}">
          {{n.name}}
        </option>
      {% endfor %}
    </select>
    <label for="pid">Project Shortname</label>
    <input type="text" name="pid" id="pid">
	</p>
    <input type="submit" name="invite" value="Invite!"/>
    <input type="submit" name="uninvite" value="Cancel Invitation!"/>
    {{lib.csrf_token()}}
  </form>


  <div style="clear:both">&nbsp;</div>

  <h2>Evict Projects?</h2>
  <form method="POST" action="evict" class="grid-10">
    <select name="pid">
      {% for p in neighborhood.projects if p.is_root and not p.is_nbhd_project %}
        <option value="{{p.shortname}}">
          {{p.name}} ({{p.shortname}})
        </option>
      {% endfor %}
    </select>
    <input type="submit" value="Evict!"/>
    {{lib.csrf_token()}}
  </form>
{% endblock %}
