<div class="change-list">
  <table style="clear:both;padding-bottom: 10px;">
  {%if patchset.n_comments or patchset.n_drafts%}
    <tr>
      <th>Comments:</th>
      <td>{{patchset.n_comments}}
      {%if patchset.n_drafts%}
        <span style="color:red">
          <b>+ {{patchset.n_drafts}} draft{{patchset.n_drafts|pluralize}}</b>
        </span>
      {%endif%}
      </td>
    </tr>
  {%endif%}
    <tr>
      <th>Created:</th>
      <td>{{patchset.created|timesince}} ago
      {%ifnotequal patchset.owner change.owner%}<br />
      by <b>{{patchset.owner|real_name}}</b>{%endifnotequal%}
      </td>
    </tr>
    <tr>
      <th>Download:</th> 
      <td>
        <code style="white-space: nowrap">repo download {{patchset.change.dest_project.name}} {{patchset.change.key.id}}/{{patchset.id}}</code>
      </td>
    </tr>
  </table>
 
{%if patchset.freaking_huge%}
  <div style="margin-top: 5px; float: left;" class="error">
  Patch Set {{patchset.id}} has too many files.
  </div>
  <div style="clear:both;"></div>
{%else%}
  <table class="change_info_table" style="clear:both;">
    <tr align="left">
      <th class="leftmost"></th>
      <th>File Path</th>
      <th>Delta From</th>
      <th>Comments</th>
      <th colspan="2" class="rightmost">Diff</th>
    </tr>

  {%for patch in patchset.patches%}
    {%if make_next_prev_links %}
      <!-- These two links are for the javascript j/k and h/l key shortcuts -->
      {%if forloop.first %}
        <a style="display:none" id="nextFile" href="" />
      {%endif%}
      {%if forloop.last%}
      <a style="display:none" id="prevFile" href="" />
      {%endif%}
    {%endif%}
    <tr>
      <td>{%if patch.status%}{{patch.status}}{%endif%}</td>
      <td>
        <a class="noul"
         {%if patch.multi_way_diff%}
           href="{%url codereview.views.patch change.key.id,patch.patchset.key.id,patch.id%}"
         {%else%}
           href="{%url codereview.views.diff change.key.id,patch.patchset.key.id,patch.id%}"
         {%endif%}
          >{{patch.filename}}
        </a>
      </td>
      <td>
        {%for other in patch.other_patch_versions%}<a href="/{{change.key.id}}/diff2/{{other.patchset_id}}:{{patchset.key.id}}/{{patch.id}}" title="Delta from patch set {{other.patchset_name}}">{{other.patchset_name}}</a>&nbsp;{%endfor%}
      </td>
      <td>
        {%if patch.num_comments or patch.num_drafts%}<b>{%endif%}
          {{patch.num_comments}} comment{{patch.num_comments|pluralize}}
          {%if patch.num_drafts%}
          <span style="color:red">+
            {{patch.num_drafts}} draft{{patch.num_drafts|pluralize}}
          </span>
        {%endif%}
        {%if patch.num_comments or patch.num_drafts%}</b>{%endif%}
      </td>
      <td>
      {%if not patch.multi_way_diff%}
        <a href="{%url codereview.views.diff change.key.id,patch.patchset.key.id,patch.id%}">
          Side-by-Side
        </a>
      {%endif%}
      </td>
      <td>
        <a href="{%url codereview.views.patch change.key.id,patch.patchset.key.id,patch.id%}">
          Unified
        </a>
      </td>
    </tr>
  {%endfor%}
  </table>
{%endif%}

  {%if not patchset.complete%}
    <div style="margin-top: 5px; float: left;" class="error">
    Patch Set {{patchset.id}} is still being uploaded ...
    </div>
    <div style="clear:both;"></div>
  {%endif%}
</div>
