<!DOCTYPE HTML>
<html>
  <head>
    <title>Packages - Go Dashboard</title>
    <link rel="stylesheet" type="text/css" href="static/style.css">
  </head>

  <body>
    <ul class="menu">
      <li><a href="/">Build Status</a></li>
      <li>Packages</li>
      <li><a href="/project">Projects</a></li>
      <li><a href="http://golang.org/">golang.org</a></li>
    </ul>

    <h1>Go Dashboard</h1>
    
    <p>
    Packages listed on this page are written by third parties and 
    may or may not build or be safe to use.
    </p>

    <p>
    An "ok" in the <b>build</b> column indicates that the package is
    <a href="http://golang.org/cmd/goinstall/">goinstallable</a>
    with the latest
    <a href="http://golang.org/doc/devel/release.html">release</a> of Go.
    </p>

    <p>
    The <b>info</b> column shows the first paragraph from the
    <a href="http://blog.golang.org/2011/03/godoc-documenting-go-code.html">package doc comment</a>.
    </p>
    
    <h2>Most Installed Packages (this week)</h2>
    <table class="alternate" cellpadding="0" cellspacing="0">
      <tr><th>last install</th><th>count</th><th>build</th><th>path</th><th>info</th></tr>
      {% for r in by_week_count %}
        <tr>
          <td class="time">{{r.last_install|date:"Y-M-d H:i"}}</td>
          <td class="count">{{r.week_count}}</td>
          <td class="ok">{% if r.ok %}<a title="{{r.last_ok|date:"Y-M-d H:i"}}">ok</a>{% else %}&nbsp;{% endif %}</td>
          <td class="path"><a href="{{r.web_url}}">{{r.path}}</a></td>
          <td class="info">{% if r.info %}{{r.info|escape}}{% endif %}</td>
        </tr>
      {% endfor %}
    </table>
    
    <h2>Recently Installed Packages</h2>
    <table class="alternate" cellpadding="0" cellspacing="0">
      <tr><th>last install</th><th>count</th><th>build</th><th>path</th><th>info</th></tr>
      {% for r in by_time %}
        <tr>
          <td class="time">{{r.last_install|date:"Y-M-d H:i"}}</td>
          <td class="count">{{r.count}}</td>
          <td class="ok">{% if r.ok %}<a title="{{r.last_ok|date:"Y-M-d H:i"}}">ok</a>{% else %}&nbsp;{% endif %}</td>
          <td class="path"><a href="{{r.web_url}}">{{r.path}}</a></td>
          <td class="info">{% if r.info %}{{r.info|escape}}{% endif %}</td>
        </tr>
      {% endfor %}
    </table>

    <h2>Most Installed Packages (all time)</h2>
    <table class="alternate" cellpadding="0" cellspacing="0">
      <tr><th>last install</th><th>count</th><th>build</th><th>path</th><th>info</th></tr>
      {% for r in by_count %}
        <tr>
          <td class="time">{{r.last_install|date:"Y-M-d H:i"}}</td>
          <td class="count">{{r.count}}</td>
          <td class="ok">{% if r.ok %}<a title="{{r.last_ok|date:"Y-M-d H:i"}}">ok</a>{% else %}&nbsp;{% endif %}</td>
          <td class="path"><a href="{{r.web_url}}">{{r.path}}</a></td>
          <td class="info">{% if r.info %}{{r.info|escape}}{% endif %}</td>
        </tr>
      {% endfor %}
    </table>
  </body>
</html>
