<!--
 * 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 class="hide form-horizontal" data-id="createForm" style="width: 70%;margin: 0 auto;">
    {{#if fromTable}}
    <div class="form-group">
        <label class="control-label col-sm-2 {{#if create}}required{{/if}}" for="name">Name</label>
        {{#if create}}
        <div class="col-sm-10">
            <input class="form-control businessMetadata-name require" data-id="name" placeholder="Name(required)" autofocus />
        </div>
        {{else}}
        <span class="ellipsis-with-margin control-label text-left col-sm-10" data-id="title"></span> {{/if}}
    </div>
    <div class="form-group">
        <label class="control-label col-sm-2" for="description">Description</label>
        <div class="col-sm-10">
            <textarea class="form-control customTextEditor" data-id="description" value="{{description}}" placeholder="Description" ></textarea>
        </div>
    </div>
    {{/if}}
    <div class="form-group">
        <!-- <h4 class="col-sm-6">Attributes</h4> -->
        {{#if isEditAttr}}
        <div class="col-sm-12 no-padding-left">
            <button title="Add Business Metadata attribute" type="button" class="btn btn-action btn-sm pull-left" data-id="attributeData"><i class="fa fa-plus"></i> Add Business Metadata attribute</button>
        </div>
        {{/if}}
    </div>
    <div data-id="addAttributeDiv">
    </div>
    </div>
</form>
<div class="modal-footer " data-id="modalFooter">
    <button type="button" class="btn btn-action cancel" data-id="businessMetadataAttrPageCancle">Cancel</button>
    <button type="button" class="btn btn-atlas ok" data-id="businessMetadataAttrPageOk">Ok</button>
</div>