<!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>
    <head>
        <title>{{info.title}}-{{info.version}}</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <link rel="shortcut icon" href="images/nifi16.ico"/>
        <script type="text/javascript" src="../../nifi/assets/jquery/dist/jquery.min.js"></script>
        <script type="text/javascript">
            if (typeof window.jQuery === 'undefined') {
                document.write(unescape('%3Cscript src="https://code.jquery.com/jquery-3.1.1.min.js" type="text/javascript" %3E%3C/script%3E'));
            }
        </script>
        <style>
            @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic|Noto+Serif:400,400italic,700,700italic|Droid+Sans+Mono:400";

            html {
                overflow-y: scroll;
            }
            
            html, html a {
                -webkit-font-smoothing: antialiased;
                text-shadow: 1px 1px 1px rgba(0,0,0,0.004);
            }

            body {
                width: 62.5em;
                margin: 0 auto;
                display: block;
                font-family: "Open Sans", "DejaVu Sans", sans-serif;
            }
            
            div.header {
                margin-top: 10px;
            }
            
            img.logo {
                float: left;
                margin-right: 10px;
            }
            
            div.header > div.title {
                font-size: 30px;
                height: 50px;
                line-height: 50px;
            }
            
            .sub-title {
                font-style: italic;
                color: #aaa;
            }
            
            div.overview {
                margin-top: 10px;
                margin-bottom: 15px;
            }
            
            div.endpoint {
                margin-bottom: 10px;
            }

            /* get */
            
            div.endpoint.get {
                border: 1px solid #174961;
            }
            
            div.get div.operation-handle {
                background-color: rgba(23, 73, 97, .15);
            }
            
            div.get div.method {
                background-color: #174961;
            }
            
            div.get div.operation {
                border-top: 1px solid #174961;
            }
            
            /* post */
            
            div.endpoint.post {
                border: 1px solid #7298AC;
            }
            
            div.post div.operation-handle {
                background-color: rgba(114, 152, 172, .15);
            }
            
            div.post div.method {
                background-color: #7298AC;
            }
            
            div.post div.operation {
                border-top: 1px solid #7298AC;
            }
            
            /* put */
            
            div.endpoint.put {
                border: 1px solid #063046;
            }
            
            div.put div.operation-handle {
                background-color: rgba(6, 48, 70, .15);
            }
            
            div.put div.method {
                background-color: #063046;
            }
            
            div.put div.operation {
                border-top: 1px solid #063046;
            }
            
            /* delete */
            
            div.endpoint.delete {
                border: 1px solid #47758E;
            }
            
            div.delete div.operation-handle {
                background-color: rgba(71, 117, 142, .15);
            }
            
            div.delete div.method {
                background-color: #47758E;
            }
            
            div.delete div.operation {
                border-top: 1px solid #47758E;
            }
            
            /* operations */
            
            div.operation-handle {
                cursor: pointer;
                padding-right: 5px;
                height: 22px;
            }
            
            div.method {
                float: left;
                width: 75px;
                color: #fff;
                text-align: center;
                background-color: #7098ad;
                margin-right: 10px;
                font-weight: bold;
            }

            div.endpoint div.path {
                float: left;
                line-height: 22px;
                overflow: hidden;
                text-overflow: ellipsis;
            }

            div.summary {
                float: right;
                font-size: 12px;
                line-height: 22px;
                white-space: nowrap;
                overflow: hidden;
                text-overflow: ellipsis;
                width: 40%;
                text-align: right;
            }

            div.operation {
                padding: 5px;
                font-size: 12px;
            }

            div.operation > div.title {
                font-weight: bold;
                color: #000;
            }
            
            div.operation > table {
                margin-left: 5px;
                margin-right: 5px;
            }
            
            div.operation div.details {
                margin-left: 5px;
                margin-bottom: 5px;
                color: #333;
            }
            
            div.operation div.description {
                margin-bottom: 10px;
            }

            div.mediatype {
                line-height: 16px;
            }

            div.mediatype > div.title {
                float: left;
                width: 70px;
            }
            
            div.mediatype div.title {
                float: left;
            }
            
            div.type {
                position: fixed;
                width: 800px;
                height: 500px;
                left: 50%;
                top: 50%;
                margin-left: -400px;
                margin-top: -250px;
                border: 3px solid #365C6A;
                box-shadow: 4px 4px 6px rgba(0, 0, 0, 0.9);
                padding: 10px;
                background-color: #eee;
                font-size: 12px;
            }
            
            div.type-container {
                overflow-y: auto;
                height: 415px;
                border-bottom: 1px solid #ccc;
            }
            
            div.close {
                border: 1px solid #aaa;
                background-color: #ddd;
                float: right;
                margin-top: 10px;
                font-weight: bold;
                height: 25px;
                line-height: 25px;
                padding: 0 10px;
                cursor: pointer;
            }
            
            div.close:hover {
                background-color: #d1d1d1;
            }
            
            div.section-header > div.title {
                font-size: 24px;
                float: left;
            }
            
            div.section-description {
                float: right;
                margin-top: 10px;
            }
            
            div.section-endpoints {
                margin-top: 10px;
            }
            
            /* tables */

            table {
                background-color: #fefefe;
                border: 1px solid #ccc;
                border-left: 6px solid #ccc;
                color: #555;
                display: block;
                margin-bottom: 12px;
                padding: 5px 8px;
            }
            
            table th {
                font-weight: bold;
                vertical-align:top;
                text-align:left;
                padding: 4px 15px;
                border-width: 0;
                white-space: nowrap;
            }
            
            table td {
                vertical-align:top;
                text-align:left;
                padding: 2px 15px;
                border-width: 0;
                white-space: nowrap;
            }
            
            table td:last-child {
                width: 99%;
                white-space: normal;
            }
            
            code.example {
                background-color: #fefefe;
                border: 1px solid #ccc;
                border-left: 6px solid #ccc;
                color: #555;
                margin-bottom: 10px;
                padding: 5px 8px;
                white-space: pre;
                display: block;
                tab-size: 4;
                -moz-tab-size: 4;
                -o-tab-size: 4;
                line-height: 20px
            }
            
            span.nested.collapsed {
                cursor: pointer;
                border: 1px solid #7298AC;
                background-color: rgba(114, 152, 172, .15);
                padding: 1px;
            }
            
            /* general */
            
            .mono {
                font-family: monospace;
            }
            
            div.clear {
                clear: both;
            }

            .hidden {
                display: none;
            }
            
            a, .link {
                cursor: pointer;
                color: #1e373f;
                font-weight: normal;
            }
            
            a:hover, .link:hover {
                color: #264c58;
                text-decoration: underline;
            }
        </style>
        <script type="text/javascript">
            $(document).ready(function () {
                // hide any open type dialogs
                $('html').on('click', function() {
                    $('div.type').hide();
                }).on('keydown', function(e) {
                    if (e.which === 27) {
                        $('div.type').hide();
                    }
                });
                
                // populate all paths - this is necessary because the @key
                // doesn't seem to reset after iterating through a nested 
                // array or object
                $('span.path').each(function() {
                    var path = $(this);
                    var endpoint = path.parent();
                    endpoint.find('div.path').text(path.text());
                });
                
                // toggles the visibility of a given operation
                $('div.operation-handle').on('click', function () {
                    $(this).next('div.operation').slideToggle();
                });
                
                // add support for clicking to view the definition of a type
                $('a.type-link').on('click', function(e) {
                    // hide any previously shown dialogs
                    $('div.type').hide();

                    // show the type selected
                    var link = $(this);
                    var typeId = link.text();
                    $('#' + typeId).show();
                    e.stopPropagation();
                });
                
                // prevent hiding when clicking on the type dialog
                $('div.type').on('click', function(e) {
                    e.stopPropagation();
                });
                
                // due to lack of support for @last when iterating objects in 
                // handlebars we need to remove the last comma from each example
                $('code.example').find('span.comma:last').remove();
                
                // populate nested examples
                $('code.example').on('click', 'span.nested', function(e) {
                    var nested = $(this).removeClass('collapsed');
                    var nestedId = nested.find('span.nested-id');
                    var nestedExample = nested.find('span.nested-example');
                    
                    // get the id of the nested example
                    var typeId = nestedId.text();
                    var example = $('#' + typeId + ' code.example').html();
                    var depth = nestedId.parents('span.open-object').length;
                    
                    // tab over as appropriate
                    example = example.replace(/(\r\n|\r|\n)/g, function(match) {
                        var tab = '\t';
                        for (var i = 0; i < depth - 1; i++) {
                            tab += '\t';
                        }
                        return match + tab;
                    });
                    
                    // copy over the example
                    nestedExample.html(example);
                    e.stopPropagation();
                });
                
                // handle close button
                $('div.close').on('click', function() {
                    $(this).closest('div.type').hide();
                });
                
                // function for organizing the endpoints
                var organizeEndpoints = function(term, container) {
                    $('div.unorganized > div.endpoints').each(function() {
                        var endpoints = $(this);
                        var path = endpoints.find('div.path').text();
                        
                        if (term === null || path.indexOf(term) === 0) {
                            endpoints.detach().appendTo(container);
                        }
                    });
                };
                
                // organize the endpoints
                organizeEndpoints('/buckets', $('#bucket-endpoints'));
                organizeEndpoints('/items', $('#item-endpoints'));
                organizeEndpoints('/flows', $('#flow-endpoints'));
                organizeEndpoints('/bundles', $('#bundle-endpoints'));
                organizeEndpoints('/extensions', $('#extension-endpoints'));
                organizeEndpoints('/extension-repository', $('#extension-repository-endpoints'));
                organizeEndpoints('/tenants', $('#tenant-endpoints'));
                organizeEndpoints('/policies', $('#policy-endpoints'));
                organizeEndpoints('/access', $('#access-endpoints'));

                // handle expanding/collapsing the sections
                $('div.section-header > div.title').on('click', function() {
                    $(this).parent('div.section-header').next('div.section-endpoints').slideToggle();
                });
            });
        </script>
    </head>
    <body>
        <div class="header">
            <img class="logo" src="images/bgNifiLogo.png" alt="NiFi Logo"/>
            <div class="title">{{basePath}}</div>
            <div class="sub-title">{{info.title}} {{info.version}}</div>
            <div class="clear"></div>
        </div>
        <div class="clear"></div>
        <div class="overview">{{info.description}}</div>
        <div class="section">
            <div class="section-header">
                <div class="title link">Buckets</div>
                <div class="sub-title section-description">Bucket endpoints</div>
                <div class="clear"></div>
            </div>
            <div id="bucket-endpoints" class="section-endpoints hidden"></div>
        </div>
        <div class="section">
            <div class="section-header">
                <div class="title link">Items</div>
                <div class="sub-title section-description">Item endpoints</div>
                <div class="clear"></div>
            </div>
            <div id="item-endpoints" class="section-endpoints hidden"></div>
        </div>
        <div class="section">
            <div class="section-header">
                <div class="title link">Flows</div>
                <div class="sub-title section-description">Flow endpoints</div>
                <div class="clear"></div>
            </div>
            <div id="flow-endpoints" class="section-endpoints hidden"></div>
        </div>
        <div class="section">
            <div class="section-header">
                <div class="title link">Bundles</div>
                <div class="sub-title section-description">Bundle endpoints</div>
                <div class="clear"></div>
            </div>
            <div id="bundle-endpoints" class="section-endpoints hidden"></div>
        </div>
        <div class="section">
            <div class="section-header">
                <div class="title link">Extensions</div>
                <div class="sub-title section-description">Extension endpoints</div>
                <div class="clear"></div>
            </div>
            <div id="extension-endpoints" class="section-endpoints hidden"></div>
        </div>
        <div class="section">
            <div class="section-header">
                <div class="title link">Extension Repository</div>
                <div class="sub-title section-description">Extension Repository endpoints</div>
                <div class="clear"></div>
            </div>
            <div id="extension-repository-endpoints" class="section-endpoints hidden"></div>
        </div>
        <div class="section">
            <div class="section-header">
                <div class="title link">Tenants</div>
                <div class="sub-title section-description">Tenant endpoints</div>
                <div class="clear"></div>
            </div>
            <div id="tenant-endpoints" class="section-endpoints hidden"></div>
        </div>
         <div class="section">
              <div class="section-header">
                  <div class="title link">Policies</div>
                  <div class="sub-title section-description">Policy endpoints</div>
                  <div class="clear"></div>
              </div>
              <div id="policy-endpoints" class="section-endpoints hidden"></div>
          </div>
          <div class="section">
              <div class="section-header">
                  <div class="title link">Access</div>
                  <div class="sub-title section-description">Access endpoints</div>
                  <div class="clear"></div>
              </div>
              <div id="access-endpoints" class="section-endpoints hidden"></div>
          </div>

        <div class="unorganized hidden">
            {{#each paths}}
                {{> endpoint}}
            {{/each}}
        </div>
        {{#each definitions}}
            {{> type}}
        {{/each}}
    </body>
</html>