<!--
  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="box-body">
	<table class="table table-bordered table-striped">
		<thead>
		<tr>
			<th>Application</th>
			<th>Type</th>
			<th>Version</th>
			<th>Path</th>
			<th>Streams</th>
			<th>Description</th>
		</tr>
		</thead>
		<tbody>
			<tr ng-repeat="app in Application.providerList track by $index">
				<td class="text-no-break"><a ng-click="showAppDetail(app)">{{app.name}}</a></td>
				<td>{{app.type}}</td>
				<td class="text-no-break">{{app.version}}</td>
				<td>{{app.viewPath}}</td>
				<td>
					<ul>
						<li ng-repeat="stream in app.streams track by $index">
							{{stream.streamId}}
						</li>
					</ul>
				</td>
				<td>{{app.description}}</td>
			</tr>
		</tbody>
	</table>
</div>


<!-- Modal: Application information -->
<div class="modal fade" role="dialog" id="appMDL">
	<div class="modal-dialog modal-lg">
		<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>
				<h4 class="modal-title" id="myModalLabel">{{application.name}}</h4>
			</div>
			<div class="modal-body">
				<ul class="nav nav-tabs">
					<li class="active"><a href="[data-id='install']" data-toggle="tab">Install</a></li>
					<li><a href="[data-id='uninstall']" data-toggle="tab">Uninstall</a></li>
				</ul>
				<div class="tab-content">
					<div class="tab-pane active" data-id="install">
						<pre ng-bind-html="installHTML"></pre>
					</div>
					<div class="tab-pane" data-id="uninstall">
						<pre ng-bind-html="uninstallHTML"></pre>
					</div>
				</div>
			</div>
			<div class="modal-footer">
				<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
			</div>
		</div>
	</div>
</div>
