<!--
 * 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="page-title clearfix">
    <div class="fontLoader">
        <i class="fa fa-refresh fa-spin-custom"></i>
    </div>
    <div data-id="details" class="clearfix form-horizontal col-sm-12">
        <h1 class="row title"><span data-id="title"></span></h1>
        <button type="button" data-id="editButton" class="btn btn-sm btn-action pull-right"><i class="fa fa-pencil"></i></button>
        <div class="form-group clearfix">
            <span class="pull-left text-muted">Short Description:&nbsp;</span>
            <div class="pull-left">
                <p data-id="shortDescription"></p>
            </div>
        </div>
        <div class="long-description-container form-group clearfix">
            <span class="pull-left text-muted">Long Description:&nbsp;</span>
            <div class="isTextTypeBtn-wrapper pull-right">
                <span class="text-muted pull-left">Formatted</span>
                <label class="switch pull-left">
                    <input type="checkbox" class="switch-input" name="textType" value="text">
                    <span class="switch-slider"></span>
                </label>
                <span class="text-muted">Plain</span>
            </div>
            <div class="glossary-longdescription-wrapper form-control col-sm-12">
                <div class="long-description" name="longDescription" data-id="longDescription" disabled></div>
            </div>
        </div>
        {{#if isTermView}}
        <div class="form-group clearfix">
            <span class="control-label-sm-pr pull-left">Classifications:</span>
            <div class="pull-left" data-id="tagListTerm">
                <button class="btn btn-action btn-sm" title="Add Classification" data-id="addTagTerm">
                    <i class="fa fa-plus"> </i>
                </button>
            </div>
        </div>
        <div class="form-group clearfix">
            <span class="control-label-sm-pr pull-left">Categories:</span>
            <div class="pull-left" data-id="categoryList">
                <button class="btn btn-action btn-sm" title="Add Category" data-id="addCategory">
                    <i class="fa fa-plus"> </i>
                </button>
            </div>
        </div>
        {{/if}} {{#if isCategoryView}}
        <div class="form-group clearfix">
            <span class="control-label-sm-pr pull-left">Terms:</span>
            <div class="pull-left" data-id="termList">
                <button class="btn btn-action btn-sm" title="Add Term" data-id="addTerm">
                    <i class="fa fa-plus"> </i>
                </button>
            </div>
        </div>
        {{/if}} {{#if isTermView}}
        <div class="row">
            <div class="col-sm-12 default-tab">
                <ul class="nav nav-tabs" data-id="tab-list">
                    <li role="entities" class="tab active"><a href="#tab-entities" aria-controls="tab-entities" role="tab" data-toggle="tab">Entities</a></li>
                    <li role="entities" class="tab"><a href="#tab-entitiesProperties" aria-controls="tab-entities" role="tab" data-toggle="tab">Properties</a></li>
                    <li role="classification"><a href="#tab-tagTable" aria-controls="tab-tagTable" role="tab" data-toggle="tab">Classifications</a></li>
                    <li role="relatedTerm"><a href="#tab-relatedTerm" aria-controls="tab-relatedTerm" role="tab" data-toggle="tab">Related Terms</a></li>
                </ul>
            </div>
        </div>
        {{/if}}
    </div>
</div>
{{#if isTermView}}
<div class="tab-content">
    <div id="tab-entitiesProperties" role="entitiesProperties" class="tab-pane animated fadeIn">
        <div id="r_termProperties">
            <div class="fontLoader-relative">
                <i class="fa fa-refresh fa-spin-custom"></i>
            </div>
        </div>
    </div>
    <div id="tab-entities" role="entities" class="tab-pane active animated fadeIn">
        <div id="r_searchResultLayoutView">
            <div class="fontLoader-relative">
                <i class="fa fa-refresh fa-spin-custom"></i>
            </div>
        </div>
    </div>
    <div id="tab-tagTable" role="classification" class="tab-pane animated fadeIn">
        <div id="r_tagTableLayoutView">
            <div class="fontLoader-relative">
                <i class="fa fa-refresh fa-spin-custom"></i>
            </div>
        </div>
    </div>
    <div id="tab-relatedTerm" role="relatedTerm" class="tab-pane animated fadeIn">
        <div id="r_relationLayoutView">
            <div class="fontLoader-relative">
                <i class="fa fa-refresh fa-spin-custom"></i>
            </div>
        </div>
    </div>
</div>
{{/if}}