<!--
 * 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="row">
    <div class="fontLoader">
        <i class="fa fa-refresh fa-spin-custom"></i>
    </div>
    <div class="ellipsis"><span class="searchResult" style=" font-size: 16px;"></span></div>
    <div class="searchTable">
        <div id="r_searchResultTableLayoutView">
        </div>
        <div data-id="paginationDiv" style="display:none">
            <ul class="pager">
                <li>
                    <button class="btn" data-id="previousData" disabled=true>Previous</button>
                </li>
                <li>
                    <button class="btn" data-id="nextData">Next</button>
                </li>
            </ul>
        </div>
    </div>
</div>
