<html>
  <head>
    <title>List of all failing files</title>
    <script type="text/javascript" src="https://storage.cloud.google.com/chromium-skia-gm/telemetry/hosted-files/jquery-1.7.1.min.js"></script>
    <script type="text/javascript" src="https://storage.cloud.google.com/chromium-skia-gm/telemetry/hosted-files/togglecols.js"></script>
  </head>

  <body onload="resetToggleArrows([0, 1, 2])">
    <h2>List of all failing files</h2>
    <a href='{{ absolute_url }}index.html'>Back</a>
    <br/><br/>
    Click on a filename to view its images.<br/>
    Click on the linked column headers to sort rows.<br/><br/>

    <table border="1" cellpadding="5" id="worker_results">
      <thead>
      <tr bgcolor="#CCCCFF">
        <th><a href="#" onclick="sortRows(0, false, [0, 1, 2, 3]); return false;">Failed Files</a><img src="" id="toggle-arrows-0"></th>
        <th><a href="#" onclick="sortRows(1, false, [0, 1, 2, 3]); return false;">Perceptual diff</a><img src="" id="toggle-arrows-1"></th>
        <th><a href="#" onclick="sortRows(2, true, [0, 1, 2, 3]); return false;">Differing pixels in white</a><img src="" id="toggle-arrows-2"></th>
        <th><a href="#" onclick="sortRows(3, true, [0, 1, 2, 3]); return false;">Difference per pixel</a><img src="" id="toggle-arrows-3"></th>
      </tr>
      </thead>
      <tbody>
      {% for worker_name, worker_info in worker_name_to_info_items %}
        {% for file_info in worker_info.failed_files %}
        <tr>
          <td align="center">
            <a id='compare_value' href='{{ absolute_url }}{{ file_info.file_name }}.html'>{{ file_info.file_name }}</a>
          </td>
          <td>
            <a id='compare_value'>{{ file_info.perceptual_diff }}</a>% ({{ file_info.perceptual_diff }})
          </td>
          <td>
            <a id='compare_value'>{{ file_info.percent_pixels_differing }}</a>% ({{ file_info.num_pixels_differing }})
          </td>
          <td>
            <a id='compare_value'>{{ file_info.perceptual_diff }}</a>% {{ file_info.max_diff_per_channel }}
          </td>
        </tr>
        {% endfor %}
      {% endfor %}
      </tbody>
    </table>
  </body>
</html>
