<!doctype html>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You 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 lang="en-US">
  <head>
    <meta charset="utf-8">
    <title>HTrace</title>

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <!-- TODO: Add Favicon -->
    <link rel="icon" href="//favicon.ico" type="image/x-icon" sizes="16x16">
    <link href="lib/bootstrap-3.3.1/css/bootstrap.css" rel="stylesheet">
    <link href="lib/css/backgrid-0.3.5.min.css" rel="stylesheet">
    <link href="lib/css/backgrid-paginator-0.3.5.min.css" rel="stylesheet">
    <link href="lib/rome-2.1.0/rome.min.css" rel="stylesheet">
    <link href="lib/css/main.css" rel="stylesheet">

    <!-- TODO: Remove shiv -->
    <!--[if lt IE 9]>
      <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.6.2/html5shiv.js"></script>
    <![endif]-->
  </head>
  <body>
    <header id="header" role="banner">
      <nav class="navbar navbar-default navbar-static-top" role="navigation">
        <div class="container-fluid">
          <a class="navbar-brand" href="#">HTrace</a>
        </div>
      </nav>
    </header>

    <div id="app" class="container-fluid" role="application"></div>

    <footer></footer>

    <script id="search-layout-template" type="text/html">
    <div class="container-fluid" id="list" role="application">
      <div class="row">
        <div class="col-md-4" role="form"></div>
        <div class="col-md-8">
          <div class="row">
            <div class="col-md-12" role="main"></div>
          </div>
          <div class="row">
            <div class="col-md-12" role="complementary"></div>
          </div>
        </div>
      </div>
    </div>
    </script>

    <script id="search-controls-template" type="text/html">
    <div class="panel panel-default">
      <div class="panel-heading">
        <h3 class="panel-title">Controls</h3>
      </div>
      <div class="panel-body">
        <form class="form-horizontal">
          <div class="search-fields"></div>
          <div class="form-group">
            <div class="col-sm-12">
              <div class="btn-group">
                <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
                  Add Field <span class="caret"></span>
                </button>
                <ul class="dropdown-menu" role="menu">
                  <li><a href="javascript:void(0)" class="add-field" data-field="begin">Start Date/Time</a></li>
                  <li><a href="javascript:void(0)" class="add-field" data-field="end">End Date/Time</a></li>
                  <li><a href="javascript:void(0)" class="add-field" data-field="duration">Duration</a></li>
                </ul>
              </div>
            </div>
          </div>
          <div class="form-group">
            <div class="col-sm-12">
              <button type="button" class="search btn btn-default">Search</button>
            </div>
          </div>
        </form>
      </div>
    </div>
    </script>

    <script id='search-field-template' type='text/html'>
      <div class='form-group search-field start-end-date-time'>
        <label for="start-end-date-time" class="start-end-date-time control-label col-sm-3">Date</label>
        <div class="col-sm-3">
          <select class='op form-control'>
            <option selected value='ge'>After</option>
            <option value='le'>Before</option>
          </select>
        </div>
        <div class='col-sm-5'>
          <input placeholder="Date/Time" id="start-end-date-time" class="start-end-date-time date form-control value" />
        </div>
        <button class="btn btn-link remove-field" type="button">x</button>
      </div>
      <div class='form-group search-field duration'>
        <label for="duration" class="duration control-label col-sm-3">Duration</label>
        <div class='col-sm-8'>
          <input type="text" class="duration form-control value" placeholder="Duration" />
        </div>
        <button class="btn btn-link remove-field" type="button">x</button>
      </div>
      <div class='form-group search-field description'>
        <label for="description" class="description control-label col-sm-3">Description</label>
        <div class='col-sm-8'>
        <input type="search" id="description" class="description value form-control" placeholder="Search description" />
        </div>
      </div>
    </script>

    <script id="details-layout-template" type="text/html">
    <div class="container-fluid" id="list" role="application">
      <div class="row">
        <div class="col-md-12" role="main"></div>
      </div>

      <hr>

      <div class="row">
        <div class="col-md-12" role="complementary"></div>
      </div>
    </div>
    </script>

    <script id="span-details-template" type="text/html">
    <table class="table table-condensed">
      <thead>
        <tr>
          <th>Description</th>
          <th>Span ID</th>
          <th>Process ID</th>
          <th>Start time</th>
          <th>End time</th>
          <th>Duration</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td><%- span.description %></td>
          <td><%- span.spanId %></td>
          <td><%- span.processId %></td>
          <td><%- span.beginTime %></td>
          <td><%- span.stopTime %></td>
          <td><%- span.duration %></td>
        </tr>
      </tbody>
    </table>
    </script>

    <script id="swimlane-layout-template" type="text/html">
    <div class="container-fluid" id="list" role="application">
      <div class="row">
        <div class="col-md-12" role="main"></div>
      </div>

      <div class="row">
        <div class="col-md-12" role="complementary"></div>
      </div>
    </div>
    </script>

    <script src="lib/js/jquery-2.1.3.min.js" type="text/javascript"></script>
    <script src="lib/js/d3-3.5.5.js" type="text/javascript"></script>
    <script src="lib/bootstrap-3.3.1/js/bootstrap.min.js" type="text/javascript"></script>
    <script src="lib/js/underscore-1.7.0.js" type="text/javascript"></script>
    <script src="lib/js/backbone-1.1.2.js" type="text/javascript"></script>
    <script src="lib/js/backbone.marionette-2.4.1.min.js" type="text/javascript"></script>
    <script src="lib/js/backbone.paginator-2.0.2.js" type="text/javascript"></script>
    <script src="lib/js/backgrid-0.3.5.js" type="text/javascript"></script>
    <script src="lib/js/backgrid-paginator-0.3.5.js" type="text/javascript"></script>
    <script src="lib/js/moment-2.9.0.min.js" type="text/javascript"></script>
    <script src="lib/rome-2.1.0/rome.standalone.min.js" type="text/javascript"></script>

    <script src="app/app.js" type="text/javascript"></script>
    <script src="app/models/span.js" type="text/javascript"></script>
    <script src="app/views/graph/graph.js" type="text/javascript"></script>
    <script src="app/views/search/field.js" type="text/javascript"></script>
    <script src="app/views/search/search.js" type="text/javascript"></script>
    <script src="app/views/details/details.js" type="text/javascript"></script>
    <script src="app/views/swimlane/swimlane.js" type="text/javascript"></script>
    <script src="app/setup.js" type="text/javascript"></script>
  </body>
</html>
