| <!-- |
| Licensed t o 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. |
| --> |
| |
| <style> |
| @media (min-width: 768px) { |
| .showLeft { |
| display: block; |
| } |
| } |
| @media (max-width: 767px) { |
| .showLeft { |
| display: none; |
| } |
| #backgroundMap { |
| display: none; |
| } |
| div.qdrTopology div.legend-container.page-menu { |
| top: 0; |
| right: auto; |
| left: 0; |
| padding-right: 0; |
| } |
| } |
| |
| #popover-div { |
| position: absolute; |
| z-index: 200; |
| border-radius: 4px; |
| border: 1px solid gray; |
| background-color: white; |
| color: black; |
| opacity: 1; |
| padding: 12px; |
| font-size: 14px; |
| display: none; |
| } |
| |
| table.popupTable td { |
| padding-right: 5px; |
| font-size: 10px; |
| } |
| |
| .legend-container { |
| position: absolute; |
| top: 1em; |
| right: 1em; |
| } |
| |
| .legend-container ul { |
| list-style: none; |
| padding-left: 0; |
| margin-bottom: 0.5em; |
| } |
| |
| span.legend-text { |
| padding-left: 0.25em; |
| font-weight: bold; |
| } |
| |
| span.legend-text:disabled { |
| color: darkgray; |
| } |
| |
| li:disabled * { |
| color: darkgray; |
| } |
| circle.flow { |
| opacity: 1; |
| pointer-events: none; |
| /*fill: green; */ |
| } |
| |
| circle.flow.fade { |
| opacity: 0.1; |
| } |
| |
| #topo_legend ul.addresses li { |
| margin-top: 0.5em; |
| margin-bottom: 1em; |
| } |
| |
| #topo_legend ul.addresses { |
| margin-bottom: 1.5em; |
| } |
| |
| #topo_logend ul.congestion, #topo_logend ul.congestion li { |
| margin-bottom: 0; |
| padding-bottom: 0; |
| } |
| /* the checkboxes for the addresses */ |
| #topo_legend ul li input[type=checkbox]:checked + label::before { |
| content:'\2713'; |
| font-weight: bold; |
| font-size: 16px; |
| display:inline-block; |
| /* padding:0 6px 0 0; */ |
| color: black; |
| position: absolute; |
| top: -8px; |
| left: -1px; |
| } |
| /* The aggregate addresses need a black checkbox on the white background */ |
| #topo_legend ul li input[type=checkbox]:checked + label.aggregate::before { |
| color: black; |
| /* left: 1px; */ |
| } |
| #topo_legend ul.addresses button.btn-default { |
| background-image: none; |
| color: white; |
| border-radius: 10px; |
| } |
| |
| #topo_legend li.legend-sublist ul { |
| margin-bottom: 0.5em; |
| } |
| |
| #topo_legend li.legend-sublist ul.addresses{ |
| max-height: 11.6em; /* show up to 4 addresses */ |
| overflow-y: auto; |
| } |
| |
| li.legend-sublist > ul ul { |
| margin-left: 1em; |
| } |
| |
| #popover-div h5 { |
| margin-top: 1em; |
| margin-bottom: 0; |
| } |
| #popover-div h5:first-of-type { |
| margin-top:0; |
| } |
| |
| div.qdrTopology div.page-menu { |
| left: auto; |
| width: auto; |
| background-color: white; |
| } |
| |
| table.popupTable { |
| width: 100%; |
| } |
| table.popupTable tr.header { |
| color: black; |
| background-color: #EAEAEA; |
| } |
| |
| table.popupTable td { |
| padding: 0 4px; |
| } |
| |
| .graticule { |
| fill: none; |
| stroke: #777; |
| stroke-width: .5px; |
| stroke-opacity: .5; |
| } |
| |
| g.geo path.land { |
| fill: #dcedf7; |
| stroke: #000; |
| stroke-opacity: 1; |
| stroke-width: 1px; |
| } |
| |
| .boundary { |
| fill: none; |
| stroke: #333; |
| stroke-width: 5px; |
| } |
| |
| .panel-group { |
| margin-bottom: 0; |
| } |
| |
| span.map-label { |
| display: inline-block; |
| width: 4em; |
| } |
| #main_container { |
| padding-left: 0; |
| padding-right: 0; |
| } |
| |
| div.titleBar { |
| width: 100%; |
| height: 1em; |
| border-bottom: 1px solid gray; |
| background-image: linear-gradient(to bottom,#fafafa 0,#ededed 100%); |
| background-repeat: repeat-x; |
| } |
| div.titleBar button { |
| float: right; |
| position: relative; |
| top: -4px; |
| } |
| |
| td.more-info { |
| font-size: 0.5em; |
| color: blue; |
| } |
| |
| |
| </style> |
| <div class="qdrTopology" ng-controller="QDR.TopologyController"> |
| <div class="legend-container page-menu navbar-collapse collapse"> |
| <uib-accordion id="topo_legend" close-others="false"> |
| <div uib-accordion-group class="panel-default" is-open="legendOptions.traffic.open" heading="Show Traffic"> |
| <ul class="options"> |
| <li class="legend-sublist" ng-hide="!legendOptions.traffic.open"> |
| <ul> |
| <li><label> |
| <input type='checkbox' ng-model="legendOptions.traffic.dots" value="dots" /> |
| Message path by address |
| </label></li> |
| <li> |
| <ul class="addresses" ng-show="legendOptions.traffic.dots"> |
| <li ng-repeat="(address, color) in addresses" class="legend-line"> |
| <checkbox style="background-color: {{addressColors[address]}};" title="{{address}}" |
| ng-change="addressFilterChanged()" ng-model="addresses[address]" |
| ng-mouseenter="enterLegend(address)" ng-mouseleave="leaveLegend()"></checkbox> |
| <span class="legend-text" ng-mouseenter="enterLegend(address)" ng-mouseleave="leaveLegend()" |
| ng-click="addressClick(address)" title="{{address}}">{{address | limitTo : |
| 15}}{{address.length>15 ? '…' : ''}}</span> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| <ul> |
| <li><label> |
| <input type='checkbox' ng-model="legendOptions.traffic.congestion" value="congestion" /> |
| Link utilization |
| </label></li> |
| <li> |
| <ul class="congestion" ng-show="legendOptions.traffic.congestion"> |
| <li> |
| <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" |
| version="1.1" preserveAspectRatio="xMidYMid meet" width="140" height="40"> |
| <defs> |
| <linearGradient xmlns="http://www.w3.org/2000/svg" id="gradienta1bEihLEHL" |
| gradientUnits="userSpaceOnUse" x1="0%" y1="0%" x2="100%" y2="0%"> |
| <stop style="stop-color: #999999;stop-opacity: 1" offset="0" /> |
| <stop style="stop-color: #00FF00;stop-opacity: 1" offset="0.333" /> |
| <stop style="stop-color: #FFA500;stop-opacity: 1" offset="0.666" /> |
| <stop style="stop-color: #FF0000;stop-opacity: 1" offset="1" /> |
| </linearGradient> |
| </defs> |
| <g> |
| <rect width="140" height="20" x="0" y="0" fill="url(#gradienta1bEihLEHL)"></rect> |
| <text x="1" y="30" class="label">Idle</text> |
| <text x="106" y="30" class="label">Busy</text> |
| </g> |
| </svg></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </div> |
| <div uib-accordion-group class="panel-default" is-open="legendOptions.legend.open" heading="Legend"> |
| <div id="topo_svg_legend"></div> |
| </div> |
| <div id="backgroundMap" uib-accordion-group class="panel-default" is-open="legendOptions.map.open" heading="Background map"> |
| <div id="topo_mapOptions"> |
| <div class="colorPicker"> |
| <ul> |
| <li> |
| <label><span class='map-label'>Land</span> <input id="areaColor" name="areaColor" type="color" |
| ng-model="mapOptions.areaColor" /></label> |
| </li> |
| <li> |
| <label><span class='map-label'>Ocean</span> <input id="oceanColor" name="oceanColor" |
| type="color" ng-model="mapOptions.oceanColor" /></label> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| </uib-accordion> |
| </div> |
| <div class="diagram"> |
| <div id="topology"> |
| <!-- d3 toplogy here --> |
| </div> |
| <div id="crosssection"></div> |
| <div id="crosshtml" ng-bind-html="crosshtml"></div> |
| |
| <div id="node_context_menu" class="contextMenu"> |
| <ul> |
| <li class="na" ng-class="{'force-display': !isFixed()}" ng-click="setFixed(true)">Freeze in place</li> |
| <li class="na" ng-class="{'force-display': isFixed()}" ng-click="setFixed(false)">Unfreeze</li> |
| </ul> |
| </div> |
| </div> |
| <div id="popover-div" ng-bind-html="trustedpopoverContent"></div> |
| </div> |
| |
| <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.attributeValue}}" class="ui-grid-cell-contents">{{COL_FIELD CUSTOM_FILTERS | pretty}}</div> |
| </script> |