
<!--
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="container-fluid">
  <div ng-hide="vm.error && vm.loader" style="height: 900px">
    <div class="onethird-height">
      <div class="well">
        Services Graph
      </div>
      <div class="well pull-right" ng-click="vm.reloadGlobalScope()" ng-show="vm.selectedSubscriber">
        Reset subscriber
      </div>
      <service-topology service-chain="vm.serviceChain"></service-topology>
    </div>
    <div class="twothird-height">
      <div class="well">
        Logical Resources
      </div>
      <logic-topology ng-if="vm.subscribers" subscribers="vm.subscribers" selected="vm.selectedSubscriber"></logic-topology>
    </div>
  </div>
  <div class="row" ng-if="vm.error">
    <div class="col-xs-12">
      <div class="alert alert-danger">
        {{vm.error}}
      </div>
    </div>
  </div>
  <div class="row" ng-if="vm.loader">
    <div class="col-xs-12">
      <div class="loader">Loading</div>
    </div>
  </div>
</div>