<!DOCTYPE html>
<!--
 Copyright 2022 The Go Authors. All rights reserved.
 Use of this source code is governed by a BSD-style
 license that can be found in the LICENSE file.
-->

<html lang="en">
<head>
  <title>{{$.Dashboard.Name}} Build Dashboard</title>
  <link rel="stylesheet" href="/style.css"/>
  <script async>
    let showUnsupported = window.location.hash.substr(1) !== 'short';

    function redraw() {
      showUnsupported = !document.querySelector('#showshort').checked;
      document.querySelectorAll('.unsupported').forEach(el => {
        el.hidden = !showUnsupported;
      });
      window.location.hash = showUnsupported ? '' : 'short';
      document.querySelectorAll('.Build-builderOS').forEach(el => {
        el.setAttribute(
          'colspan',
          el.getAttribute(
            showUnsupported ? 'data-archs' : 'data-firstClassArchs'
          )
        );
      });
      document.querySelectorAll('.Build-osColumn').forEach(el => {
        el.setAttribute(
          'span',
          el.getAttribute(
            showUnsupported ? 'data-archs' : 'data-firstClassArchs'
          )
        );
      });
    }

    window.addEventListener('load', () => {
      document.querySelector('#showshort').checked = !showUnsupported;
      document.querySelector('#showshort').addEventListener('change', redraw);
      redraw();
    });
  </script>
</head>

<body class="Dashboard">
{{if false}}<header class="Dashboard-topbar" style="background: antiquewhite;">
  <div>
    A banner isn't actively displayed at this time. This serves as a placeholder
    that can be used if a banner does need to be displayed.
  </div>
</header>{{end}}
<header class="Dashboard-topbar">
  <h1>
    <a href="/">Go Build Coordinator</a>
  </h1>
  <nav>
    <ul>
      <li><a href="/dashboard">Build Dashboard</a></li>
      <li><a href="https://perf.golang.org/dashboard">Performance Dashboard</a></li>
      <li><a href="/builders">Builders</a></li>
    </ul>
  </nav>
</header>

<form action="../.." method="GET">
<input type="hidden" name="repo" value="{{.Package.Path}}"/>
<nav class="Dashboard-controls">
  {{if not (eq .Branch "")}}
    <label>
      <select name="branch" onchange="this.form.submit()">
          {{range $.Branches}}
            <option value="{{.}}" {{if eq $.Branch .}} selected{{end}}>
                {{.}}
            </option>
          {{end}}
      </select>
    </label>
  {{end}}
  <label>
    <input type="checkbox" id="showshort"/>
    show only
    <a href="http://golang.org/wiki/PortingPolicy">first-class ports</a>
  </label>
</nav>
</form>
<h2 class="Dashboard-packageName">{{$.Package.Name}}</h2>

<div class="page Build-scrollTable">
{{if $.Commits}}
  <table class="Build">
    <colgroup class="col-hash" {{if $.Package.Path}} span="2" {{end}}></colgroup>
    <colgroup class="col-user"></colgroup>
    <colgroup class="col-time"></colgroup>
    <colgroup class="Build-descriptionColumn col-desc"></colgroup>
      {{range $.Builders}}
        <colgroup class="Build-osColumn col-result{{if .Unsupported}} unsupported{{end}}" span="{{.Archs | len}}"
                  data-archs="{{.Archs | len}}" data-firstClassArchs="{{.FirstClassArchs | len}}"></colgroup>
      {{end}}
    <tr class="Build-builderOSRow">
      {{if $.Package.Path}}
        <th colspan="2">revision</th>
      {{else}}
        <th>&nbsp;</th>
      {{end}}
      <th></th>
      <th></th>
      <th></th>
      {{range $.Builders}}
        <th class="Build-builderOS{{if not .FirstClass}} unsupported{{end}}" colspan="{{.Archs | len}}"
            data-archs="{{.Archs | len}}" data-firstClassArchs="{{.FirstClassArchs | len}}">
            {{.OS}}
        </th>
      {{end}}
    </tr>

    <tr class="Build-builderArchRow">
      {{if $.Package.Path}}
        <th class="result arch">repo</th>
        <th class="result arch">{{$.Dashboard.Name}}</th>
      {{else}}
        <th>&nbsp;</th>
      {{end}}
      <th></th>
      <th></th>
      <th></th>
      {{range $.Builders}}
        {{range.Archs}}
          <th class="result arch{{if not (.FirstClass)}} unsupported{{end}}" title="{{.Name}}">
              {{.Arch}}
          </th>
        {{end}}
      {{end}}
    </tr>

    <tr class="Build-builderTagRow">
      <th {{if $.Package.Path}}colspan="2" {{end}}>&nbsp;</th>
      <th></th>
      <th></th>
      <th></th>
      {{range $.Builders}}
        {{range.Archs}}
          <th class="Build-resultArch result arch{{if not (.FirstClass)}} unsupported{{end}}" title="{{.Name}}">
              {{.Tag}}
          </th>
        {{end}}
      {{end}}
    </tr>
    {{range $c := $.Commits}}
      <tr class="commit">
        <td class="hash">
          <span class="ShortHash">
            <a href="https://go-review.googlesource.com/q/{{$c.Hash}}">
              {{$c.Hash}}
            </a>
          </span>
        </td>
        <td class="Build-user" title="{{$c.User}}">{{$c.ShortUser}}</td>
        <td class="Build-commitTime">
          {{$c.Time}}
        </td>
        <td class="Build-desc desc" title="{{$c.Desc}}">{{$c.Desc}}</td>
        {{range $b := $.Builders}}
          {{range $a := .Archs}}
            <td class="Build-result {{if not $a.FirstClass}} unsupported{{end}}" data-builder="{{$a.Name}}">
              {{with $c.ResultForBuilder $a.Name}}
                {{if .BuildingURL}}
                  <a href="{{.BuildingURL}}"><img src="https://go.dev/favicon.ico" height=16 width=16 border=0></a>
                {{else}}
                  <a class="Build-result{{if .OK}}OK{{else}}Fail{{end}}
                    {{- if .Noise}} Build-resultNoise{{end}}"
                    href="{{.LogURL}}"
                    title="Build log of {{$a.Name}} on commit {{shortHash $c.Hash}}.">{{if .OK}}ok{{else}}fail{{end}}</a>
                {{end}}
              {{end}}
            </td>
          {{end}}
        {{end}}
      </tr>
    {{end}}
  </table>

  {{with $.Pagination}}
    <div class="paginate">
      <nav>
        {{if .HasPrev}}
          <a href="?repo={{$.Package.Path}}&page={{.Prev}}&branch={{$.Branch}}">
            newer
          </a>
        {{else}}
          newer
        {{end}}
        {{if .Next}}
          <a href="?repo={{$.Package.Path}}&page={{.Next}}branch={{$.Branch}}">
            older
          </a>
        {{else}}
          older
        {{end}}
        {{if .HasPrev}}
          <a href="?branch={{$.Branch}}">
            latest
          </a>
        {{else}}
          latest
        {{end}}
      </nav>
    </div>
  {{end}}
{{else}}
  <p>No commits to display. Hm.</p>
{{end}}
</div>
</body>
</html>
