<!--
 * 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="">
    <div class="tableOverlay"></div>
    <!-- Not for table Loader its only for initial loading -->
    <div class="fontLoader">
        <i class="fa fa-refresh fa-spin-custom"></i>
    </div>
    <div class="ellipsis" style="display: none;"><span class="searchResult" style=" font-size: 16px;"></span>
        <a href="javascript:void(0)" class="inputAssignTag multiSelectTerm btnAssign" style="display:none" data-id="addTerm"><i class="fa fa-folder-o"></i> Assign Term</a>
        <a href="javascript:void(0)" class="inputAssignTag multiSelectTag assignTag btnAssign" style="display:none" data-id="addAssignTag"><i class="fa fa-plus"></i> Assign Tag</a>
    </div>
    <div class="searchTable">
        <div data-id="containerCheckBox" style="display: none;">
            <input type="checkbox" id="inputLabel" class="checkbox-inline" name="queryType" value="text" name="check" value="1" data-id="checkDeletedEntity" />
            <label class="checkbox-inline" for="inputLabel">
                <b>Include historical entities</b></label>
        </div>
        <span style="display: none;" class="labelShowRecord pull-left" data-id="pageRecordText"></span>
        <div data-id="paginationDiv" style="display:none">
            <ul class="pager pull-right">
                <li>
                    <button type="button" class="btn" data-id="previousData" disabled=true>Previous</button>
                </li>
                <li>
                    <button type="button" class="btn" data-id="nextData">Next</button>
                </li>
            </ul>
        </div>
        <div id="r_searchResultTableLayoutView">
            {{#if entityCreate}}
            <div class="entityLink" style="display:none">
                <h1><b>{{searchType}}</b></h1>
                <p class="entityLink">Search Atlas for existing entities or
                    <a href="javascript:void(0)" data-id='createEntity'> create new entity </a>
                </p>
            </div>
            {{/if}}
        </div>
    </div>
</div>
