<!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="collapse navbar-collapse">
          <a class="navbar-brand" href="#">HTrace</a>

          <ul class="nav navbar-nav">
            <li class="active"><a href="/">Search</a></li>
          </ul>
        </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>
    </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>
