{% set hide_left_bar = True %}
{% set show_right_bar = True %}
{% extends g.theme.master %}

{% block title %}{{c.project.homepage_title}}{% endblock %}

{% block header %}{{c.project.homepage_title}}{% endblock %}

{% block extra_css %}
    <link rel="stylesheet" type="text/css" 
          href="{{g.app_static('css/project_home.css')}}"/>
    <link rel="alternate" type="application/rss+xml" title="RSS" href="../feed.rss"/>
    <link rel="alternate" type="application/atom+xml" title="Atom" href="../feed.atom"/>
{% endblock %}


{% block content %}
  {{c.project.description_html|safe}}
  <div class="{{layout_class}}">
    {% for div in layout %}
    <div class="{{div.name}}">
      {% for w in div.content %}{{w|safe}}{% endfor %}
    </div>
    {% endfor %}
  </div>
  {{c.screenshot_list.display(project=c.project)}}
{% endblock %}

{% block right_content %}
  {% if c.project.accolades %}
    <div class="listed">
      <b>Awards:</b>
      {% for accolade in c.project.accolades %}
      <a href="{{accolade.award.longurl()}}" title="{{accolade.award.full}}">
        <small class="badge {{accolade.award.short}}">{{accolade.award.short}}</small>
      </a>
      {% else %}
        <span>No Awards</span>
      {% endfor %}
    </div>
  {% endif %}

  {% if c.project.labels and not (c.project.labels|length == 1 and c.project.labels[0]=='') %}
  <div class="listed">
    <b>Labels:</b>
    {% for label in c.project.labels %}
      <span class="ui-corner-all tag">{{label}} </span>
    {% endfor %}
  </div>
  {% endif %}

  <div class="listed last gravatar sm">
    <b>Developers:</b>
    {% for u in c.project.users() %}
    <a href="{{u.url()}}">
      {{lib.gravatar(u, size=24)}}
    </a>
    {% endfor %}
  </div>
{% endblock %}

{% block extra_js %}
  {% if c.project.best_download_url() %}
  <script type="text/javascript">
      $("#download-button").load("{{c.project.best_download_url()}}");
  </script>
  {% endif %}
{% endblock %}
