[for panels][# There will always be exactly one panel.]
 [include "../tracker/issue-list-headings.ezt"]
[end]

[if-any table_data][else]
<tr>
  <td colspan="40" class="id">
   <div style="padding: 3em; text-align: center">
       This hotlist currently has no issues.<br>
     [if-any owner_permissions editor_permissions]
     Select 'Add issues...' in the above 'Actions...' dropdown menu to add some.
     [end]
    </div>
   </td>
  </tr>
[end]



<script type="text/javascript" nonce="[nonce]">
runOnLoad(function(){
  [if-any table_data]
    var tableData = [[]
    [for table_data]
      {
      "group":
      [if-any table_data.group][if-any table_data.group.cells]
        {
        "rowsInGroup": "[table_data.group.rows_in_group]",
        "cells": [[]
        [for table_data.group.cells]
          {
          "groupName": "[table_data.group.cells.group_name]",
          "values": [[]
          [for table_data.group.cells.values]
            {
            "item": [if-any table_data.group.cells.values.item]"[format "js"][table_data.group.cells.values.item][end]"[else]"None"[end],
            }[if-index table_data.group.cells.values last][else],[end]
          [end]
          ],
          }[if-index table_data.group.cells last][else],[end]
        [end]
        ],
        },
      [else]"no",[end][else]"no",[end]
      "cells" : [[]
      [for table_data.cells]
        {
        "type": "[table_data.cells.type]",
        "values": [[]
        [for table_data.cells.values]
          {
            [is table_data.cells.type "issues"]
              "id": "[format "js"][table_data.cells.values.item.id][end]",
              "href": "[format "js"][table_data.cells.values.item.href][end]",
              "title": "[format "js"][table_data.cells.values.item.title][end]",
              "closed": "[format "js"][table_data.cells.values.item.closed][end]",
            [else]
              "item": "[format "js"][table_data.cells.values.item][end]",
            [end]
          "isDerived": "[table_data.cells.values.is_derived]",
          }[if-index table_data.cells.values last][else],[end]
        [end]
        ],
        "colIndex": "[table_data.cells.col_index]",
        "align": "[table_data.cells.align]",
        "noWrap": "[table_data.cells.NOWRAP]",
        "nonColLabels": [[]
        [for table_data.cells.non_column_labels]
          {
          "value": "[format "js"][table_data.cells.non_column_labels.value][end]",
          "isDerived": "[table_data.cells.non_column_labels.is_derived]",
          }[if-index table_data.cells.non_column_labels last][else],[end]
        [end]
        ],
        }[if-index table_data.cells last][else],[end]
      [end]
      ],
      "issueRef": "[table_data.issue_ref]",
      "idx": "[table_data.idx]",
      "projectName": "[table_data.project_name]",
      "localID": "[table_data.local_id]",
      "projectURL": [format "js"]"[table_data.project_url]"[end],
      "issueID": "[table_data.issue_id]",
      "isStarred": "[table_data.starred]",
      "issueCleanURL": [format "js"]"[table_data.issue_clean_url]"[end],
      "issueContextURL": [format "js"]"[table_data.issue_ctx_url]"[end],
      }[if-index table_data last][else],[end]
    [end]
    ];

    var pageSettings = {
    "cursor": "[cursor]",
    "userLoggedIn": "[if-any logged_in_user]yes[end]",
    "ownerPerm": "[owner_permissions]",
    "editorPerm": "[editor_permissions]",
    "isCrossProject": "[is_cross_project]",
    "readOnly": "[read_only]",
    "allowRerank": "[allow_rerank]",
    "hotlistID": "[hotlist_id]",
    "colSpec": "[col_spec]",
    "can": "[can]"
    };

    renderHotlistTable(tableData, pageSettings);
    [if-any allow_rerank]
    activateDragDrop(tableData, pageSettings, "[hotlist_id]");
    [end]
  [else]
  [end]
});
</script>

<script type="text/javascript" defer src="[version_base]/static/js/tracker/render-hotlist-table.js" nonce="[nonce]"></script>

