{%extends "changes_base.html"%}

{%block title1%}Changes for {{email|real_name}} -{%endblock%}

{%block body%}

<script language="JavaScript" type="text/javascript"><!--
function keyPressIntermediary(evt) {
  return M_dashboardKeyPress(evt);
}
document.onkeypress = keyPressIntermediary;
-->
</script>


<h1>Changes for {{email|real_name}}</h1>
<table class="change-list" id="user-queues">
{%include "change_heading.html"%}

<tr>
<th colspan="6" class="header-title">Changes Created by {{email|real_name}}</th>
<th colspan="2" class="header-title pagination">
  {%if mine_list%}
    <span id="paged-mine-links">
    <a href="javascript:M_PagedPrev('/ajax_user_mine/{{email}}','mine','user-queues',M_OnAfterPaged)"
      id="paged-mine-prev"
      {%if not mine_prev%}style="display:none"{%endif%}
    >&lt; Newer</a>
    <span id="paged-mine-opos">{{mine_opos}}</span>
    -
    <span id="paged-mine-oend">{{mine_oend}}</span>
    <a href="javascript:M_PagedNext('/ajax_user_mine/{{email}}','mine','user-queues',M_OnAfterPaged)"
      id="paged-mine-next"
      {%if not mine_next%}style="display:none"{%endif%}
    >Older &gt;</a>
    </span>
    <span id="paged-mine-progress" style="display:none" class="ajax_progress">Loading</span>
    <span id="paged-mine-opre" style="display:none">{{mine_prev}}</span>
    <span id="paged-mine-onex" style="display:none">{{mine_next}}</span>
  {%endif%}
</th>
</tr>
{%if not mine_list%}
<tr>
  <td colspan="8">
    <span class="disabled">(None)</span>
  </td>
</tr>
{%else%}
{%for change in mine_list%}
  {%include "change_row.html"%}
{%endfor%}
{%endif%}

<tr>
<th colspan="6" class="header-title">Changes Reviewable by {{email|real_name}}</th>
<th colspan="2" class="header-title pagination">
  {%if review_list%}
    <span id="paged-review-links">
    <a href="javascript:M_PagedPrev('/ajax_user_review/{{email}}','review','user-queues',M_OnAfterPaged)"
      id="paged-review-prev"
      {%if not review_prev%}style="display:none"{%endif%}
    >&lt; Newer</a>
    <span id="paged-review-opos">{{review_opos}}</span>
    -
    <span id="paged-review-oend">{{review_oend}}</span>
    <a href="javascript:M_PagedNext('/ajax_user_review/{{email}}','review','user-queues',M_OnAfterPaged)"
      id="paged-review-next"
      {%if not review_next%}style="display:none"{%endif%}
    >Older &gt;</a>
    </span>
    <span id="paged-review-progress" style="display:none" class="ajax_progress">Loading</span>
    <span id="paged-review-opre" style="display:none">{{review_prev}}</span>
    <span id="paged-review-onex" style="display:none">{{review_next}}</span>
  {%endif%}
</th>
</tr>
{%if not review_list%}
<tr>
  <td colspan="8">
    <span class="disabled">(None)</span>
  </td>
</tr>
{%else%}
{%for change in review_list%}
  {%include "change_row.html"%}
{%endfor%}
{%endif%}

<tr>
<th colspan="6" class="header-title">Recently Closed Changes Created by {{email|real_name}}</th>
<th colspan="2" class="header-title pagination">
  {%if closed_list%}
    <span id="paged-closed-links">
    <a href="javascript:M_PagedPrev('/ajax_user_closed/{{email}}','closed','user-queues',M_OnAfterPaged)"
      id="paged-closed-prev"
      {%if not closed_prev%}style="display:none"{%endif%}
    >&lt; Newer</a>
    <span id="paged-closed-opos">{{closed_opos}}</span>
    -
    <span id="paged-closed-oend">{{closed_oend}}</span>
    <a href="javascript:M_PagedNext('/ajax_user_closed/{{email}}','closed','user-queues',M_OnAfterPaged)"
      id="paged-closed-next"
      {%if not closed_next%}style="display:none"{%endif%}
    >Older &gt;</a>
    </span>
    <span id="paged-closed-progress" style="display:none" class="ajax_progress">Loading</span>
    <span id="paged-closed-opre" style="display:none">{{closed_prev}}</span>
    <span id="paged-closed-onex" style="display:none">{{closed_next}}</span>
  {%endif%}
</th>
</tr>
{%if not closed_list%}
<tr>
  <td colspan="8">
    <span class="disabled">(None)</span>
  </td>
</tr>
{%else%}
{%for change in closed_list%}
  {%include "change_row.html"%}
{%endfor%}
{%endif%}
</table>

<script language="JavaScript" type="text/javascript"><!--
var dashboardState = new M_DashboardState(window,'change', 'M_myDashboardChangeMarker');
function M_OnAfterPaged() {
  dashboardState = new M_DashboardState(window,'change', 'M_myDashboardChangeMarker');
}
-->
</script>
{%endblock%}
