<html>
  <head>
    <title>Webpage results for '{{ fieldname }}'</title>
    {% include "column_threshold_css.html" %}
  </head>

  <body>
    <h2>Webpage results for '{{ fieldname }}'</h2>
    <a href='{{ absolute_url }}index.html'>Back</a>
    <br/><br/>
    Discarded <b>{{ discarded_webpages|length }}</b> webpages because they were in the {{discard_outliers}}% outliers.
    View discarded webpages <a href="#discarded_webpages">here</a>.<br/>
    Total <b>{{ page_values|length }}</b> webpages displayed{% if total_archives %} (out of {{total_archives}} WPR archives){% endif %}.<br/>
    Read <a href="https://docs.google.com/a/chromium.org/document/d/1GhqosQcwsy6F-eBAmFn_ITDF7_Iv_rY9FhCKwAnk9qQ/edit?pli=1#heading=h.lgvqzgu7bc4d">this</a> for an explanation of CT's accuracy of results.
    <br/><br/>

    <table border="1" cellpadding="5">
      <tr bgcolor="#CCCCFF">
        <th>Page Name</th>
        <th>Value</th>
        <th>Value with Patch</th>
        <th>Percentage Change</th>
        <th>Percentage Difference</th>
        <th>Traces w/o patch</th>
        <th>Traces with patch</th>
      </tr>
      {% for page_value in page_values %}
        <tr>
          <td>{{ page_value.page_name }} <a href="{{ page_value.pageset_link }}">pageset</a> <a href="{{ page_value.archive_link }}">archive</a></td>
          <td>{{ page_value.value1|floatformat:"-3" }}</td>
          <td>{{ page_value.value2|floatformat:"-3" }}</td>
          <td  {% if page_value.perc_diff <= 0 %}class="belowthreshold"{% else %}class="abovethreshold"{% endif %}>{{ page_value.perc_change|floatformat:"-3" }}%</td>
          <td  {% if page_value.perc_diff <= 0 %}class="belowthreshold"{% else %}class="abovethreshold"{% endif %}>{{ page_value.perc_diff|floatformat:"-3" }}%</td>
          <td>{% for traceUrl in page_value.traceUrls1 %}<a href="{{traceUrl}}">trace{{forloop.counter}}</a>{% if not forloop.last %},{% endif %}{% endfor %}</td>
          <td>{% for traceUrl in page_value.traceUrls2 %}<a href="{{traceUrl}}">trace{{forloop.counter}}</a>{% if not forloop.last %},{% endif %}{% endfor %}</td>
        </tr>
      {% endfor %}
    </table>

    <br/><br/><br/>
    <a id="discarded_webpages"></a>
    <b>Discarded webpages (were not included in totals calculations):</b>
    {% if discarded_webpages %}
    <br/>
    <table border="1" cellpadding="5">
      <tr bgcolor="#CCCCFF">
        <th>Page Name</th>
        <th>Value</th>
        <th>Value with Patch</th>
        <th>Percentage Change</th>
        <th>Percentage Difference</th>
      </tr>
      {% for page_value in discarded_webpages %}
        <tr>
          <td>{{ page_value.page_name }}</td>
          <td>{{ page_value.value1|floatformat:"-3" }}</td>
          <td>{{ page_value.value2|floatformat:"-3" }}</td>
          <td  {% if page_value.perc_diff <= 0 %}class="belowthreshold"{% else %}class="abovethreshold"{% endif %}>{{ page_value.perc_change|floatformat:"-3" }}%</td>
          <td  {% if page_value.perc_diff <= 0 %}class="belowthreshold"{% else %}class="abovethreshold"{% endif %}>{{ page_value.perc_diff|floatformat:"-3" }}%</td>
        </tr>
      {% endfor %}
    </table>
    {% else %}
      None
    {% endif %}

  </body>
</html>
