{% extends "base.html" %}

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

{% block title %} All projects - Toaster {% endblock %}

{% 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" data-project="{{ o.id }}">
      <td data-project-field="name">
          <a href="{% project_url o %}">{{o.name}}</a>
      </td>
      <td class="updated"><a href="{% project_url o %}">{{o.updated|date:"d/m/y H:i"}}</a></td>
      <td data-project-field="release">
        {% if o.release %}
            <a href="{% url 'project' o.id %}#project-details">{{o.release.name}}</a>
        {% elif o.is_default %}
            <span class="muted">Not applicable</span>
            <i class="icon-question-sign get-help hover-help" title="" data-original-title="This project does not have a release set. It simply collects information about the builds you start from the command line while Toaster is running" style="visibility: hidden;"></i>
        {% else %}
            No release available
        {% endif %}
      </td>
      <td data-project-field="machine">
        {% if o.is_default %}
            <span class="muted">Not applicable</span>
            <i class="icon-question-sign get-help hover-help" title="" data-original-title="This project does not have a machine set. It simply collects information about the builds you start from the command line while Toaster is running" style="visibility: hidden;"></i>
        {% else %}
            <a href="{% url 'project' o.id %}#machine-distro">{{o.get_current_machine_name}}</a>
        {% endif %}
      </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 %}


