<!DOCTYPE html>
<!--
Copyright 2017 Red Hat

Licensed under the Apache License, Version 2.0 (the "License"); you may
not use this file except in compliance with the License. You may obtain
a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
-->
<html>
<head>
  <meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
  <title id='pagetitle'><%= htmlWebpackPlugin.options.title %></title>
</head>
<body ng-app="zuulJobs" ng-controller="mainController"><div class="container-fluid">
  <nav class="navbar navbar-default">
  <div class="container-fluid">
    <div class="navbar-header">
      <a class="navbar-brand" href="../" target="_self">Zuul Dashboard</a>
    </div>
    <ul class="nav navbar-nav">
      <li><a href="status.html" target="_self">Status</a></li>
      <li class="active"><a href="jobs.html" target="_self">Jobs</a></li>
      <li><a href="builds.html" target="_self">Builds</a></li>
    </ul>
  </div>
  </nav>
  <table class="table table-hover table-condensed">
    <thead>
      <tr>
        <th>Name</th>
        <th>Description</th>
        <th>Last builds</th>
      </tr>
    </thead>
    <tbody>
      <tr ng-repeat="job in jobs">
        <td>{{ job.name }}</td>
        <td>{{ job.description }}</td>
        <td><a href="builds.html?job_name={{ job.name }}">builds</a></td>
      </tr>
    </tbody>
  </table>
</div></body></html>
