<!--
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.
-->
{{! Common header template with navbar which starts a container div for content (closed by
common-footer.tmpl) }}
<!DOCTYPE html>
<html>
  <head><title>Apache Impala</title>
    <script src='/www/jquery/jquery-1.12.4.min.js'></script>
    <script src='/www/bootstrap/js/bootstrap.min.js'></script>
    <link rel="stylesheet" type="text/css" href="/www/datatables.min.css"/>
    <script type="text/javascript" src="/www/datatables.min.js"></script>
    <link href='/www/bootstrap/css/bootstrap.min.css' rel='stylesheet' media='screen'>
    <style>
    </style>
  </head>
  <body>
    <header class="navbar navbar-default navbar-static-top" id="top" role="banner">
      <div class="container">
        <div class="navbar-header">
          <a class='navbar-brand' href='/'>{{ __common__.process-name }}</a>
        </div>
        <nav class="collapse navbar-collapse bs-navbar-collapse" role="navigation">
          <ul class="nav navbar-nav">
            {{#__common__.navbar}}
            <li><a href="{{link}}">{{title}}</a></li>
            {{/__common__.navbar}}
          </ul>
        </nav>
      </div>
    </header>
<div class='container' style='width:80%'>
{{#error}}
<div class="alert alert-danger">
  <strong>Error:</strong>
  {{.}}
</div>
{{/error}}
