{{ partial "header.html" . }}

<div class="body">
    <main>
        <article class="static doc security">

            {{ .Content }}
            <div class="table-wrapper">
              <table class="tableblock frame-all grid-all stretch">
                <caption>Security advisories by year</caption>
                <thead>
                  <tr>
                    <td>Reference</td>
                    <td>Affected</td>
                    <td>Fixed</td>
                    <td>CVSS score</td>
                    <td>Description</td>
                  </tr>
                </thead>
                <tbody>
              {{ $pages := .Pages.GroupByDate "2006" "desc" }}
              {{ $earliest_year := (index (.Pages.GroupByDate "2006" "asc") 0).Key }}
              {{ range $year := seq (now.Format "2006") $earliest_year }}
                {{ $has_any := false }}
                {{ range $pages }}
                  {{ if eq $year (int .Key) }}
                    {{ $has_any = true}}
                    {{ break }}
                  {{ end }}
                {{ end }}
                {{ if $has_any }}
                  {{ range $pages }}
                    {{ if eq $year (int .Key) }}
                      <tr>
                        <th colspan="5" scope="row"><strong>{{ .Key }}</strong></th>
                      </tr>
                      {{ range .Pages }}
                        <tr>
                          <td><a href="{{ .RelPermalink }}">{{ .Params.cve }}</a></td>
                          <td>{{ .Params.affected }}</td>
                          <td>{{ .Params.fixed }}</td>
                          <td>{{ .Params.severity }}</td>
                          <td>{{ .Params.summary }}</td>
                        </tr>
                      {{ end }}
                    {{ end }}
                  {{ end }}
                {{ else }}
                  <tr>
                    <th colspan="5" scope="row"><strong>{{ $year }}</strong></th>
                  </tr>
                  <tr>
                    <td colspan="5"><em>No issues reported</em></td>
                  </tr>
                {{ end }}
              {{ end }}
                </tbody>
              </table>
            </div>

        </article>
    </main>
</div>

{{ partial "footer.html" . }}
