
<!--
Copyright 2017-present Open Networking Foundation

Licensed 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="row">
  <div class="col-sm-10">
    <h1>Graph</h1>
  </div>
  <div class="col-sm-2">
    <!-- <a href="/admin/core/service/add" class="btn btn-success btn-block">
      <i class="glyphicon glyphicon-plus"></i>
      Add Service
    </a> -->
    <a href="#/" class="btn btn-default btn-block">
      Service List
    </a>
  </div>
</div>
<xos-side-panel config="vm.panelConfig" show="vm.panelShow">
  <h1>
    {{vm.selectedNode.name}}
    <small>
      <i class="glyphicon glyphicon-{{vm.selectedNode.icon}}"></i>
    </small>
  </h1>
  <table class="table">
    <tr>
      <td>Kind:</td>
      <td>{{vm.selectedNode.kind}}</td>
    </tr>
    <tr>
      <td>Enabled:</td>
      <td>{{vm.selectedNode.enabled}}</td>
    </tr>
    <tr>
      <td>Status:</td>
      <td>{{vm.selectedNode.backend_status}}</td>
    </tr>
  </table>
  <a ng-click="vm.exportToTosca(vm.selectedNode)" class="btn btn-primary">
    Export to TOSCA
    <i class="glyphicon glyphicon-export"></i>
  </a>
</xos-side-panel>