<!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="zuulTenants" ng-controller="mainController"><div class="container-fluid">
  <nav class="navbar navbar-default">
  <div class="container-fluid">
    <div class="navbar-header">
      <a class="navbar-brand">Zuul Dashboard</a>
    </div>
    <ul class="nav navbar-nav">
      <li class="active"><a href=".">Tenants</a></li>
    </ul>
  </div>
  </nav>
  <table class="table table-hover table-condensed">
    <thead>
      <tr>
        <th>Name</th>
        <th>Status</th>
        <th>Jobs</th>
        <th>Builds</th>
        <th>Projects count</th>
      </tr>
    </thead>
    <tbody>
      <tr ng-repeat="tenant in tenants">
        <td>{{ tenant.name }}</td>
        <td><a href="{{ tenant.name }}/status.html">status</a></td>
        <td><a href="{{ tenant.name }}/jobs.html">jobs</a></td>
        <td><a href="{{ tenant.name }}/builds.html">builds</a></td>
        <td>{{ tenant.projects }}</td>
      </tr>
    </tbody>
  </table>
</div></body></html>
