<!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/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-12">
                    <input type="datetime" class="form-control" id="begintime" placeholder="Start time">
                  </div>
                </div>
                <div class="form-group">
                  <div class="col-sm-12">
                    <input type="datetime" class="form-control" 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="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>
