<!--
 * 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="clearfix add-seperator">
    <p data-id="descriptionAssign" style="display:none">Assign a term to this asset</p>
    <button class="btn btn-atlasAction btn-atlas pull-left" data-id="backTaxanomy"><i class="fa fa-chevron-left"></i> Back</button>
    <button class="btn btn-atlasAction btn-atlas pull-right" onclick="this.blur();" title="Refresh" data-id="refreshTaxanomy"><i class="fa fa-refresh"></i></button>
</div>
<div>
    <select type="text" class="form-control" data-id="searchTermInput" placeholder="Search term"></select>
</div>
<div class="">
    <ul class="taxonomyTree">
        <div class="contentLoading"></div>
        <li class="children parent" data-id="Parent"></li>
        <li class="childs parentChild">
            <ul data-id="childList">
            </ul>
        </li>
    </ul>
</div>
