{% extends "base.html" %}

{% load static %}
{% load projecttags %}
{% load humanize %}

{% block pagecontent %}


  <div class="page-header top-air">
      <h1>
      {% if request.GET.filter and objects.paginator.count > 0 or request.GET.search and objects.paginator.count > 0 %}
          {{objects.paginator.count}} project{{objects.paginator.count|pluralize}} found
      {%elif request.GET.filter and objects.paginator.count == 0 or request.GET.search and objects.paginator.count == 0 %}
          No projects found
      {%else%}
          All projects
      {%endif%}
       </h1>
  </div>

  {% if objects.paginator.count == 0 %}
    <div class="row-fluid">
      <div class="alert">
        <form class="no-results input-append" id="searchform">
            <input id="search" name="search" class="input-xxlarge" type="text" value="
                {% if request.GET.search %}
                    {{request.GET.search}}
                {% endif %}"/>{% if request.GET.search %}<a href="javascript:$('#search').val('');searchform.submit()" class="add-on btn" tabindex="-1"><i class="icon-remove"></i></a>{% endif %}
            <button class="btn" type="submit" value="Search">Search</button>
            <button class="btn btn-link" onclick="javascript:$('#search').val('');searchform.submit()">Show all projects</button>
        </form>
      </div>
    </div>

  {% else %} {# We have builds to display #}
  {% include "basetable_top.html" %}
  {% for o in objects %}
    <tr class="data">
      <td><a href="{% url 'project' o.id %}">{{o.name}}</a></td>
      <td class="updated"><a href="{% url 'project' o.id %}">{{o.updated|date:"d/m/y H:i"}}</a></td>
      <td>
        {% if o.release %}
            <a href="{% url 'project' o.id %}#project-details">{{o.release.name}}</a>
        {% else %}
            No release available
        {% endif %}
      </td>
      <td><a href="{% url 'project' o.id %}#machine-distro">{{o.get_current_machine_name}}</a></td>
      {% if o.get_number_of_builds == 0 %}
      <td class="muted">{{o.get_number_of_builds}}</td>
      <td class="loutcome"></td>
      <td class="ltarget"></td>
      <td class="lerrors"></td>
      <td class="lwarnings"></td>
      <td class="limagefiles"></td>
      {% else %}
      <td><a href="{% url 'projectbuilds' o.id %}">{{o.get_number_of_builds}}</a></td>
      <td class="loutcome"><a href="{% url "builddashboard" o.get_last_build_id %}">{%if o.get_last_outcome == build_SUCCEEDED%}<i class="icon-ok-sign success"></i>{%elif o.get_last_outcome == build_FAILED%}<i class="icon-minus-sign error"></i>{%else%}{%endif%}</a></td>
      <td class="ltarget"><a href="{% url "builddashboard" o.get_last_build_id %}">{{o.get_last_target}} </a></td>
      <td class="lerrors">{% if o.get_last_errors %}<a class="errors.count error" href="{% url "builddashboard" o.get_last_build_id %}#errors">{{o.get_last_errors}} error{{o.get_last_errors|pluralize}}</a>{%endif%}</td>
      <td class="lwarnings">{% if o.get_last_warnings %}<a class="warnings.count warning" href="{% url "builddashboard" o.get_last_build_id %}#warnings">{{o.get_last_warnings}} warning{{o.get_last_warnings|pluralize}}</a>{%endif%}</td>
      <td class="limagefiles">
        {% if o.get_last_outcome == build_SUCCEEDED %}
        <a href="{%url "builddashboard" o.get_last_build_id %}#images">{{fstypes|get_dict_value:o.id}}</a>
        {% endif %}
      </td>

      {% endif %}
    </tr>
  {% endfor %}
  {% include "basetable_bottom.html" %}
  {% endif %} {# empty #}

{% endblock %}


