<!--
 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="col-xs-9">
    <ng-include src="'overviewGrid.html'"></ng-include>
</div>

<button type='button' class='navbar-toggle tree-menu-button' data-toggle="collapse" data-target=".overview-tree">
    <span class="sr-only">Toggle navigation</span>
    <span class="icon-bar"></span>
    <span class="icon-bar"></span>
    <span class="icon-bar"></span>
 </button>

<div class="overview-tree navbar-collapse collapse col-xs-3">
    <div class="pane-wrapper">
        <div class="pane-header-wrapper">
            <div ng-hide="largeNetwork" class="expand-collapse">
                <i class="icon-chevron-down clickable" title="Expand all nodes" ng-click="expandAll()"></i>
                <i class="icon-chevron-up clickable" title="Unexpand all nodes" ng-click="contractAll()"></i>
            </div>
        </div>
        <div class="pane-viewport">
            <div class="pane-content">
                <div class="treeContainer ng-scope">
                    <div id="overtree"></div>
                </div>
            </div>
        </div>
        <div class="pane-bar" ng-mousedown="startMoving($event)" ng-click="toggle()"></div>
    </div>
</div>
<div ng-init="overviewLoaded()"></div>
