<!--
  ~ 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="lineage-viz table-bordered" data-ng-controller="Lineage_ioController">
    <button type="button" class="btn btn-primary pull-right" ng-click="onReset()">
        Reset
    </button>
    <div class="graph">
      <h4 data-ng-if="!requested && !lineageData" class="alignLineage">No lineage data found</h4>
      <i data-ng-if="requested" class="fa fa-spinner fa-spin fa-5x"></i>
      <svg >
          <g/>
      </svg>
    </div>
</div>
