<!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.min.css" rel="stylesheet">
    <link href="lib/css/backgrid.min.css" rel="stylesheet">
    <link href="lib/pickadate-3.5.2/themes/classic.css" rel="stylesheet">
    <link href="lib/pickadate-3.5.2/themes/classic.date.css" rel="stylesheet">
    <link href="lib/pickadate-3.5.2/themes/classic.time.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 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 class="container-fluid" id="span" role="application">
      <div class="row">
        <div class="col-md-12" role="main"></div>
      </div>
    </div>

    <div class="container-fluid" id="list" role="application">
      <div class="row">
        <div class="col-md-3" role="form">
          <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="form-group">
                  <div class="col-sm-12">
                    <input type="search" class="form-control" id="search" placeholder="Search description">
                  </div>
                </div>
                <hr />
                <div class="form-group">
                  <div class="col-sm-8">
                    <input type="datetime" class="form-control datepicker" id="begindate" placeholder="Start date">
                  </div>
                  <div class="col-sm-4">
                    <input type="datetime" class="form-control timepicker" id="begintime" placeholder="Start time">
                  </div>
                </div>
                <div class="form-group">
                  <div class="col-sm-8">
                    <input type="datetime" class="form-control datepicker" id="stopdate" placeholder="End date">
                  </div>
                  <div class="col-sm-4">
                    <input type="datetime" class="form-control timepicker" id="stoptime" placeholder="End time">
                  </div>
                </div>
                <div class="form-group">
                  <div class="col-sm-12">
                    <input type="datetime" class="form-control" id="duration" placeholder="Duration">
                  </div>
                </div>
                <div class="form-group">
                  <div class="col-sm-12">
                    <button type="button" class="btn btn-default">Search</button>
                  </div>
                </div>
              </form>
            </div>
          </div>
        </div>

        <div class="col-md-9" role="main"></div>
      </div>
    </div>

    <footer></footer>

    <script id="span-details-template" type="text/html">
      <div class="page-header">
        <h1><%- span.description %></h1>
      </div>
      <div class="page-contents">
        <div class="row">
          <div class="col-md-2">
            <h4>Span id</h4>
          </div>
          <div class="col-md-10"><%- span.spanId %></div>
        </div>
        <div class="row">
          <div class="col-md-2">
            <h4>Process id</h4>
          </div>
          <div class="col-md-10"><%- span.processId %></div>
        </div>
        <div class="row">
          <div class="col-md-2">
            <h4>Begin time</h4>
          </div>
          <div class="col-md-10"><%- span.beginTime %></div>
        </div>
        <div class="row">
          <div class="col-md-2">
            <h4>End time</h4>
          </div>
          <div class="col-md-10"><%- span.stopTime %></div>
        </div>
        <div class="row">
          <div class="col-md-2">
            <h4>Duration</h4>
          </div>
          <div class="col-md-10"><%- span.duration %></div>
        </div>
      </div>
    </script>

    <script id="list-span-template" type="text/html">
      <% _.each(spans, function(span) { %>
      <li class="span" data-id="<%- span.spanId %>">
        <div class="panel panel-primary">
          <div class="panel-heading">
            <h3 class="panel-title">
              <p class="pull-right"><%- span.processId %></p>
              <p class="pull-left"><%- span.spanId %>&nbsp;&nbsp;</p>
              <p class="pull-left"><%- span.description %></p>
              <div style="clear: both; line-height: 0px; font-size: 0px;"></div>
            </h3>
          </div>
        </div>
      </li>
      <% }); %>
    </script>

    <script src="lib/js/jquery-2.1.3.min.js" type="text/javascript"></script>
    <script src="lib/js/underscore-1.7.0.min.js" type="text/javascript"></script>
    <script src="lib/js/backbone-1.1.2.min.js" type="text/javascript"></script>
    <script src="lib/bootstrap-3.3.1/js/bootstrap.min.js" type="text/javascript"></script>
    <script src="lib/js/backgrid.min.js" type="text/javascript"></script>
    <script src="lib/js/moment-2.9.0.min.js" type="text/javascript"></script>
    <script src="lib/pickadate-3.5.2/picker.js" type="text/javascript"></script>
    <script src="lib/pickadate-3.5.2/picker.date.js" type="text/javascript"></script>
    <script src="lib/pickadate-3.5.2/picker.time.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/mock.js" type="text/javascript"></script>

    <script src="app/views/span.js" type="text/javascript"></script>
    <script src="app/views/search.js" type="text/javascript"></script>
    <script src="app/setup.js" type="text/javascript"></script>
  </body>
</html>
