<!--
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 ng-controller="QDR.OverviewController">

    <div class="treeContainer">
        <div id="overtree"></div>
    </div>

    <div class="treeDetails" ng-include="template.url"></div>
</div>
-->
<div ng-controller="QDR.OverviewController">
    <hawtio-pane class="qdr-overview" position="left" width="300">
        <div class="treeContainer">
            <div id="overtree"></div>
        </div>
    </hawtio-pane>
    <div class="treeDetails" ng-include="template.url"></div>
    <div id="linkFilter">
        <div class="filter-title">
            <h6>Filter by link type</h6>
            <button ng-click="filterClose()" type="button" class="btn btn-primary filter-close">x</button>
        </div>
        <select ng-init="currentLinkFilter = 'endpoint'" ng-model="currentLinkFilter" ng-change="setLinkFilter(currentLinkFilter)">
            <option value="">All link types</option>
            <option value="endpoint" selected>Endpoints only</option>
        </select>
    </div>
</div>

<!-- the following scripts are content that gets loaded into the above div that has the temple.url -->
<script type="text/ng-template" id="routers.html">
    <div class="row-fluid">
        <h3>Routers</h3>
        <div class="overview">
            <div class="gridStyle" ng-grid="allRouters"></div>
        </div>
    </div>
</script>

<script type="text/ng-template" id="router.html">
    <div class="row-fluid">
        <h3>Router {{router.data.title}} attributes</h3>
        <div class="gridStyle noHighlight" ng-grid="routerGrid"></div>
    </div>
</script>

<script type="text/ng-template" id="addresses.html">
    <div class="row-fluid">
        <h3>Addresses</h3>
        <div class="overview">
            <div class="gridStyle" ng-grid="addressesGrid"></div>
        </div>
    </div>
</script>
<script type="text/ng-template" id="address.html">
    <div class="row-fluid">
        <h3>Address {{address.data.title}}</h3>
        <div class="gridStyle noHighlight" ng-grid="addressGrid"></div>
    </div>
</script>
<script type="text/ng-template" id="links.html">
    <div class="row-fluid">
        <h3>Links</h3>
        <div class="gridStyle" ng-grid="linksGrid"></div>
    </div>
</script>
<script type="text/ng-template" id="link.html">
    <div class="row-fluid">
        <h3>Link {{link.data.title}}</h3>
        <div class="gridStyle noHighlight" ng-grid="linkGrid"></div>
    </div>
</script>
<script type="text/ng-template" id="connections.html">
    <div class="row-fluid">
    <h3>Connections</h3>
    <div class="overview">
        <div class="gridStyle" ng-grid="allConnectionGrid"></div>
    </div>
    </div>
</script>
<script type="text/ng-template" id="connection.html">
    <div class="row-fluid">
    <h3>Connection {{connection.data.title}}</h3>
    <div class="gridStyle noHighlight" ng-grid="connectionGrid"></div>
    </div>
</script>
<script type="text/ng-template" id="titleHeaderCellTemplate.html">
    <div title="{{col.displayName}}" class="ngHeaderSortColumn {{col.headerClass}}" ng-style="{'cursor': col.cursor}" ng-class="{ 'ngSorted': !noSortVisible }">
        <div ng-click="col.sort($event)" ng-class="'colt' + col.index" class="ngHeaderText">{{col.displayName}}</div>
        <div class="ngSortButtonDown" ng-show="col.showSortButtonDown()"></div>
        <div class="ngSortButtonUp" ng-show="col.showSortButtonUp()"></div>
        <div class="ngSortPriority">{{col.sortPriority}}</div>
    </div>
</script>
<script type="text/ng-template" id="titleCellTemplate.html">
    <div title="{{row.entity[col.field]}}" class="ngCellText">{{row.entity[col.field]}}</div>
</script>
<script type="text/ng-template" id="logs.html">
    <div class="row-fluid">
    <h3>Logs</h3>
    </div>
</script>
<script type="text/ng-template" id="log.html">
    <div class="row-fluid">
    <h3>Log {{log.data.title}}</h3>
    </div>
</script>

<script type="text/ng-template" id="linkRowTemplate.html">
    <div ng-class="{linkDirIn: row.getProperty('linkDir') == 'in', linkDirOut: row.getProperty('linkDir') == 'out'}">
        <div ng-style="{ 'cursor': row.cursor }" ng-repeat="col in renderedColumns" ng-class="col.colIndex()" class="ngCell {{col.cellClass}}">
            <div class="ngVerticalBar" ng-style="{height: rowHeight}" ng-class="{ ngVerticalBarVisible: !$last }">&nbsp;</div>
            <div ng-cell></div>
        </div>
    </div>
</script>

<script type="text/ng-template" id="linkAggTemplate.html">
    <div ng-click='row.toggleExpand(); saveGroupState()' ng-style='rowStyle(row)' class='ngAggregate ng-scope' style='top: 0px; height: 48px; left: 0px;'>
    <span class='ngAggregateText ng-binding'>
            {{row.label CUSTOM_FILTERS}} ({{row.totalChildren()}} {{AggItemsLabel}})
        </span>
    <div ng-class="{true: 'ngAggArrowCollapsed', false: 'ngAggArrowExpanded'}[row.collapsed]"></div>
    </div>
</script>