{#
 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.
#}

<h1 id="search-documentation">{{ _('Search') }}</h1>
<p>
    From here you can search these documents. Enter your search
    words into the box below and click "search".
</p>
<form action="" method="get">
    <input type="text" name="q" value="" />
    <input type="submit" value="{{ _('search') }}" />
    <span id="search-progress" style="padding-left: 10px"></span>
</form>

<form class="search-form"  action="" method="get">
    <input class="search-form__input" placeholder="{{ _('Search docs') }}" name="q" type="search">
    <button class="search-form__button" type="submit">
        <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
            <g id="Group_1579" data-name="Group 1579" transform="translate(-41.001 -41)">
                <path id="Path_169" d="M71.415 64.687a7.215 7.215 0 1 0-6.729 6.728 7.222 7.222 0 0 0 6.729-6.728z" fill="none" data-name="Path 169" transform="translate(-14.277 -14.276)"></path>
                <path id="Path_170" d="M60.863 59.8l-6.093-6.09a7.78 7.78 0 1 0-1.06 1.06l6.09 6.093a.468.468 0 0 0 .662 0l.4-.4a.468.468 0 0 0 .001-.663zM42.512 49.183a6.274 6.274 0 1 1 5.851 5.85 6.28 6.28 0 0 1-5.851-5.85z" fill="#51504f" data-name="Path 170"></path>
            </g>
        </svg>
    </button>
</form>
{%- if search_performed %}
    <h2>{{ _('Search Results') }}</h2>
    {%- if not search_results %}
        <p>{{ _('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.') }}</p>
    {%- endif %}
{%- endif %}
<div id="search-results">
    {%- if search_results %}
        <ul class="search">
            {% for href, caption, context in search_results %}
                <li><a href="{{ docroot }}{{ href }}/?highlight={{ q }}">{{ caption }}</a>
                    <div class="context">{{ context|e }}</div>
                </li>
            {% endfor %}
        </ul>
    {%- endif %}
</div>
