<!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 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-4" 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="search-fields">
                </div>
                <div class="form-group">
                  <!-- Split button -->
                  <div class="col-sm-12">
                    <div class="btn-group">
                      <button type="button" class="btn btn-default field">Add Field</button>
                      <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
                        <span class="caret"></span>
                        <span class="sr-only">Toggle Dropdown</span>
                      </button>
                      <ul class="dropdown-menu" role="menu">
                        <li><a href="#" class="add-field" data-field="begin">Start Date/Time</a></li>
                        <li><a href="#" class="add-field" data-field="end">End Date/Time</a></li>
                        <li><a href="#" 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>
        </div>

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

    <footer></footer>

    <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="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/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.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/span.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/setup.js" type="text/javascript"></script>
  </body>
</html>
