<!--
  ~ 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="content-wrapper">
    <div class="page-height-min">
        <section class="content-header">
            <h1 data-lang="sidebar-config"></h1>
            <ol class="breadcrumb">
                <li class="active"><i class="fa fa-laptop" data-lang="sidebar-app"></i></li>
                <li class="active" data-lang="sidebar-config"></li>
            </ol>
        </section>
        <section class="content">
            <table id="app-table" data-pagination="true" data-page-list="[10, 20, 50, 100]" data-search="true" data-show-refresh="true" data-show-toggle="true" data-striped="true" data-show-columns="true">
                <thead>
                <tr>
                    <th data-field="appName" data-sortable="true"><span data-lang="app-name"></span></th>
                    <th data-field="appURL" data-sortable="true"><span data-lang="app-url"></span></th>
                    <th data-field="bootstrapScript" data-sortable="true"><span data-lang="app-bootstrap-script"></span></th>
                    <th data-field="operation" data-formatter="operationApp"><span data-lang="operation"></span></th>
                </tr>
                </thead>
            </table>
            <button type="button" class="btn-xs btn-success" data-toggle="modal" id="add-app" data-lang="operation-add"></button>
        </section>
    </div>
</div>
<div class="modal" id="data-detail-app" tabindex="-1" role="dialog" aria-labelledby="detail-modal-label" aria-hidden="true">
    <div class="modal-dialog" >
        <div class="update-model-size">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
                    <h2 class="modal-title" data-lang="app-detail"></h2>
                </div>
                <div class="modal-body" id ="detail-app-body">
                </div>
            </div>
        </div>
    </div>
</div>
<div class="modal" id="data-update-app" tabindex="-1" role="dialog" aria-labelledby="modify-modal-label" aria-hidden="true">
    <div class="modal-dialog">
        <div class="update-model-size">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
                    <h2 class="modal-title" data-lang="update-app"></h2>
                </div>
                <div class="modal-body" id="update-app-body">
                </div>
            </div>
        </div>
    </div>
</div>
<div class="modal" id="data-add-app" tabindex="-1" role="dialog" aria-labelledby="add-modal-label" aria-hidden="true">
    <div class="modal-dialog">
        <div class="update-model-size">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
                    <h2 class="modal-title" data-lang="add-app"></h2>
                </div>
                <div class="modal-body" id="add-app-body">
                </div>
            </div>
        </div>
    </div>
</div>
<div class="modal" id="delete-data-app" tabindex="-1" role="dialog" aria-labelledby="delete-modal-label" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-body">
                <h3 class="size-font" data-lang="confirm-to-delete"></h3>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn-xs btn-danger" id="delete-app-confirm" data-dismiss="modal" data-lang="operation-confirm"></button>
                <button type="button" class="btn-xs btn-success" id="delete-app-remove" data-dismiss="modal" data-lang="operation-cancel"></button>
            </div>
        </div>
    </div>
</div>
<script src="lib/bootstrap-table/bootstrap-table.js"></script>
<script src="js/common/common.js"></script>
<script src="js/app/apps_overview.js"></script>
