<!DOCTYPE html>
<meta charset="utf-8">
<meta name=viewport content="width=device-width,minimum-scale=1,maximum-scale=1">
<title>Open Go Code Reviews</title>
<style>
* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}
body {
  font: 13px system-ui, sans-serif;
  padding: 1rem;
}
h2 {
  margin: 1em 0 .35em;
}
h3:first-of-type {
  padding: 0
}
a:link,
a:visited {
  color: #00c;
}
header {
  border-bottom: 1px solid #666;
  margin-bottom: 10px;
  padding-bottom: 10px;
}
.header-subtitle {
  color: #666;
  font-size: .9em;
}
.filters {
  display: block;
  margin: 1em 0;
}
.filter-input {
  font: inherit;
  width: 30em;
}
.how-to {
  cursor: pointer;
  margin-top: 1em;
  max-width: 40em;
}
.how-to-container {
  padding: 0 1em;
}
.how-to ul {
  list-style: none;
  margin-top: .5em;
}
.how-to li {
  margin: .25em 1em .75em;
}
.examples li {
  margin: .25em 1em;
}
.row {
  border-bottom: 1px solid #f1f2f3;
  display: flex;
  padding: .5em 0;
  white-space: nowrap;
}
.date {
  min-width: 6rem;
}
.owner {
  min-width: 10rem;
  max-width: 10rem;
  overflow: hidden;
  text-overflow: ellipsis;
  padding-right: 1em;
}
.icons,
.number {
  flex-shrink: 0;
}
.icons {
  height: 20px;
  margin-right: 1.5em;
  text-align: right;
  width: 7em;
}
.number {
  margin-right: 1.5em;
  text-align: right;
  width: 6ch;
}
.subject {
  overflow: hidden;
  text-overflow: ellipsis;
}
.pill,
.pill:link,
.pill:visited {
  color: #000;
  display: inline-block;
  border-radius: 2px;
  padding: 2px 5px;
  text-decoration: none;
}
.plus-two:link,
.plus-two:visited,
.minus-two:link,
.minus-two:visited {
  color: #fff;
}
.plus-two {
  background-color: #2e7d32;
}
.plus-one {
  background-color: #dcedc8;
}
.minus-two {
  background-color: #b71c1c;
}
.no-human-comments {
  background-color: #e0e0e0;
}
[hidden] {
  display: none;
}
</style>
<header>
  <strong>{{.TotalChanges}} open changes</strong>
  <div class="header-subtitle">
    Excluding those marked WIP, having hashtags "wait-author", "wait-release", "wait-issue", or description containing "DO NOT REVIEW".
  </div>
  <div class="header-subtitle">
    <a href="https://go.googlesource.com/build/+/master/devapp/reviews.go">Source code</a>
  </div>
</header>
<div class="filters">
  <label class="filter-label">Filter: <input class="filter-input js-filter-input" type="text"></label>
  <details class="how-to">
    <summary>Filters How-to</summary>
    <div class="how-to-container">
      <ul>
        <li>You can filter on any displayed field below, along with a few other fields not shown, such as reviewer.
        <li>Exclude terms by prefixing them with a <code>-</code>.
        <li>The <code>t:</code> operator is short for "tag" and coincides with the colored tags you see in the rows below.
        <li>Supported tag values include "Changes without a human comment" (<code>t:attn</code>) and <code>Code-Review</code>
            label values (<code>t:-2</code>, <code>t:+1</code>, and <code>t:+2</code>).
        <li>All terms use substring matching, meaning that you can type <code>reviewer:iant</code> instead of <code>reviewer:iant@golang.org</code>
        <li>The following operators are supported: <code>t:, repo:, reviewer:, cc:, involves:, and owner:</code>
      </ul>
        Examples:
        <ul>
          <li><a href="?q=reviewer%3Abradfitz+repo%3Anet">http2 changes in the net repo where brad is a reviewer</a>
          <li><a href="?q=-involves%3Aaustin+runtime%3A">runtime changes that don't involve austin</a>
        </ul>
    </div>
  </details>
</div>
{{range $p := .Projects}}
  {{if .Changes}}
    <section hidden>
      <h2>{{.Project}}</h2>
      {{range .Changes}}
        <div class="row" data-terms="{{.SearchTerms}}">
          <span class="date">{{.FormattedLastUpdate}}</span>
          <span class="owner">{{.Owner.Name}}</span>
          <span class="icons">
            {{if .NoHumanComments}}<a class="pill no-human-comments" href="?q=t%3Aattn" title="Has no human comments">→</a>{{end}}
            {{if .HasMinusTwo}}️<a class="pill minus-two" href="?q=t%3A-2" title="Code-Review: -2">-2</a>{{end}}
            {{if .HasPlusOne}}<a class="pill plus-one" href="?q=t%3A%2B1" title="Code-Review: +1">+1</a>{{end}}
            {{if .HasPlusTwo}}<a class="pill plus-two" href="?q=t%3A%2B2" title="Code-Review: +2">+2</a>{{end}}
          </span>
          <a class="number" href="https://{{$p.ReviewServer}}/{{.Number}}" target="_blank">{{.Number}}</a>
          <span class="subject">
            {{.Subject}}
          </span>
        </div>
      {{end}}
    </section>
	{{end}}
{{end}}
<script>
function filter(query) {
  console.time('filter');
  query = query.toLowerCase();
  document.querySelectorAll('.row').forEach(el => {
    const terms = el.dataset.terms;
    const queryTerms = query.split(' ');
    let match = true;
    for (let i = 0; i < queryTerms.length; i++) {
      let q = queryTerms[i].trim();
      if (q.length === 0 || q === '-') { continue; }
      if (q.startsWith('-')) {
        match = match && !terms.includes(q.substr(1));
      } else {
        match = match && terms.includes(q);
      }
    }
    el.hidden = !match;
  });
  document.querySelectorAll('section').forEach(el => {
    el.hidden = el.querySelectorAll('.row:not([hidden])').length === 0;
  });
  console.timeEnd('filter');
}

let debounceTimerId = null;
const filterInputEl = document.querySelector('.js-filter-input')
filterInputEl.addEventListener('keyup', e => {
  const q = e.target.value.trim();
  let url = new URL(window.location.href);
  if (!!q) {
    url.searchParams.set('q', q);
  } else {
    url.searchParams.delete('q');
  }
  window.history.replaceState({}, null, url.toString());

  if (debounceTimerId) {
    window.clearTimeout(debounceTimerId);
    debounceTimerId = null;
  }
  debounceTimerId = window.setTimeout(() => { filter(q); }, 200);
});

const initialQuery = (new URL(window.location.href)).searchParams.get('q') || '';
filterInputEl.value = initialQuery;
filter(initialQuery);
</script>
