{{!--/*
 * 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.
 */--}}<!DOCTYPE html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">
    <style>
    {{{style}}}
    </style>
    <title>{{title}}</title>
  </head>
  <body>
    <nav  class="navbar navbar-light bg-faded navbar-toggleable-md" style="background-color:#f9bb00">
      <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
   <span class="navbar-toggler-icon"></span>
 </button>
      <a class="navbar-brand" href="#">
        <img src="https://sling.apache.org/res/logo.png" height="50">
      </a>


      <div class="collapse navbar-collapse" id="navbarNav">
        <ul class="navbar-nav container">
          {{#each pagesNav}}
           <li class="nav-item {{active}}">
              <a class="nav-link" href="{{path}}.html">{{title}}</a>
          </li>
          {{/each}}
        </ul>
      </div>
<div class="dropdown">
  <a class="btn btn-secondary btn-sm dropdown-toggle" href="https://example.com" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
    Change View Layout
  </a>

  <div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
    <h6 class="dropdown-header">Select</h6>
    <a class="dropdown-item {{#if viewTypeSmall}}active{{/if}}" href="{{resource.path}}.small.html">List View</a>
    <a class="dropdown-item {{#unless viewTypeSmall}}active{{/unless}}" href="{{resource.path}}.html">Full Article</a>
  </div>
</div>        

    </nav>

<div class="jumbotron jumbotron-fluid">
  <div class="container">   <p class="lead">{{date}}</p>
    <h1 class="display-2">{{title}}</h1>
    <p class="lead">{{description}}</p>
    <p>{{math.VERSION}}</p>
  </div>
</div>
  <div class="container">
    {{> content }}
  </div>



    <!-- jQuery first, then Tether, then Bootstrap JS. -->
    <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>    
  </body>
</html>
