<!--
 * 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="fontLoader">
    <i class="fa fa-refresh fa-spin-custom"></i>
</div>
<form name="tagDefinitionform" class="css-form hide" data-id="createTagForm">
    <div class="form-group">
        {{#if create}}
        <input class="form-control row-margin-bottom" data-id="tagName" placeholder="Name(required)" autofocus>
        </input>
        {{else}}
        <h4 class="ellipsis"><span data-id="title"></span></h4>
        </input>
        {{/if}}
        <input class="form-control row-margin-bottom" data-id="description" value="{{description}}" placeholder="Description">
        </input>
        {{#if create}}
        <div class="row row-margin-bottom">
            <div class="col-md-12">
                <span>Select tags to inherit attributes(optional)</span>
                <p class="attributeText">Attributes define additional properties for the tag</p>
                <select class="form-control" data-id="parentTagList" multiple="multiple"></select>
            </div>
        </div>
        <div class="clearfix">
            <span class="pull-left">Attributes(optional)</span>
            <button type="button" class="btn btn-success btn-sm pull-right" data-id="attributeData"><i class="fa fa-plus"></i> Add New Attribute</button>
        </div>
        {{/if}}
        <div data-id="addAttributeDiv">
        </div>
    </div>
</form>
