{{!--
    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.
--}}
<div class="endpoints">
    <span class="path hidden">{{@key}}</span>
    {{#post}}
        <div class="endpoint post">
            <div class="operation-handle">
                <div class="method">POST</div>
                <div class="path mono"></div>
                <div class="summary" title="{{summary}}">{{summary}}</div>
                <div class="clear"></div>
            </div>
            {{> operation}}
        </div>
    {{/post}}
    {{#get}}
        <div class="endpoint get">
            <div class="operation-handle">
                <div class="method">GET</div>
                <div class="path mono"></div>
                <div class="summary" title="{{summary}}">{{summary}}</div>
                <div class="clear"></div>
            </div>
            {{> operation}}
        </div>
    {{/get}}
    {{#put}}
        <div class="endpoint put">
            <div class="operation-handle">
                <div class="method">PUT</div>
                <div class="path mono"></div>
                <div class="summary" title="{{summary}}">{{summary}}</div>
                <div class="clear"></div>
            </div>
            {{> operation}}
        </div>
    {{/put}}
    {{#delete}}
        <div class="endpoint delete">
            <div class="operation-handle">
                <div class="method">DELETE</div>
                <div class="path mono"></div>
                <div class="summary" title="{{summary}}">{{summary}}</div>
                <div class="clear"></div>
            </div>
            {{> operation}}
        </div>
    {{/delete}}
</div>