<!--
Copyright 2013 OpenStack Foundation

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 xmlns="http://www.w3.org/1999/xhtml"
      xmlns:py="http://genshi.edgewall.org/"
      lang="en">
  <head>
    <style type="text/css">
#pipeline-container {
    margin: 0 auto;
}
.change {
    border: 1px solid;
    margin-top: 10px;
    padding: 2px;
}
.change > .header {
    background: #cccccc;
    color: black;
    margin: -2px -2px 2px -2px;
    padding: 4px;
}
.change > .header > .changeid {
    float: right;
}
.job {
    display: block;
}
.pipeline {
    float: left;
    width: 25em;
    padding: 4px;
}
.pipeline > .header {
    background: #0000cc;
    color: white;
}
.arrow {
    text-align: center;
    font-size: 16pt;
    line-height: 1.0;
}
.result_success {
    color: #007f00;
}
.result_failure {
    color: #cf2f19;
}
.result_unstable {
    color: #e39f00;
}
    </style>

    <title>Zuul Status</title>

    <script type="text/javascript" src="jquery.min.js"></script>
    <script type="text/javascript" src="jquery-visibility.min.js"></script>
    <script type="text/javascript" src="jquery-graphite.js"></script>
    <script type="text/javascript" src="status.js"></script>
    
  </head>

  <body>
    <h1> Zuul Status </h1>

    <div id="message-container">
      <p id="message"/>
    </div>

    <div id="pipeline-container">
    </div>

  </body>
</html>
