<#--

    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.

-->
  <!-- Loading Modal -->
  <div class="modal fade" id="queryLoadingModal" role="dialog"  data-backdrop="static" data-keyboard="false">
    <div class="modal-dialog">
      <!-- Modal content-->
      <div class="modal-content">
        <div class="modal-header">
          <h4 class="modal-title" id="cancelTitle">Query Submitted</h4>
        </div>
        <div class="modal-body" style="line-height:3">
            <table border="0px" width="100%"><tr>
                <td align="center" style="font-size:125%">Waiting for results...<br>Please don't close this window</td>
                <td align="right"><img src="/static/img/loader.gif"></td>
            </tr></table>
        </div>
        <div class="modal-footer">
        <table border="0px" width="100%"><tr>
        <td align="left" id="stopWatch">Elapsed Time: 00:00</td><td align="right">
          <button type="button" class="btn btn-light" title="Check profiles in new tab" onclick="window.open(&#39;/profiles&#39;)">Check Status <span class="material-icons">open_in_new</span></button>
          </td>
          </tr>
          </table>
        </div>
      </div>
    </div>
  </div>