You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ea...@apache.org on 2018/05/17 16:09:31 UTC

[6/6] qpid-dispatch git commit: DISPATCH-1000 Restore the html/css/js files that were in the npm repository

DISPATCH-1000 Restore the html/css/js files that were in the npm repository


Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/dfd3cf7c
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/dfd3cf7c
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/dfd3cf7c

Branch: refs/heads/master
Commit: dfd3cf7cb982fe8ffe9296a0100c3341660fb2b7
Parents: 94e55a8
Author: Ernest Allen <ea...@redhat.com>
Authored: Thu May 17 12:09:07 2018 -0400
Committer: Ernest Allen <ea...@redhat.com>
Committed: Thu May 17 12:09:07 2018 -0400

----------------------------------------------------------------------
 .gitignore                                      |    1 +
 console/stand-alone/index.html                  |   34 +-
 console/stand-alone/plugin/css/brokers.ttf      |  Bin 0 -> 2272 bytes
 console/stand-alone/plugin/css/dispatch.css     |  706 ++++++
 console/stand-alone/plugin/css/dispatchpf.css   |  473 ++++
 console/stand-alone/plugin/css/plugin.css       | 1019 +++++++++
 console/stand-alone/plugin/html/qdrCharts.html  |   48 +
 console/stand-alone/plugin/html/qdrConnect.html |   87 +
 console/stand-alone/plugin/html/qdrList.html    |  144 ++
 .../stand-alone/plugin/html/qdrOverview.html    |  283 +++
 console/stand-alone/plugin/html/qdrSchema.html  |   62 +
 .../stand-alone/plugin/html/qdrTopology.html    |  146 ++
 .../plugin/html/tmplChartConfig.html            |   85 +
 .../stand-alone/plugin/html/tmplListChart.html  |   40 +
 .../stand-alone/plugin/html/tmplListTree.html   |   42 +
 .../plugin/html/tmplOverviewTree.html           |   48 +
 .../stand-alone/plugin/js/dlgChartController.js |  204 ++
 .../stand-alone/plugin/js/qdrChartService.js    |  859 +++++++
 console/stand-alone/plugin/js/qdrCharts.js      |  160 ++
 console/stand-alone/plugin/js/qdrGlobals.js     |   46 +
 console/stand-alone/plugin/js/qdrList.js        |  938 ++++++++
 console/stand-alone/plugin/js/qdrListChart.js   |  146 ++
 console/stand-alone/plugin/js/qdrOverview.js    | 1774 +++++++++++++++
 .../plugin/js/qdrOverviewChartsController.js    |  134 ++
 .../plugin/js/qdrOverviewLogsController.js      |   70 +
 console/stand-alone/plugin/js/qdrSchema.js      |   83 +
 console/stand-alone/plugin/js/qdrService.js     |  269 +++
 console/stand-alone/plugin/js/qdrSettings.js    |  172 ++
 .../plugin/js/qdrTopAddressesController.js      |  218 ++
 console/stand-alone/plugin/js/qdrTopology.js    | 2098 ++++++++++++++++++
 30 files changed, 10372 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dfd3cf7c/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index b4164bb..4ab831e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@ tests/policy-1/policy-*.json
 .settings
 console/test/topolgies/config-*
 .history
+.vscode

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dfd3cf7c/console/stand-alone/index.html
----------------------------------------------------------------------
diff --git a/console/stand-alone/index.html b/console/stand-alone/index.html
index 95c8c28..9602b42 100644
--- a/console/stand-alone/index.html
+++ b/console/stand-alone/index.html
@@ -44,9 +44,9 @@ under the License.
     <link rel="stylesheet" href="node_modules/angular-ui-grid/ui-grid.css" type="text/css"/>
 
     <!-- local Styles -->
-    <link rel="stylesheet" href="node_modules/dispatch-console-pages/dist/css/plugin.css" type="text/css"/>
-    <link rel="stylesheet" href="node_modules/dispatch-console-pages/dist/css/dispatch.css" type="text/css"/>
-    <link rel="stylesheet" href="node_modules/dispatch-console-pages/dist/css/dispatchpf.css" type="text/css"/>
+    <link rel="stylesheet" href="plugin/css/plugin.css" type="text/css"/>
+    <link rel="stylesheet" href="plugin/css/dispatch.css" type="text/css"/>
+    <link rel="stylesheet" href="plugin/css/dispatchpf.css" type="text/css"/>
 
 </head>
 <body ng-app="QDR" ng-controller="QDR.Core">
@@ -133,20 +133,20 @@ under the License.
 <script type="text/javascript" src="node_modules/dispatch-management/dist/dispatch-management.js"></script>
 <script type="text/javascript" src="plugin/js/dispatchPlugin.js"></script>
 <script type="text/javascript" src="plugin/js/navbar.js"></script>
-<script type="text/javascript" src="node_modules/dispatch-console-pages/dist/js/qdrGlobals.js"></script>
-<script type="text/javascript" src="node_modules/dispatch-console-pages/dist/js/qdrOverview.js"></script>
-<script type="text/javascript" src="node_modules/dispatch-console-pages/dist/js/qdrOverviewLogsController.js"></script>
-<script type="text/javascript" src="node_modules/dispatch-console-pages/dist/js/qdrOverviewChartsController.js"></script>
-<script type="text/javascript" src="node_modules/dispatch-console-pages/dist/js/qdrTopAddressesController.js"></script>
-<script type="text/javascript" src="node_modules/dispatch-console-pages/dist/js/dlgChartController.js"></script>
-<script type="text/javascript" src="node_modules/dispatch-console-pages/dist/js/qdrList.js"></script>
-<script type="text/javascript" src="node_modules/dispatch-console-pages/dist/js/qdrListChart.js"></script>
-<script type="text/javascript" src="node_modules/dispatch-console-pages/dist/js/qdrCharts.js"></script>
-<script type="text/javascript" src="node_modules/dispatch-console-pages/dist/js/qdrSchema.js"></script>
-<script type="text/javascript" src="node_modules/dispatch-console-pages/dist/js/qdrService.js"></script>
-<script type="text/javascript" src="node_modules/dispatch-console-pages/dist/js/qdrChartService.js"></script>
-<script type="text/javascript" src="node_modules/dispatch-console-pages/dist/js/qdrTopology.js"></script>
-<script type="text/javascript" src="node_modules/dispatch-console-pages/dist/js/qdrSettings.js"></script>
+<script type="text/javascript" src="plugin/js/qdrGlobals.js"></script>
+<script type="text/javascript" src="plugin/js/qdrOverview.js"></script>
+<script type="text/javascript" src="plugin/js/qdrOverviewLogsController.js"></script>
+<script type="text/javascript" src="plugin/js/qdrOverviewChartsController.js"></script>
+<script type="text/javascript" src="plugin/js/qdrTopAddressesController.js"></script>
+<script type="text/javascript" src="plugin/js/dlgChartController.js"></script>
+<script type="text/javascript" src="plugin/js/qdrList.js"></script>
+<script type="text/javascript" src="plugin/js/qdrListChart.js"></script>
+<script type="text/javascript" src="plugin/js/qdrCharts.js"></script>
+<script type="text/javascript" src="plugin/js/qdrSchema.js"></script>
+<script type="text/javascript" src="plugin/js/qdrService.js"></script>
+<script type="text/javascript" src="plugin/js/qdrChartService.js"></script>
+<script type="text/javascript" src="plugin/js/qdrTopology.js"></script>
+<script type="text/javascript" src="plugin/js/qdrSettings.js"></script>
 <script type="text/javascript" src="plugin/js/chord/ribbon/ribbon.js"></script>
 <script type="text/javascript" src="plugin/js/chord/matrix.js"></script>
 <script type="text/javascript" src="plugin/js/chord/filters.js"></script>

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dfd3cf7c/console/stand-alone/plugin/css/brokers.ttf
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/css/brokers.ttf b/console/stand-alone/plugin/css/brokers.ttf
new file mode 100644
index 0000000..ae83968
Binary files /dev/null and b/console/stand-alone/plugin/css/brokers.ttf differ

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dfd3cf7c/console/stand-alone/plugin/css/dispatch.css
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/css/dispatch.css b/console/stand-alone/plugin/css/dispatch.css
new file mode 100644
index 0000000..0096f95
--- /dev/null
+++ b/console/stand-alone/plugin/css/dispatch.css
@@ -0,0 +1,706 @@
+/*
+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.
+*/
+
+svg {
+  background-color: transparent;
+  cursor: default;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  -o-user-select: none;
+  user-select: none;
+}
+
+svg:not(.active):not(.ctrl) {
+  cursor: crosshair;
+}
+#end-arrow-selected, #start-arrow-selected {
+	stroke: #33F;
+	fill: #33F;
+}
+path.link.selected {
+  /* stroke-dasharray: 10,2; */
+  stroke: #33F  !important;
+}
+
+path.link {
+  fill: #000;
+  stroke: #000;
+  stroke-width: 4px;
+  cursor: default;
+}
+
+svg:not(.active):not(.ctrl) path.link {
+  cursor: pointer;
+}
+
+path.link.small {
+  stroke-width: 2.5;
+  stroke: darkgray;
+}
+path.link.highlighted {
+    stroke: #6F6 !important;
+}
+marker#start-arrow-highlighted,
+marker#end-arrow-highlighted {
+    fill: #6F6;
+}
+marker#start-arrow-small,
+marker#end-arrow-small {
+    fill: darkgray;
+}
+
+path.link.dragline {
+  pointer-events: none;
+}
+
+path.link.hidden {
+  stroke-width: 0;
+}
+
+circle.node {
+  stroke-width: 1.5px;
+  cursor: pointer;
+  stroke: darkgray;
+}
+
+circle.node.reflexive {
+  stroke: #F00 !important;
+  stroke-width: 2.5px;
+}
+circle.node.selected {
+  stroke: #6F6 !important;
+  stroke-width: 2px;
+  fill: #e0e0ff !important;
+}
+circle.node.highlighted {
+  stroke: #6F6;
+}
+circle.node.inter-router {
+    fill: #EAEAEA;
+}
+circle.node.normal.in {
+    fill: #F0F000;
+}
+circle.node.normal.out {
+    fill: #C0F0C0;
+}
+circle.node.on-demand {
+    fill: #C0FFC0;
+}
+circle.node.on-demand.artemis {
+	fill: #FCC;
+	/*opacity: 0.2; */
+}
+
+circle.node.fixed {
+    stroke-dasharray: 10,2;
+}
+text {
+  font: 12px sans-serif;
+  pointer-events: none;
+  /*font-family: monospace;*/
+
+}
+
+.tooltipsy
+{
+    padding: 10px;
+/*    max-width: 320px;*/
+    color: #303030;
+    background-color: #fcfcfe;
+    border: 1px solid #deca7e;
+    border-radius: 5px;
+}
+
+.tiptable {
+
+}
+.tiptable tr {
+	border-bottom: 1px solid #ccc;
+}
+
+.tiptable tr:last-child {
+	border-bottom: 0px;
+}
+
+.tiptable tr:nth-child(even) {
+	background: #fcfcfe;
+}
+.tiptable tr:nth-child(odd) {
+	background: #FFF
+}
+
+text.id {
+  text-anchor: middle;
+  font-weight: bold;
+}
+
+text.label {
+  text-anchor: start;
+  font-weight: bold;
+}
+
+.row-fluid.tertiary {
+  position: relative;
+  left: 20px;
+}
+
+.row-fluid.tertiary.left {
+  float: left;
+}
+
+.row-fluid.tertiary.panel {
+  width: 410px;
+  /*height: 100%; */
+}
+
+div#topologyForm .ngViewport, div#topologyForm .gridStyle {
+  height: auto !important;
+  min-height: initial !important;
+  overflow: initial;
+}
+
+div#multiple_details, div#link_details {
+	height: 300px;
+	width: 700px;
+	display: none;
+	padding: 0.5em;
+    border: 1px solid;
+	position: absolute;
+	background-color: white;
+	max-height: 330px !important;
+    overflow: hidden;
+}
+div#multiple_details div.ngRow.selected {
+	background-color: #c9dde1 !important;
+}
+
+div.grid-values {
+	text-align: right;
+}
+
+div.grid-values.ngCellText span {
+	padding-right: 4px;
+}
+
+.panel-adjacent {
+  margin-left: 430px;
+}
+
+/* globe */
+.land {
+  fill: #999;
+  stroke-opacity: 1;
+}
+
+.graticule {
+  fill: none;
+  stroke: black;
+  stroke-width:.5;
+  opacity:.1;
+}
+
+.labels {
+    font: 18px sans-serif;
+    fill: black;
+    opacity: .85;
+	text-anchor: middle;
+}
+
+.noclicks { pointer-events:none; }
+
+.point {  opacity:.6; }
+
+.arcs {
+  opacity:.7;
+  stroke: darkgreen;
+  stroke-width: 3;
+}
+.flyers {
+  stroke-width:1;
+  opacity: 0;
+  stroke: darkred;
+}
+.arc, .flyer {
+  stroke-linejoin: round;
+  fill:none;
+}
+.arc { }
+.arc:hover {
+  stroke: darkred;
+}
+.flyer { }
+.flyer:hover {
+  stroke: darkgreen;
+}
+.arc.inter-router {
+  stroke: darkblue;
+}
+
+#addNodeForm {
+  padding: 1em;
+}
+
+
+li.currentStep {
+  font-weight: bold;
+}
+
+.qdrTopology div.panel {
+  position: absolute;
+}
+/*
+.ui-dialog-titlebar {
+    border: 0;
+    background: transparent;
+}
+*/
+
+/*
+.ui-tabs.ui-tabs-vertical {
+    padding: 0;
+    width: 48em;
+}
+.ui-tabs.ui-tabs-vertical .ui-widget-header {
+    border: none;
+}
+.ui-tabs.ui-tabs-vertical .ui-tabs-nav {
+    float: left;
+    width: 10em;
+    background: #CCC;
+    border-radius: 4px 0 0 4px;
+    border-right: 1px solid gray;
+}
+.ui-tabs.ui-tabs-vertical .ui-tabs-nav li {
+    clear: left;
+    width: 100%;
+    margin: 0.1em 0;
+    border: 1px solid gray;
+    border-width: 1px 0 1px 1px;
+    border-radius: 4px 0 0 4px;
+    overflow: hidden;
+    position: relative;
+    right: -2px;
+    z-index: 2;
+}
+.ui-tabs.ui-tabs-vertical .ui-tabs-nav li a {
+    display: block;
+    width: 100%;
+    padding: 0.1em 1em;
+}
+.ui-tabs.ui-tabs-vertical .ui-tabs-nav li a:hover {
+    cursor: pointer;
+}
+.ui-tabs.ui-tabs-vertical .ui-tabs-nav li.ui-tabs-active {
+    margin-bottom: 0.2em;
+    padding-bottom: 0;
+    border-right: 1px solid white;
+}
+.ui-tabs.ui-tabs-vertical .ui-tabs-nav li:last-child {
+    margin-bottom: 10px;
+}
+.ui-tabs.ui-tabs-vertical .ui-tabs-panel {
+    float: left;
+    width: 34em;
+    border-left: 1px solid gray;
+    border-radius: 0;
+    position: relative;
+    left: -1px;
+}
+
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected {
+    right: -3px !important;
+}
+
+.ui-tabs li i.ui-icon {
+    display: inline-block;
+}
+*/
+.ui-tabs .ui-tabs-panel {
+    /* padding-top: 0 !important; */
+}
+
+.ui-widget-content fieldset {
+  float: left;
+  padding: 0 1em 0 0;
+}
+
+.entity-description {
+  color: #960;
+  font-size: 90%;
+}
+
+.attr-description {
+  padding-top: 1.5em;
+  float: right;
+  width: 17em;
+}
+.attr-annotations {
+    padding-top: 2.5em;
+    clear: both;
+}
+.attr-annotations > span {
+    padding-top: 0.5em;
+    border-top: 1px dashed darkgray;
+    display: block;
+}
+
+.attr-type {
+    color: #990;
+    font-size: 85%;
+}
+.attr-required {
+    color: red;
+    font-size: 85%;
+}
+.attr-unique {
+    color: green;
+    font-size: 85%;
+}
+
+#tabs.nodeEntities {
+  border: 0;
+}
+
+#tabs ul.nodeTabs {
+  background: #fff;
+}
+
+#tabs #Container {
+  border-left: 1px solid #aaa;
+}
+
+#tabs.ui-tabs .ui-tabs-nav li {
+  border-bottom: 1px solid #aaa !important;
+}
+
+.entity-fields {
+  /* height: 400px; */
+  overflow-y: scroll;
+  overflow-x: hidden;
+}
+
+div.boolean label:first-child {
+    float: left;
+    margin-right: 1em;
+}
+div.boolean {
+    padding-bottom: 1em;
+}
+
+.entity-fields label {
+    font-weight: 600;
+    margin-top: 0.5em;
+	display: inline;
+}
+
+.aggregate {
+	text-align: right;
+}
+
+.aggregate i {
+  float: right;
+  /*  margin: 3px 3px 3px 8px; */
+}
+
+.aggregate .hastip {
+	padding: 5px;
+}
+
+.subTip .tipsy-inner {
+	background-color: white;
+	color: black;
+	font-size: 1.3em;
+	border: 1px solid black;
+}
+
+.subTip .tipsy-arrow-n { border-bottom-color: black; }
+.subTip .tipsy-arrow-s { border-top-color: black; }
+.subTip .tipsy-arrow-e { border-left-color: black; }
+.subTip .tipsy-arrow-w { border-right-color: black; }
+
+
+.contextMenu {
+    display:none;
+	position:absolute;
+	left:30px;
+	top:-30px;
+	z-index:999;
+	/* width:300px; */
+}
+.contextMenu ul {
+	width:300px;
+	margin:0;
+	padding-left:0;
+	list-style:none;
+	background:#fff;
+	color:#333;
+    font-weight: 600;
+	/* -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; */
+	-moz-box-shadow:5px 5px 5px #ddd; -webkit-box-shadow:5px 5px 5px #999; box-shadow:5px 5px 5px #ddd;
+	border: 1px solid #aaa;
+}
+.contextMenu ul li {
+	padding:5px 10px;
+	/* border-bottom: solid 1px #ccc; */
+}
+.contextMenu ul li:hover {
+	background:#4a90d9; color:#fff;
+}
+.contextMenu ul li:last-child {
+    border:none;
+}
+
+.na {
+    display: none;
+}
+.contextMenu ul li.new {
+    display: block;
+}
+.contextMenu ul li.adding, .contextMenu ul li.adding + li {
+    display: block;
+}
+.contextMenu ul li.force-display {
+    display: block;
+}
+.contextMenu ul li.context-separator {
+    background-color: lightgray;
+    height: 1px;
+    padding: 0;
+}
+
+.ui-tabs.ui-tabs-vertical .ui-tabs-nav li.separated {
+    margin-top: 1em;
+}
+
+#crosssection {
+    display: none;
+    position: absolute;
+    top: 200px;
+    left: 600px;
+}
+
+.cross-rect {
+  /* fill: #cfe2f3; */
+}
+.cross-line {
+  stroke: black;
+  stroke-width: 4px;
+}
+
+.node circle {
+/*  fill: rgb(31, 119, 180);
+  fill-opacity: .25; */
+  fill: #cfe2f3;
+  fill-opacity: .98;
+  stroke: black;
+  stroke-width: 3px;
+}
+
+circle.subcircle {
+    stroke-width: 1px;
+    /* stroke-dasharray: 2; */
+    fill-opacity: 0;
+    stroke: darkgray;
+}
+
+.leaf circle {
+  fill: #6fa8dc;
+  fill-opacity: 0.95;
+  stroke-width: 3px;
+}
+
+.leaf circle[title] {
+    font-family: monospace;
+
+}
+
+#svg_legend {
+    position: absolute;
+    top: 110px;
+    right: 0;
+    border: 1px solid #ccc;
+    border-radius: 5px;
+    background-color: #fcfcfc;
+    margin-right: 1.3em;
+	padding: 1em;
+}
+
+#svg_legend svg {
+    height: 235px;
+    width: 180px;
+}
+
+#multiple_details div.gridStyle {
+/*	height: 50em; */
+	min-height: 70px !important;
+	height: auto !important;
+}
+
+#multiple_details .ngViewport {
+    height: auto !important;
+}
+
+#multiple_details .gridCellButton button, #link_details .gridCellButton button {
+    margin: .25em .4em;
+    font-size: 12px;
+    height: 2em;
+	padding-top: .1em;
+}
+
+#linkFilter {
+	display: none;
+	padding: 0.5em;
+	border: 1px solid grey;
+	background-color: #F0F0F0;
+	position: absolute;
+	z-index: 100;
+	right: 1em;
+}
+div.formLine label, div.formLine input {
+	display: inline-block;
+	padding: 0 8px;
+}
+
+span.filter-icon {
+	padding-left: 1em;
+}
+
+button.filter-close {
+    width: 15px;
+    height: 20px;
+    padding: 0;
+    position: absolute;
+    right: 4px;
+    top: 4px;
+}
+
+div.filter-title h6 {
+	margin: 0 0 0.5em 0;
+}
+
+.links button.btn-filter {
+	padding: 0 1em 0 0;
+    margin-left: 1em;
+    font-size: 1em;
+}
+
+button.btn-filter {
+	float: right;
+}
+span.fancytree-expanded button.btn-filter,
+a.fancytree-title:hover button.btn-filter {
+ 	visibility: visible;
+}
+
+div.hdash-button a {
+	color: white;
+}
+
+.linkDirIn {
+	color: red;
+	background-color: #f3f3f3;
+}
+
+.linkDirOut {
+	color: blue;
+	background-color: white;
+}
+
+div.topoGrid .ui-grid-viewport {
+	overflow: hidden !important;
+}
+
+@-moz-document url-prefix() {
+    .btn {padding: 2px 12px 8px !important;}
+    #overview-controller .btn {padding: 4px 12px !important;}
+    #overview-controller .btn.filter-close {padding: 0 !important;}
+}
+
+.ui-fancytree.fancytree-container {
+	font-size: 14px;
+}
+
+.grid-title {
+    background-color: #FAFAFA;
+    background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2);
+    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2));
+    background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2);
+    background-image: -o-linear-gradient(top, #ffffff, #f2f2f2);
+    background-image: linear-gradient(to bottom, #ffffff, #f2f2f2);
+    background-repeat: repeat-x;
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#F2F2F2', GradientType=0);
+    border-bottom: 1px solid #d4d4d4;
+    text-shadow: 0 1px 0 #FFFFFF;
+    border-top-left-radius: 5px;
+    border-top-right-radius: 5px;
+	margin: 0 0 10px 0;
+    padding-bottom: 4px;
+}
+
+.expand-collapse {
+	float: right;
+	margin-right: 0.5em;
+}
+
+.pane-viewport {
+  top: 26px !important;
+}
+.fancytree-node.loading {
+  position: initial;
+}
+
+.newChart {
+  float: right;
+}
+
+select.unique, input.unique {
+  border: 2px solid blue;
+}
+select.required, input.required {
+  border: 2px solid black;
+}
+
+.required-indicator {
+  padding-left: 0.5em;
+  font-size: 0.85em;
+  vertical-align: super;
+}
+
+.required-indicator::before {
+  content: '(required)'
+}
+
+.unique-indicator {
+  padding-left: 0.5em;
+  font-size: 0.85em;
+  vertical-align: super;
+}
+
+.unique-indicator::before {
+  content: '(must be unique if supplied)'
+}
+
+.unique-indicator
+
+.error {
+  color: red;
+  font-weight: bold;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dfd3cf7c/console/stand-alone/plugin/css/dispatchpf.css
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/css/dispatchpf.css b/console/stand-alone/plugin/css/dispatchpf.css
new file mode 100644
index 0000000..49e7d4b
--- /dev/null
+++ b/console/stand-alone/plugin/css/dispatchpf.css
@@ -0,0 +1,473 @@
+/*
+ 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
+*/
+
+/* The following are for matching Patternfly styles */
+span.logo {
+  letter-spacing: 3px;
+}
+
+.navbar-pf .navbar-brand {
+  padding: 2px 0 2px;
+}
+/* using fancytree instead of treeview */
+
+#overtree ul.fancytree-container,
+#entityTree ul.fancytree-container,
+#schema ul.fancytree-container {
+    background-color: transparent;
+    border: 0px;
+}
+
+span.fancytree-folder a {
+    font-weight: normal;
+    font-size: 12px;
+}
+
+ul.fancytree-container li,
+span.fancytree-icon {
+  background-image: none;
+}
+
+.fancytree-exp-c span.fa-angle, .fancytree-exp-e span.fa-angle,
+.fancytree-exp-cl span.fa-angle, .fancytree-exp-el span.fa-angle {
+  margin-right: 5px;
+}
+.fancytree-exp-c span.fa-angle:before, .fancytree-exp-cl span.fa-angle:before {
+  font-family: FontAwesome;
+  content: "\f105";
+}
+.fancytree-exp-e .fancytree-expander:before, .fancytree-exp-el .fancytree-expander:before {
+  font-family: FontAwesome;
+  content: "\f107";
+}
+.fancytree-exp-c .fancytree-expander:before, .fancytree-exp-cl .fancytree-expander:before {
+  font-family: FontAwesome;
+  content: "\f105";
+}
+.fancytree-exp-e span.fa-angle:before, .fancytree-exp-el span.fa-angle:before {
+  font-family: FontAwesome;
+  content: "\f107";
+}
+
+.fancytree-ico-ef span.fancytree-icon, .fancytree-ico-cf span.fancytree-icon {
+  background-image: initial;
+  font-family: FontAwesome;
+}
+
+/* closed folder */
+.fancytree-ico-cf span.fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f07b";
+}
+/* expanded folder */
+.fancytree-ico-ef span.fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f07c";
+}
+/* chart */
+.fancytree-ico-cf.charts span.fancytree-icon:before, .fancytree-ico-ef.charts span.fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f080";
+}
+
+
+ul.fancytree-container a {
+    color: #363636;
+}
+
+/* override left and right pane styles */
+#schema .col-sm-3,
+.qdr-topology-form.col-sm-3 {
+  padding-left: 0px;
+}
+
+.qdr-topology-form.col-sm-3 {
+  padding-right: 0px;
+}
+
+#overview-controller .ngViewport {
+  height: auto !important;
+}
+
+.pane-wrapper {
+  padding-top: 0.5em;
+}
+
+.pane-viewport {
+    position: relative;
+    /* height: calc(100vh - 20px); */
+    overflow: auto;
+}
+
+[class^="icon-"],
+[class*=" icon-"] {
+  display: inline;
+  width: auto;
+  height: auto;
+  line-height: normal;
+  vertical-align: baseline;
+  background-image: none;
+  background-position: 0% 0%;
+  background-repeat: repeat;
+  margin-top: 0;
+}
+[class^="icon-"],
+[class*=" icon-"] {
+  font-family: FontAwesome;
+  font-weight: normal;
+  font-style: normal;
+  text-decoration: inherit;
+  -webkit-font-smoothing: antialiased;
+  *margin-right: .3em;
+}
+
+[class^="icon-"]:before,
+[class*=" icon-"]:before {
+  text-decoration: inherit;
+  display: inline-block;
+  speak: none;
+}
+
+.icon-bar-chart:before {
+  font-family: FontAwesome;
+    content: "\f080";
+}
+
+.icon-step-forward:before {
+  font-family: FontAwesome;
+  content: "\f051";
+}
+.icon-step-backward:before {
+  font-family: FontAwesome;
+  content: "\f048";
+}
+
+.icon-close:before {
+  font-family: FontAwesome;
+  content: "\f410";
+}
+
+[class^="icon-"]:before, [class*=" icon-"]:before {
+    text-decoration: inherit;
+    display: inline-block;
+    speak: none;
+}
+
+#svg_legend {
+  top: 10px;
+}
+
+#topologyForm > div {
+  width: auto;
+}
+
+div.chartContainer {
+  width: auto;
+  margin-top: 1em;
+}
+
+#dispatch-login-container {
+  width: 90em;
+}
+
+#dispatch-login-container .alert {
+  padding-right: 47px;
+}
+
+.fa-edit:before, .fa-trash-o:before {
+  font-family: FontAwesome;
+}
+
+div.qdr-topology.pane.left {
+  width: 400px;
+  top: 0;
+}
+/*
+.treeview .list-group-item.node-selected {
+  color: #FFFFFF !important;
+  background-color: #428bca !important;
+}
+*/
+span.fancytree-expander {
+  display: none;
+}
+
+#overview-controller span.fancytree-expander {
+  display: inline-block;
+}
+
+.fancytree-active .fancytree-title,
+.fancytree-active .fancytree-icon,
+.fancytree-active .fancytree-expander {
+  color: white;
+}
+
+.ui-grid {
+  border: 0px;
+}
+
+.ui-grid-header {
+  border: 1px solid #d4d4d4;
+}
+
+#overview-controller .sidebar-pf-left, #list-controller .sidebar-pf-left {
+  padding-right: 0px;
+}
+
+#crosshtml {
+  position: absolute;
+  display: none;
+  padding: 1em;
+  border: 1px solid grey;
+  background-color: white;
+  border-radius: 4px;
+}
+
+.pane-bar {
+  float: right;
+  height: calc(100vh - 75px);
+  width: 6px;
+  background-color: white;
+  border: 1px solid #e0e0e0;
+  position: absolute;
+  top: 0;
+  right: -6px;
+  cursor: ew-resize;
+
+
+  display: none;
+}
+
+.dispatch-c3-tooltip {
+  border-collapse: collapse;
+  border-spacing: 0;
+  background-color: #fff;
+  empty-cells: show;
+  -webkit-box-shadow: 7px 7px 12px -9px #777777;
+  -moz-box-shadow: 7px 7px 12px -9px #777777;
+  box-shadow: 7px 7px 12px -9px #777777;
+  opacity: 0.9;
+
+}
+
+.dispatch-c3-tooltip tr {
+  border: 1px solid #CCC;
+}
+
+.dispatch-c3-tooltip th {
+  background-color: #aaa;
+  font-size: 13px;
+  padding: 2px 5px;
+  text-align: left;
+  color: #FFF;
+  font-weight: normal;
+}
+
+.dispatch-c3-tooltip td {
+  font-size: 13px;
+  padding: 3px 6px;
+  background-color: #fff;
+  border-left: 1px dotted #999;
+}
+
+.chart-tip-legend {
+  width: 10px;
+  height: 10px;
+  display: inline-block;
+  margin-right: 4px;
+}
+
+th.text-center {
+  text-align: center;
+}
+
+.clearfix:after {
+  content: "";
+  display: table;
+  clear: both;
+}
+
+#topAddresses.grid {
+  min-height: 190px;
+}
+
+circle.c3-circle {
+  display: none;
+}
+
+circle.c3-circle._expanded_ {
+  display: inline;
+}
+
+#main.container-fluid {
+  position: relative;
+}
+
+.chord-diagram:before {
+  font-style: normal;
+  font-family: FontAwesome;
+  content: "\f021";
+}
+
+.code-branch:before {
+  font-style: normal;
+  font-family: FontAwesome;
+  /* content: "\f126"; */
+  content: "\f085"; /* cogs */
+}
+
+.icon-list:before {
+  font-style: normal;
+  font-family: FontAwesome;
+  content: "\f0db";
+}
+
+.icon-power:before {
+  font-style: normal;
+  font-family: FontAwesome;
+  content: "\f011";
+}
+
+.icon-ellipsis-v:before {
+  font-style: normal;
+  font-family: FontAwesome;
+  content: "\f142";
+}
+
+.icon-schema:before {
+  font-style: normal;
+  font-family: FontAwesome;
+  content: "\f0ca";
+}
+
+/* convert fancytree theme to dark */
+span.fancytree-title {
+  color: white;
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+  width: 16em;
+}
+
+span.fancytree-node:hover {
+  color: black;
+  background-color: white;
+}
+span.fancytree-node:hover span.fancytree-title {
+  color: black;
+}
+
+span.fancytree-node.fancytree-active:hover, 
+span.fancytree-node.fancytree-active:hover span.fancytree-title {
+  color: white;
+}
+
+span.fancytree-expanded.fancytree-has-children, span.fancytree-expanded.fancytree-has-children + ul {
+  background-color: #444444;
+}
+span.fancytree-expanded.fancytree-has-children:hover {
+  background-color: white;
+}
+
+span.fancytree-node.fancytree-active {
+  background-color: #6aa3d5;
+}
+
+.navbar-fixed-top + .container-fluid {
+  padding-top: 71px;
+}
+
+@media (max-width: 768px) {
+  .navbar-fixed-top + .container-fluid {
+    padding-top: 38px;
+  }
+}
+
+.navbar-pf .navbar-nav>li>a {
+  padding: 14px 16px;
+}
+
+@media (min-width: 768px) {
+  .navbar-collapse.page-menu {
+    padding-right: 0;
+    /* height: calc(100vh - 74px) !important; */
+  }
+}
+@media (max-width: 768px) {
+  .navbar-collapse.page-menu {
+    position: absolute;
+    z-index: 1;
+    height: auto;
+    left: 0;
+  }
+}
+
+.page-menu {
+    padding-left: 0;
+    background: #333333;
+    z-index: 1;
+    transition: all .2s cubic-bezier(.35,0,.25,1);
+    position: absolute;
+    left: 0;
+    color: white;
+    width: 300px;
+}
+
+.page-menu-button {
+  /*color: black;
+  background: white; */
+  top: 0;
+  z-index: 2;
+  width: 1em;
+  padding: 4px 0 0 4px;
+  margin: 4px 0 0 4px;
+}
+.page-menu-button span.icon-bar {
+  display: block;
+  color: black;
+  background-color: black;
+  height: 4px;
+  width: 4px;
+  font-weight: bold;
+  border-radius: 2px;
+}
+
+.navbar-toggle.left {
+  float: left;
+}
+
+.hideLeft {
+  position: absolute;
+  right: -1.5em;
+  top: 0em;
+  border: 0;
+  color: white;
+  background-color: #444444;
+}
+
+.showLeft {
+  position: absolute;
+  top: 0em;
+  left: 0;
+  border: 0;
+  z-index: 3;
+  color: white;
+  background-color: #444444;
+}
+

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dfd3cf7c/console/stand-alone/plugin/css/plugin.css
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/css/plugin.css b/console/stand-alone/plugin/css/plugin.css
new file mode 100644
index 0000000..f7259dd
--- /dev/null
+++ b/console/stand-alone/plugin/css/plugin.css
@@ -0,0 +1,1019 @@
+/*
+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.
+*/
+main-display > .span8 {
+  height: 100%;
+  position: relative;
+}
+
+ul.qdrListNodes > li > span {
+  padding: 6px 20px; 6px; 6px;
+  display: block;
+}
+
+.qdrList .grid {
+    width: 20em;
+    margin-right: 0;
+    float: left;
+}
+
+
+.qdrList div.gridDetails {
+    width: auto;
+}
+
+.selectedItems {
+    /* margin-left: 21em; */
+}
+
+.qdrListPane {
+    top: 110px;
+}
+
+.qdrListActions {
+    width: auto;
+    margin-left: 1em;
+}
+
+div.listAttrName {
+    padding-top: 5px;
+}
+
+div.listAttrName button {
+    float: right;
+    margin: 3px 5px;
+}
+
+div.listAggrValue button {
+    margin: 3px 5px;
+}
+
+@-moz-document url-prefix() {
+  div.listAttrName button {
+    top: -24px;
+    position: relative;
+    margin: 3px 0px;
+    padding: 0 5px !important;
+  }
+}
+
+div.listAttrName i.icon-bar-chart.active, div.hastip i.icon-bar-chart.active, li.haschart i {
+    /*background-color: #AAFFAA; */
+}
+
+div#main div ul.nav li a:not(.btn) {
+    background: initial !important;
+}
+
+div#main div ul.nav li.active a {
+    background-color: #f0f0ff !important;
+}
+
+div#main.qdr {
+    margin-top: 56px !important;
+}
+
+div.charts-header {
+  font-size: 1.2em;
+  color: #666666;
+  margin: 1em 0;
+}
+
+.selectedNode, .selectedAction, .selectedEntity {
+    font-weight: 600;
+    color: #606066;
+}
+
+.okButton {
+    text-align: center;
+    margin: 1em;
+}
+
+span.showChartsLink {
+    border: 1px solid blue;
+    padding: 1px 2px;
+}
+
+div.listGraphs p {
+    margin: 1em 0 2em 2em;
+    text-align: center;
+}
+
+div.centered {
+    text-align: center;
+    margin: 4em;
+}
+
+.modal-body.centered {
+	margin: 0;
+}
+
+/* dialog */
+div.aChart {
+    height: 200px;
+    width:  400px;
+    margin: 1em;
+}
+
+/* dashboard */
+div.aChart.hDash {
+	/* width: 21em; */
+	/* height: 17em; */
+	width: 100%;
+	height: 87%;
+	margin: 0;
+	padding: 0;
+
+}
+div.chartContainer {
+    float: left;
+	width: 100%;
+	height: 100%;
+	overflow: hidden;
+}
+
+/* the x and y axis lines */
+.d3Chart g.axis path.domain {
+    stroke-width: 1;
+    stroke: black;
+}
+
+/* the line surrounding the area chart */
+div.d3Chart path {
+/*    stroke: black; */
+/*    stroke-width: 0; */
+/*	opacity: 0.5; */
+}
+
+/* the line above the area chart */
+/* the color gets overridden */
+div.d3Chart path.line {
+    stroke: steelblue;
+    stroke-width: 1.5;
+    fill: none;
+    opacity: 1;
+}
+
+.mo-rect {
+    fill: #ffffdd;
+    stroke: #f0f0f0;
+    stroke-width: 1;
+}
+
+.mo-guide {
+    fill: none;
+    stroke: #d0d0d0;
+    stroke-width: 2;
+    stroke-dasharray: 3,3;
+}
+
+div.d3Chart .title {
+    text-decoration: underline;
+}
+
+
+.axis line, .axis path {
+  fill: none;
+  shape-rendering: crispEdges;
+  stroke-width: 1;
+  stroke: #000000;
+}
+
+.axis line {
+  stroke: #C0C0C0;
+  stroke-dasharray: 1,1;
+  opacity: 0.5;
+}
+
+.y.axis text, .x.axis text, .focus text, div.d3Chart .title {
+    font-size: 12px;
+}
+
+.y.axis path {
+   stroke: #000;
+ }
+
+.overlay {
+   fill: none;
+   pointer-events: all;
+ }
+
+.focus circle {
+   fill: none;
+   stroke: steelblue;
+ }
+.focus .fo-table {
+	/* box-shadow: 2px 2px 3px #EEE; */
+}
+
+div.d3Chart {
+    /* padding: 1em 0; */
+    /* border: 1px solid #C0C0C0; */
+    margin-bottom: 2em;
+}
+div.d3Chart.hDash {
+    border: 0px;
+}
+
+div.d3Chart .axis path {
+	display: inherit;
+}
+
+.c3-circle {
+	/* display: none; */
+}
+
+.fo-table {
+	border: 1px solid darkgray;
+	background-color: white;
+	font-size: .85em;
+}
+
+.fo-table td {
+	padding: 4px;
+	border-left: 1px solid darkgray;
+}
+.fo-table tr.detail td {
+	padding: 1px 4px;
+}
+.fo-title {
+	color: white;
+	background-color: darkgray;
+}
+
+.fo-table-legend {
+	width: 8px;
+	height: 8px;
+	border: 1px solid black;
+	margin: 0 4px;
+	display: inline-block;
+}
+
+svg .legend {
+	dominant-baseline: central;
+}
+
+div.chartContainer div.aChart {
+    margin-top: 0.5em;
+}
+
+div#main.qdr div ul.nav li.active a {
+  background-color: #e0e0ff !important;
+  color: #000000;
+}
+
+div#main.qdr .selected, .box.selected {
+  color: #000000;
+  text-shadow: none;
+}
+
+/* the selected node on the list page */
+div.qdrList li.active, ul.qdrListNodes li.active {
+    background-color: #e0e0ff;
+}
+
+div.qdr-attributes span.fancytree-selected a {
+    background-color: #e0e0ff;
+}
+div.qdr-attributes.pane, div.qdr-topology.pane {
+	position: absolute;
+	margin-left: 10px;
+}
+div.qdr-overview.pane {
+	position: absolute;
+}
+div.qdr-topology.pane.left {
+	width: auto;
+  /*border-right: 1px solid lightgray; */
+}
+
+/* the selected row in the name table */
+div#main.qdr div.qdrList div.selected {
+  background-color: #e0e0ff !important;
+}
+
+#dialogChart, #dialogEditChart {
+    height: 220px;
+}
+
+.chartOptions .modal-body {
+  overflow-y: initial;
+}
+
+div.qdrCharts p.chartLabels button {
+    float: right;
+}
+
+div.qdrCharts p.chartLabels {
+     padding-right: 1em;;
+ }
+
+p.dialogHeader {
+    text-align: center;
+}
+
+p.dialogHeader input {
+    margin-top: 10px;
+    width: 480px;
+}
+
+.ui-slider-tick {
+  position: absolute;
+  background-color: #666;
+  width: 2px;
+  height: 8px;
+  top: 12px;
+  z-index: -1;
+}
+
+label.rateGroup {
+    float: left;
+}
+
+div.chartOptions div.dlg-slider {
+    float: left;
+    width: 28em;
+    font-size: 14px;
+}
+
+div.chartOptions div.duration {
+  width: 35em !important;
+}
+
+div.chartOptions .slider {
+    margin-top: 1em;
+    margin-bottom: 1em;
+}
+
+input[type="radio"] {
+    margin-top: 0 !important;
+}
+
+div.chartOptions legend {
+    font-size: 1.2em;
+    font-weight: bold;
+    margin-bottom: 10px;
+}
+
+div.chartOptions tab > div {
+  margin-left: 1em;
+}
+
+div.chartOptions span.minicolors-swatch {
+    width: 14px;
+    height: 14px;
+}
+
+.minicolors-input {
+    width: 4em;
+    padding: 0 0 0 24px !important;
+}
+
+div.colorPicker div.colorText {
+	display: inline-block;
+	width: 10em;
+}
+div.colorPicker div:nth-of-type(1), /* first span under div.colorPicker */
+ div.minicolors{
+    float:left;
+    margin-right: 0.5em;
+}
+
+div.chartOptions p.sep {
+    height: 1em;
+}
+
+ul.nav-tabs {
+    border-bottom: 1px solid #ddd !important;
+}
+
+.chartOptions ul.nav-tabs {
+    margin-bottom: 0px !important;
+}
+
+div.tabbable div.tab-content {
+    overflow: visible;
+}
+
+div.tabbable ul.nav-tabs > .active > a {
+  background-color: #f8f8f8;
+  border: 1px solid #ddd;
+  border-bottom-color: transparent;
+}
+
+
+div.tabbable .tab-pane {
+    background-color: #f8f8f8;
+    padding: 12px;
+    border-right: 1px solid #ddd;
+    border-left: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+}
+div.dlg-large div.tabbable .tab-pane {
+	margin-left: 11em;
+}
+
+div.tabbable ul.nav-tabs {
+  margin-bottom: 0;
+}
+
+ul.qdrTopoModes {
+    position: relative;
+    top: -10px;
+}
+.overview.section {
+	/* width: 35em; */
+}
+.overview.section .ngGrid {
+	height: 12em !important;
+	min-height: 12em !important;
+}
+
+.overview.routers.section .ngGrid {
+ 	height: 16em !important;
+ 	min-height: 16em !important;
+}
+.overview.routers.section {
+ 	/*width: 15em; */
+ }
+
+.grid-align-value {
+	text-align: right;
+}
+
+.grid-align-value .ngCellText {
+	padding-right: 10px;
+}
+
+.overview .ngRow:hover {
+	background:#e0e0ff;
+}
+
+.overview-cell .ngCell:hover {
+	background:#e0e0ff;
+}
+.overview-cell .ngCell.col0:hover, .overview-cell .ngCell.col1:hover {
+	background: initial;
+}
+
+
+.qdr-overview.pane.left, .qdr-attributes.pane.left {
+	top: 104px;
+}
+.qdr-topology.pane.left {
+	top: 104px;
+}
+.qdr-overview.pane.left, .qdr-attributes.pane.left, .qdr-topology.pane.left {
+	left: 10px;
+}
+
+.overview-tree, .qdr-attributes {
+  min-height: calc(100vh - 90px)
+}
+/*
+.treeContainer {
+    width: 100%;
+    float: left;
+}
+*/
+.pane-content {
+	overflow: auto;
+}
+
+#entityNames {
+    width: 20em;
+    float: left;
+}
+
+.treeDetails {
+	margin-left: 260px;
+}
+
+.grid:not(.noHighlight) .ui-grid-row:hover .ui-grid-cell-contents {
+  /*background-color: #e0e0ff; */
+  background-color: #e9f2f9
+}
+.ngCellText {
+	padding: 4px 0 0 4px;
+}
+
+.ui-grid-row.ui-grid-row-selected > [ui-grid-row] > .ui-grid-cell {
+  background-color: #e0e0ff;
+}
+
+.tab-content .tab-pane {
+    background-color: #f8f8f8;
+    padding: 12px;
+    border-right: 1px solid #ddd;
+    border-left: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+}
+
+div.chartOptions ul.nav-tabs > .active > a {
+  background-color: #f8f8f8;
+  border: 1px solid #ddd;
+  border-bottom-color: transparent;
+}
+
+div.chartOptions label:nth-of-type(2) {
+    margin-left: 1em;
+}
+div.chartOptions label {
+	font-weight: normal;
+	display: inline-block;
+}
+
+/*
+.form-horizontal .control-label {
+    float: left;
+    width: 160px;
+    padding-top: 5px;
+    text-align: right;
+}
+
+.form-horizontal .controls {
+    margin-left: 180px;
+}
+
+.form-horizontal input,  {
+    display: inline-block;
+    margin-bottom: 0;
+    vertical-align: middle;
+}
+
+input[type="text"], input[type="number"], input[type="password"] {
+    background-color: #ffffff;
+    border: 1px solid #cccccc;
+    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+    -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+    -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
+    -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
+    -o-transition: border linear 0.2s, box-shadow linear 0.2s;
+    transition: border linear 0.2s, box-shadow linear 0.2s;
+}
+
+input[type="text"], input[type="number"], input[type="password"] {
+    display: inline-block;
+    width: 200px;
+    padding: 4px 6px;
+    margin-bottom: 10px;
+    font-size: 14px;
+    line-height: 20px;
+    color: #555555;
+    vertical-align: middle;
+    -webkit-border-radius: 4px;
+    -moz-border-radius: 4px;
+    border-radius: 4px;
+}
+
+.login input[type="checkbox"] {
+	margin-top: 0.75em;
+}
+*/
+
+#dispatch-login-container {
+	/* width: 18.5em; */
+	margin-top: 2em;
+}
+/*
+div.login.container {
+	width: 550px;
+}
+*/
+
+
+#overtree .fancytree-container {
+	border: 0px;
+}
+
+#overtree span.fancytree-alert-icon.ui-icon-refresh {
+	background-position: -64px -80px;
+}
+#overtree span.fancytree-alert-icon.ui-icon-transfer-e-w {
+	background-position: -112px -80px;
+}
+
+#alerts {
+	position: fixed;
+	right: 0;
+	top: 0;
+	z-index: 100;
+}
+
+.alert-enter,
+.alert-leave,
+.alert-move {
+  -webkit-transition: 1s linear all;
+  -moz-transition: 1s linear all;
+  -o-transition: 1s linear all;
+  transition: 1s linear all;
+  position:relative;
+}
+
+.alert-enter {
+  left:-10px;
+  opacity:0;
+}
+.alert-enter.alert-enter-active {
+  left:0;
+  opacity:1;
+}
+
+.alert-leave {
+  left:0;
+  opacity:1;
+}
+.alert-leave.alert-leave-active {
+  left:-10px;
+  opacity:0;
+}
+
+.alert-move {
+  opacity:0.5;
+}
+.alert-move.alert-move-active {
+  opacity:1;
+}
+
+.overview .table-striped tr:hover  td {
+	background-color: #e0e0ff !important;
+}
+
+#entityNames div.ngViewport {
+	overflow-x: hidden;
+}
+
+.connect-column.connect-form {
+	width: 20em;
+}
+
+.chartLabels button a {
+	text-decoration: none;
+}
+
+.fancytree-ico-c.router .fancytree-icon {
+
+}
+
+.tabs-left .nav-tabs {
+	float: left;
+}
+.tabs-left .nav-tabs > li {
+/*	float: initial; */
+}
+
+div.modal.dlg-large {
+	width: 53em;
+}
+
+button.hdash-button a {
+	text-decoration: none;
+	color: #fff;
+}
+
+div.widget-body > div {
+	height: 100%;
+}
+
+div.qdrCharts {
+	height: 100%;
+}
+
+ul.dispatch-view {
+	margin-bottom: 0 !important;
+}
+
+.qdr-overview.pane.left span:not(.fancytree-has-children) .fancytree-icon:before,
+.qdr-attributes.pane.left span:not(.fancytree-has-children) .fancytree-icon:before {
+    color: green;
+}
+
+span:not(.fancytree-has-children).address .fancytree-icon:before,
+span:not(.fancytree-has-children).router\.address .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f0ac";
+}
+span:not(.fancytree-has-children).address.mobile .fancytree-icon:before,
+span:not(.fancytree-has-children).router\.address.mobile .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f109";
+}
+span:not(.fancytree-has-children).address.internal.mobile .fancytree-icon:before,
+span:not(.fancytree-has-children).router\.address.internal.mobile .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f0ac";
+}
+span:not(.fancytree-has-children).address.router .fancytree-icon:before,
+span:not(.fancytree-has-children).router\.address.router .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f047";
+}
+
+span.address-link .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f0ac";
+}
+
+span:not(.fancytree-has-children).connection.external .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f109";
+}
+span:not(.fancytree-has-children).connection.normal .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f08e";
+}
+span:not(.fancytree-has-children).connection.external.quiesced .fancytree-icon:before {
+  font-family: FontAwesome;
+	content: "\f14c";
+	color: red;
+}
+span:not(.fancytree-has-children).connection.inter-router .fancytree-icon:before {
+  font-family: FontAwesome;
+   content: "\f07e";
+}
+span:not(.fancytree-has-children).connection.router-control .fancytree-icon:before {
+  font-family: FontAwesome;
+   content: "\f013";
+}
+span:not(.fancytree-has-children).no-data .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f05e";
+  color: red !important;
+}
+span:not(.fancytree-has-children).loading .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f254";
+}
+span:not(.fancytree-has-children).connector .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f126";
+}
+span:not(.fancytree-has-children).container .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f16c";
+}
+span:not(.fancytree-has-children).log .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f0f6";
+}
+span:not(.fancytree-has-children).router\.node .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f013";
+}
+span:not(.fancytree-has-children).link.inter-router .fancytree-icon:before,
+span:not(.fancytree-has-children).router\.link.inter-router .fancytree-icon:before{
+  font-family: FontAwesome;
+  content: "\f07e";
+}
+span:not(.fancytree-has-children).link.router-control .fancytree-icon:before,
+span:not(.fancytree-has-children).router\.link.router-control .fancytree-icon:before{
+  font-family: FontAwesome;
+  content: "\f013";
+}
+span:not(.fancytree-has-children).link.endpoint .fancytree-icon:before,
+span:not(.fancytree-has-children).router\.link.endpoint .fancytree-icon:before{
+  font-family: FontAwesome;
+  content: "\f109";
+}
+span:not(.fancytree-has-children).link.console .fancytree-icon:before,
+span:not(.fancytree-has-children).router\.link.console .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f108";
+}
+span:not(.fancytree-has-children).listener .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f025";
+}
+span:not(.fancytree-has-children).connection .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f07e";
+}
+span:not(.fancytree-has-children).connection.console .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f108";
+}
+span:not(.fancytree-has-children).waypoint .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f0ec";
+}
+span:not(.fancytree-has-children).router .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f047";
+}
+span:not(.fancytree-has-children).fixedAddress .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f015";
+}
+span:not(.fancytree-has-children).linkRoutePattern .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f039";
+}
+span:not(.fancytree-has-children).allocator .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f170";
+}
+span:not(.fancytree-has-children).policy .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f256";
+}
+span:not(.fancytree-has-children).logStats .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f080";
+}
+span:not(.fancytree-has-children).autoLink .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f0c1";
+}
+span:not(.fancytree-has-children).authServicePlugin .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f0c1";
+}
+span:not(.fancytree-has-children).sslProfile .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f023";
+}
+span:not(.fancytree-has-children).vhost .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f108";
+}
+span:not(.fancytree-has-children).vhostStats .fancytree-icon:before {
+  font-family: FontAwesome;
+  content: "\f080";
+}
+
+
+.ngCellText {
+/*    color: #333333; */
+}
+
+.changed {
+    color: #339933;
+}
+
+div.dispatch-router div.help {
+    width: auto;
+    padding: 1em;
+    background-color: lavender;
+    border-radius: 6px;
+    margin-top: 1em;
+    text-align: center;
+}
+
+div.operations tr:nth-child(even) {
+	background: #f3f3f3;
+}
+div.operations tr:nth-child(odd), div.operations tr:last-child {
+	background: #fff;
+}
+
+div.operations tr input {
+	margin: 0;
+	padding: 3px 6px;
+}
+div.operations table {
+    width: 100%;
+}
+div.operations th {
+    width: 50%;
+    border-bottom: 1px solid #cccccc;
+    text-align: left;
+}
+div.operations td:nth-child(odd), div.operations th:nth-child(odd) {
+	border-right: 1px solid #cccccc;
+}
+div.operations td:nth-child(odd) {
+	padding-left: 0;
+}
+div.operations td:nth-child(even), div.operations th:nth-child(even) {
+	padding-left: 5px;
+}
+div.operations th {
+	padding: 5px;
+}
+div.operations .tab-pane.active {
+    padding: 12px 12px 12px 0;
+}
+div.operations label {
+    padding-top: 4px;
+    margin-bottom: 4px;
+}
+.qdrListActions .ngGrid {
+	/*min-height: 40em;
+	height: 100%; */
+}
+div.qdrListActions .ngViewport {
+    height: initial !important;
+}
+
+div.operations .boolean {
+    padding-bottom: 0;
+}
+
+table.log-entry {
+    margin-bottom: 1em;
+    border-top: 1px solid black;
+}
+
+table.log-entry pre {
+    background-color: #f5f5f5;
+    color: inherit;
+    margin: 0;
+    white-space: pre-wrap;
+}
+
+circle.node.normal.console {
+    fill: lightcyan;
+}
+circle.node.artemis {
+    fill: lightgreen;
+}
+circle.node.route-container {
+    fill: orange;
+}
+
+text.console, text.on-demand, text.normal {
+	font-family: FontAwesome;
+	font-weight: normal;
+	font-size: 16px;
+}
+
+@font-face {
+    font-family:"Brokers";
+    src: url("brokers.ttf") /* TTF file for CSS3 browsers */
+}
+
+text.artemis {
+    font-family: Brokers;
+    font-size: 20px;
+    font-weight: bold;
+}
+
+text.qpid-cpp {
+    font-family: Brokers;
+    font-size: 18px;
+    font-weight: bold;
+}
+
+i.red {
+	color: red;
+}
+
+.qdrListActions div.delete {
+    width: 20em;
+    margin: auto;
+    border: 1px solid #eaeaea;
+    height: 5em;
+    padding: 4em;
+    background-color: #fcfcfc;
+}
+
+.btn:focus {
+    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+}
+
+select:focus, input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus {
+	outline:3px solid rgba(82, 168, 236, 0.6);
+    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+    outline: 5px auto -webkit-focus-ring-color;
+    outline-offset: -2px;
+}
+
+btn.disabled, .btn[disabled] {
+    opacity: 0.35;
+}
+
+#dispatch-login-container .ng-invalid-range {
+	border-color: #e9322d !important;
+}
+
+div#durationSlider, div#rateSlider {
+	margin-top: 1em;
+}
+
+.list-grid {
+	padding-left: 10px;
+}
+
+.ngViewport.ng-scope {
+  height: auto !important;
+}
+
+.listening-on {
+    background-color: #CCFFCC;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dfd3cf7c/console/stand-alone/plugin/html/qdrCharts.html
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/html/qdrCharts.html b/console/stand-alone/plugin/html/qdrCharts.html
new file mode 100644
index 0000000..dc57874
--- /dev/null
+++ b/console/stand-alone/plugin/html/qdrCharts.html
@@ -0,0 +1,48 @@
+<!--
+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.
+-->
+
+<style>
+    .page-menu-button {
+        display: none;
+    }
+
+  @media (max-width: 768px) {
+    div.aChart {
+        width: 380px;
+        margin-left: 0;
+    }
+}
+</style>
+<div class="main-display row-fluid qdrCharts" ng-controller="QDR.ChartsController">
+    <div ng-show="hasCharts()">
+        <div ng-repeat="chart in svgCharts" class="chartContainer">
+            <p class="chartLabels">
+                <button ng-click="delChart(chart)" title="Delete"><span class="fa-trash-o"></span></button>
+                <button ng-click="editChart(chart)" title="Configure"><span class="fa-edit"></span></button>
+<!--                <button ng-click="zoomChart(chart)" title="Zoom {{chart.zoomed ? 'in' : 'out'}}" ng-if="!chart.chart.request().nodeList"><i ng-class="chart.zoomed ? 'fa-zoom-in' : 'icon-zoom-out'"></i></button> -->
+            </p><div style="clear:both"></div>
+            <div id="{{chart.chart.id()}}" class="line-chart-pf aChart d3Chart"></div>
+        </div>
+        <div ng-init="chartsLoaded()"></div>
+    </div>
+    <div ng-hide="hasCharts()" class="centered">
+        There are no charts. To add charts to this page, click on a <i class="icon-bar-chart"></i> icon on the <button ng-click="showListPage()"><i class="icon-list "></i> Entities</button> page.
+    </div>
+</div>
+

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dfd3cf7c/console/stand-alone/plugin/html/qdrConnect.html
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/html/qdrConnect.html b/console/stand-alone/plugin/html/qdrConnect.html
new file mode 100644
index 0000000..5a4399b
--- /dev/null
+++ b/console/stand-alone/plugin/html/qdrConnect.html
@@ -0,0 +1,87 @@
+<!--
+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.
+-->
+
+<style>
+    .alert {
+        margin-top: 4em;
+    }
+
+</style>
+<div class="row-fluid" ng-controller="QDR.SettingsController">
+    <div class="login" ng-hide="connecting">
+        <div class="col-xs-1"></div>
+        <div class="col-xs-10">
+            <div class="alert alert-success">
+                    <p>
+                        Enter the address and a HTML-enabled port of a <strong><a href="http://qpid.apache.org/components/dispatch-router/" target="_blank">Qpid Dispatch Router</a></strong>.
+                    </p>
+                    <!--
+                    <p>
+                        If Autostart is checked, you will be automatically logged in to the router the next time you start the console.
+                    </p> -->
+
+            </div>
+            <div class="connect-form">
+                <form class="form-horizontal no-bottom-margin" novalidate ng-submit="connect()" name="settings">
+                        <div class="form-group">
+                            <label class="col-md-2 control-label" for="address">Address: </label>
+                            <div class="col-md-6">
+                                <input tabindex="1" id="address" type="text" ng-model="formEntity.address" placeholder="localhost" name="address" autofocus="autofocus" class="ng-pristine ng-valid ng-valid-required"></div>
+                        </div>
+                        <div class="form-group">
+                            <label tabindex="-1" class="col-md-2 control-label" title="Ports to connect to, by default 5673" for="port">Port: </label>
+                            <div class="col-md-6">
+                                <input tabindex="2" id="port" posint type="number" placeholder="5673" tooltip="Ports to connect to, by default 5673" ng-model="formEntity.port" name="port" title="Ports to connect to, by default 5673">
+                                <span ng-show="settings.port.$error.range">Must be 1 through 65535</span>
+                            </div>
+                        </div>
+<!--
+                        <div class="form-group">
+                            <label tabindex="-1" class="col-md-2 control-label" title="Whether or not the connection should be started as soon as you log in" for="autostart">Autostart: </label>
+                            <div class="col-md-6">
+                                <input tabindex="3" id="autostart" type="checkbox" tooltip="Whether or not the connection should be started as soon as you log into hawtio" ng-model="formEntity.autostart" name="autostart" title="Whether or not the connection should be started as soon as you log into hawtio"
+                                       class="ng-scope ng-pristine ng-valid"></div>
+                        </div>
+-->
+                        <input tabindex="-1" type="submit" style="position: absolute; left: -9999px; width: 1px; height: 1px;">
+                        <p></p>
+                        <div class="form-group">
+                            <label tabindex="-1" class="col-md-2 control-label" title="button"></label>
+                            <div class="col-md-6">
+                                <button type="submit" tabindex="4" class="btn btn-primary pull-left" ng-disabled="settings.$invalid">{{buttonText()}}</button>
+                            </div>
+                        </div>
+                </form>
+
+
+            </div>
+        </div>
+        <div class="col-xs-1"></div>
+    </div>
+
+    <div class="centered" ng-show="connecting">
+        <i class="icon-spin icon-spinner icon-4x"></i>
+        <p>Please wait, connecting now...</p>
+    </div>
+    <div class="centered error" ng-show="connectionError">
+        <p>There was a connection error: {{connectionErrorText}}</p>
+    </div>
+
+</div>
+

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dfd3cf7c/console/stand-alone/plugin/html/qdrList.html
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/html/qdrList.html b/console/stand-alone/plugin/html/qdrList.html
new file mode 100644
index 0000000..61ed0a7
--- /dev/null
+++ b/console/stand-alone/plugin/html/qdrList.html
@@ -0,0 +1,144 @@
+<!--
+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.
+-->
+
+<style>
+@media (min-width: 768px) {
+  .list-grid {
+    padding-left: 300px;
+  }
+}
+@media (max-width: 768px) {
+  .list-grid {
+      padding-left: 0;
+  }
+
+}
+
+span.fancytree-icon {
+    margin-left: 0;
+}
+
+._treeContainer {
+    width: 300px;
+    padding-right: 10px;
+}
+
+.tree-header {
+    z-index: 4;
+}
+
+#list-controller .tree-header {
+  height: auto;
+}
+
+#list-controller select {
+  height: 25px;
+  width: 300px;
+  background-color: #333333;
+}
+</style>
+
+<div id="list-controller" ng-controller="QDR.ListController">
+
+    <div class="page-menu navbar-collapse collapse">
+        <div class="tree-header"><select id="routerSelect"
+            ng-options="node as node.name for node in nodes" 
+            ng-model="currentNode" 
+            ng-change="selectNode(currentNode)"></select></div>
+        <div class="_treeContainer">
+            <div id="entityTree" onSelect="onTreeSelected" onRoot="onRootReady" hideRoot="true"></div>
+            <div ng-init="treeReady()"></div>
+        </div>
+    </div>
+
+    <div class="list-grid col-xs-12">
+        <div class="row-fluid qdrListActions">
+            <ul class="nav nav-tabs">
+                <li ng-repeat="mode in modes" ng-show="isValid(mode)" ng-click="selectMode(mode)" ng-class="{active : isModeSelected(mode)}" title="{{mode.title}}" ng-bind-html="mode.content"> </li>
+            </ul>
+            <h4>{{selectedRecordName}}</h4>
+            <div ng-show="currentMode.id === 'attributes'" class="selectedItems">
+                <div ng-show="selectedRecordName === selectedEntity" class="no-content">There are no {{selectedEntity | safePlural}}</div>
+                <div id='details-grid' ng-hide="selectedRecordName === selectedEntity" ui-grid="details" ui-grid-resize-columns ui-grid-save-state
+                     ng-style="getTableHeight()"></div>
+            </div>
+            <div ng-show="currentMode.id === 'delete'">
+                <div class="delete" ng-show="selectedRecordName !== selectedEntity">
+                    <button class="btn btn-primary" ng-click="remove()">Delete</button> {{selectedRecordName}}
+                </div>
+                <div ng-hide="selectedRecordName !== selectedEntity">
+                    There are no {{selectedEntity | safePlural}}
+                </div>
+            </div>
+            <div class="operations" ng-show="currentMode.id === 'operations'">
+                <fieldset ng-show="operation != ''">
+                    <table>
+                        <tr>
+                            <th>Attribute</th>
+                            <th>Value</th>
+                        </tr>
+                    <tr title="{{attribute.title}}" ng-repeat="attribute in detailFields">
+                        <td><label for="{{attribute.name}}">{{attribute.name | humanify}}</label></td>
+                        <!-- we can't do <input type="{angular expression}"> because... jquery throws an exception because... -->
+                        <td>
+                        <div ng-if="attribute.input == 'input'">
+                            <!-- ng-pattern="testPattern(attribute)" -->
+                            <div ng-if="attribute.type == 'number'"><input type="number" name="{{attribute.name}}" id="{{attribute.name}}" ng-model="attribute.rawValue" ng-required="attribute.required" ng-class="{required: attribute.required, unique: attribute.unique}" class="ui-widget-content ui-corner-all"/><span ng-if="attribute.required" title="required" class="required-indicator"></span><span ng-if="attribute.unique" title="unique" class="unique-indicator"></span></div>
+                            <div ng-if="attribute.type == 'text'"><input type="text" name="{{attribute.name}}" id="{{attribute.name}}" ng-model="attribute.attributeValue" ng-required="attribute.required" ng-class="{required: attribute.required, unique: attribute.unique}" class="ui-widget-content ui-corner-all"/><span ng-if="attribute.required" title="required" class="required-indicator"></span><span ng-if="attribute.unique" title="unique" class="unique-indicator"></span></div>
+                            <div ng-if="attribute.type == 'textarea'"><textarea name="{{attribute.name}}" id="{{attribute.name}}" ng-model="attribute.attributeValue" ng-required="attribute.required" ng-class="{required: attribute.required, unique: attribute.unique}" class="ui-widget-content ui-corner-all"></textarea><span ng-if="attribute.required" title="required" class="required-indicator"></span><span ng-if="attribute.unique" title="unique" class="unique-indicator"></span></div>
+                            <span ng-if="attribute.type == 'disabled'" >{{getAttributeValue(attribute)}}</span>
+                        </div>
+                        <div ng-if="attribute.input == 'select'">
+                            <select id="{{attribute.name}}" ng-model="attribute.selected" ng-required="attribute.required" ng-class="{required: attribute.required, unique: attribute.unique}" ng-options="item for item in attribute.rawtype track by item"></select>
+                            <span ng-if="attribute.required" title="required" class="required-indicator"></span><span ng-if="attribute.unique" title="unique" class="unique-indicator"></span>
+                        </div>
+                        <div ng-if="attribute.input == 'boolean'" class="boolean">
+                            <label><input type="radio" ng-model="attribute.rawValue" ng-value="true"> True</label>
+                            <label><input type="radio" ng-model="attribute.rawValue" ng-value="false"> False</label>
+                        </div>
+                        </td>
+                    </tr>
+                    <tr><td></td><td><button class="btn btn-primary" type="button" ng-click="ok()">{{operation | Pascalcase}}</button></td></tr>
+                    </table>
+                </fieldset>
+            </div>
+            <div ng-show="currentMode.id === 'log'">
+                <div ng-if="logResults.length > 0">
+                    <table class="log-entry" ng-repeat="entry in logResults track by $index">
+                        <tr>
+                            <td align="left" colspan="2">{{entry.time}}</td>
+                        </tr>
+                        <tr>
+                            <td>Type</td><td>{{entry.type}}</td>
+                        </tr>
+                        <tr>
+                            <td>Source</td><td>{{entry.source}}:{{entry.line}}</td>
+                        </tr>
+                        <tr>
+                            <td valign="middle">Message</td><td valign="middle"><pre>{{entry.message}}</pre></td>
+                        </tr>
+                    </table>
+                </div>
+                <div ng-if="logResults.length == 0 && !fetchingLog">No log entries for {{selectedRecordName}}</div>
+                <div ng-if="fetchingLog">Fetching logs for {{selectedRecordName}}</div>
+            </div>
+        </div>
+    </div>
+</div>
+

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dfd3cf7c/console/stand-alone/plugin/html/qdrOverview.html
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/html/qdrOverview.html b/console/stand-alone/plugin/html/qdrOverview.html
new file mode 100644
index 0000000..3b4acb9
--- /dev/null
+++ b/console/stand-alone/plugin/html/qdrOverview.html
@@ -0,0 +1,283 @@
+<!--
+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.
+-->
+
+<style>
+@media (min-width: 768px) {
+  .overview-grid {
+    padding-left: 300px;
+  }
+}
+@media (max-width: 768px) {
+  .overview-grid {
+      padding-left: 0;
+  }
+
+}
+
+span.fancytree-icon {
+    margin-left: 0;
+}
+
+.treeContainer {
+    width: 300px;
+    padding-right: 10px;
+}
+
+  .gridDetails .aChart {
+    margin-left: -1em;
+    margin-right: 2em;
+    width: 400px;
+  }
+
+@media (max-width: 768px) {
+  .gridDetails .aChart {
+    margin-right: 1em;
+    width: 380px;
+  }
+}
+
+.page-menu {
+    top: 0;
+}
+
+.overview-grid {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: calc(100% - 40px);
+    margin-left: 20px;
+}
+
+</style>
+
+<div id="overview-controller" ng-controller="QDR.OverviewController">
+
+    <div class="page-menu navbar-collapse collapse">
+        <div class="treeContainer ng-scope">
+            <div id="overtree"></div>
+            <div ng-init="overviewLoaded()"></div>
+        </div>
+    </div>
+
+    <div class="overview-grid">
+        <div class="gridDetails" ng-include="template.url"></div>
+    </div>
+</div>
+
+<script type="text/ng-template" id="overviewCharts.html">
+    <div ng-controller="QDR.OverviewChartsController" class="clearfix">
+        <div ng-repeat="chart in overviewCharts" class="chartContainer" >
+            <p class="chartLabels">
+            </p><div style="clear:both"></div>
+            <div id="{{chart.chart.id()}}" class="line-chart-pf aChart d3Chart"></div>
+        </div>
+    </div>
+    <div ng-controller="QDR.TopAddressesController">
+        <h1>Most active addresses</h1>
+        <div ng-if="anyAddresses()" id="topAddresses" class="grid" ui-grid="topAddressesGrid"  ui-grid-selection ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state></div>
+        <div ng-if="!anyAddresses()">There are no addresses to which messages are being delivered.</div>
+    </div>
+</script>
+
+<!-- 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="grid" ui-grid="allRouters" ui-grid-selection ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state></div>
+        </div>
+    </div>
+</script>
+<script type="text/ng-template" id="router.html">
+    <div class="row-fluid">
+        <h3>Router {{router.title}} attributes</h3>
+        <div class="grid noHighlight" ui-grid="routerGrid" ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state></div>
+    </div>
+</script>
+
+<script type="text/ng-template" id="addresses.html">
+    <div class="row-fluid">
+        <h3>Addresses</h3>
+        <div class="overview">
+            <div class="grid" ui-grid="addressesGrid" ui-grid-selection ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state></div>
+        </div>
+    </div>
+</script>
+<script type="text/ng-template" id="address.html">
+    <div class="row-fluid">
+        <ul class="nav nav-tabs">
+            <li ng-repeat="mode in gridModes" ng-click="selectMode(mode,'Address')" ng-class="{active : isModeSelected(mode,'Address')}" title="{{mode.title}}" ng-bind-html="mode.content"> </li>
+        </ul>
+        <div ng-if="isModeVisible('Address','attributes')" class="selectedItems">
+            <h3>Address {{address.title}}</h3>
+            <div class="grid noHighlight" ui-grid="addressGrid" ui-grid-resize-columns ui-grid-save-state></div>
+        </div>
+        <div ng-if="isModeVisible('Address','links')" class="selectedItems">
+            <h3>Links for address {{address.title}}</h3>
+            <div class="grid" ui-grid="linksGrid" ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state></div>
+        </div>
+    </div>
+</script>
+
+<script type="text/ng-template" id="links.html">
+    <div class="row-fluid">
+        <h3>Links <button type='button' ng-click="filterToggle()" class='btn btn-secondary btn-filter'>Filter</button></h3>
+        <div id="linkFilter">
+            <div class="filter-title">
+                <h6>Filter links</h6>
+                <button ng-click="filterToggle()" type="button" class="btn btn-primary filter-close">x</button>
+            </div>
+            <div class="formLine"><label for="hideConsoles">Hide console links</label><input name="hideConsoles" id="hideConsoles" type="checkbox" ng-model="filter.hideConsoles"/></div>
+            <div class="formLine"><label for="endpointOnly">Endpoints only</label><input name="linkTypes" id="endpointOnly" type="radio" ng-model="filter.endpointsOnly" value="true"/>
+                <label for="allLinks">All link types</label><input name="linkTypes" id="allLinks" type="radio" ng-model="filter.endpointsOnly" value="false"/></div>
+        </div>
+        <div class="grid" ui-grid="linksGrid" ui-grid-selection ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state></div>
+    </div>
+</script>
+<script type="text/ng-template" id="link.html">
+    <div class="row-fluid">
+        <h3>Link {{link.title}}</h3>
+        <div class="grid noHighlight" ui-grid="linkGrid" ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state></div>
+    </div>
+</script>
+
+<script type="text/ng-template" id="connections.html">
+    <div class="row-fluid">
+        <h3>Connections</h3>
+        <div class="overview">
+            <div class="grid" ui-grid="allConnectionGrid" ui-grid-selection ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state></div>
+        </div>
+    </div>
+</script>
+<script type="text/ng-template" id="connection.html">
+    <div class="row-fluid">
+        <ul class="nav nav-tabs">
+            <li ng-repeat="mode in gridModes" ng-click="selectMode(mode,'Connection')" ng-class="{active : isModeSelected(mode,'Connection')}" title="{{mode.title}}" ng-bind-html="mode.content"> </li>
+        </ul>
+        <div ng-if="isModeVisible('Connection','attributes')" class="selectedItems">
+            <h3>Connection {{connection.title}}</h3>
+            <div class="grid noHighlight" ui-grid="connectionGrid" ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state></div>
+        </div>
+        <div ng-if="isModeVisible('Connection','links')" class="selectedItems">
+            <h3>Links for connection {{connection.title}}</h3>
+            <div class="grid" ui-grid="linksGrid" ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state></div>
+        </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>Recent log events</h3>
+        <div class="overview">
+            <div class="grid" ui-grid="allLogGrid" ui-grid-selection ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state></div>
+        </div>
+    </div>
+</script>
+<script type="text/ng-template" id="logModule.html">
+    <div class="row-fluid">
+        <h3>{{logModule.module}} events</h3>
+        <div class="overview-cell">
+            <div class="grid" ui-grid="logModuleGrid" ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state></div>
+        </div>
+    </div>
+</script>
+<script type="text/ng-template" id="log.html">
+    <div class="row-fluid">
+        <h3>{{log.title}}</h3>
+        <div ng-if="logFields.length > 0">
+            <table class="log-entry" ng-repeat="entry in logFields track by $index">
+                <tr>
+                    <td>Router</td><td>{{entry.nodeId}}</td>
+                </tr>
+                <tr>
+                    <td align="left" colspan="2">{{entry.time}}</td>
+                </tr>
+                <tr>
+                    <td>Source</td><td>{{entry.source}}:{{entry.line}}</td>
+                </tr>
+                <tr>
+                    <td valign="middle">Message</td><td valign="middle"><pre>{{entry.message}}</pre></td>
+                </tr>
+            </table>
+        </div>
+        <div ng-if="logFields.length == 0">No log entries for {{log.title}}</div>
+    </div>
+</script>
+
+<script type="text/ng-template" id="linkRowTemplate.html">
+    <div ng-class="{'linkDirIn': row.entity.linkDir == 'in', 'linkDirOut': row.entity.linkDir == 'out' }">
+        <div ng-repeat="(colRenderIndex, col) in colContainer.renderedColumns track by col.colDef.name"
+             class="ui-grid-cell" ng-class="{ 'ui-grid-row-header-cell': col.isRowHeader }" ui-grid-cell>
+        </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>
+
+<script type="text/ng-template" id="viewLogs.html">
+    <div class="modal-header">
+        <h3 class="modal-title">Logs for {{nodeName}} {{module}}:{{level | humanify}}</h3>
+    </div>
+    <div class="modal-body">
+        <div ng-if="loading == false">
+            <div class="log-details" ng-if="logFields.length > 0">
+                <table class="log-entry" ng-repeat="entry in logFields track by $index">
+                    <tr>
+                        <td>Router</td><td>{{entry.nodeId}}</td>
+                    </tr>
+                    <tr>
+                        <td align="left" colspan="2">{{entry.time}}</td>
+                    </tr>
+                    <tr>
+                        <td>Source</td><td>{{entry.source}}:{{entry.line}}</td>
+                    </tr>
+                    <tr>
+                        <td valign="middle">Message</td><td valign="middle"><pre>{{entry.message}}</pre></td>
+                    </tr>
+                </table>
+            </div>
+            <div ng-if="logFields.length == 0">No log entries</div>
+        </div>
+        <div ng-if="loading == true">
+            Loading...
+        </div>
+    </div>
+    <div class="modal-footer">
+        <button class="btn btn-primary" type="button" ng-click="ok()">Close</button>
+    </div>
+</script>
+

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dfd3cf7c/console/stand-alone/plugin/html/qdrSchema.html
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/html/qdrSchema.html b/console/stand-alone/plugin/html/qdrSchema.html
new file mode 100644
index 0000000..5bd9207
--- /dev/null
+++ b/console/stand-alone/plugin/html/qdrSchema.html
@@ -0,0 +1,62 @@
+<!--
+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.
+-->
+<style>
+    .page-menu-button {
+        display: none;
+    }
+
+
+span.fancytree-title {
+  color: black;
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+  width: 16em;
+}
+
+span.fancytree-node:hover {
+  color: white !important;
+  background-color: black !important;
+}
+span.fancytree-node:hover span.fancytree-title {
+  color: white;
+}
+
+span.fancytree-node.fancytree-active:hover, 
+span.fancytree-node.fancytree-active:hover span.fancytree-title {
+  color: white;
+}
+
+span.fancytree-expanded.fancytree-has-children, span.fancytree-expanded.fancytree-has-children + ul {
+  background-color: white;
+}
+span.fancytree-expanded.fancytree-has-children:hover {
+  background-color: black;
+}
+
+span.fancytree-node.fancytree-active {
+  background-color: #6aa3d5;
+}
+
+
+</style>
+
+<div class="main-display row-fluid" ng-controller="QDR.SchemaController">
+    <div id="schema"></div>
+</div>

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dfd3cf7c/console/stand-alone/plugin/html/qdrTopology.html
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/html/qdrTopology.html b/console/stand-alone/plugin/html/qdrTopology.html
new file mode 100644
index 0000000..2b82e34
--- /dev/null
+++ b/console/stand-alone/plugin/html/qdrTopology.html
@@ -0,0 +1,146 @@
+<!--
+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) {
+  .diagram {
+    padding-left: 300px;
+  }
+  .showLeft {
+      display: block;
+  }
+}
+@media (max-width: 768px) {
+  .diagram {
+      padding-left: 0 !important;
+  }
+  .showLeft {
+      display: none;
+  }
+
+}
+
+button.page-menu-button {
+    display: none;
+}
+  #popover-div {
+    position: absolute;
+    z-index: 200;
+    border-radius: 4px;
+    background-color: black;
+    color: white;
+    opacity: .95;
+    padding: 12px;
+    font-size: 14px;
+    display: none;
+  }
+
+  table.popupTable td {
+    padding-right: 5px;
+    font-size: 10px;
+  }
+
+#topologyForm {
+  border-right: 1px solid lightgray;
+  border-bottom: 1px solid lightgray;
+  padding: 2px;
+  /* position: absolute; */
+  background-color: #333333;
+  width: 300px;
+}
+
+  #topologyForm .infoGrid span {
+      display: inline-block;
+      width: 50%;
+      height: 28px;
+      padding: 3px 6px 2px 6px;
+      border-right: 1px solid #666666;
+      text-overflow: ellipsis;
+      white-space: nowrap;
+      overflow: hidden;
+  }
+
+  #topologyForm .infoGrid span:last-child {
+      text-align: right;
+      border-right: 0;
+  }
+  #topologyForm .infoGrid div {
+      height: 28px;
+  }
+  #topologyForm .infoGrid div.odd {
+      background-color: #444444;
+  }
+
+  #topologyForm .infoGrid div.listening-on {
+      background-color: #336633;
+  }
+  .page-menu {
+      width: 300px;
+  }
+  
+</style>
+<div class="qdrTopology row" ng-controller="QDR.TopologyController">
+    <div  ng-controller="QDR.TopologyFormController">
+        <div class="page-menu navbar-collapse collapse">
+            <div id="topologyForm">
+                <div>
+                    <h4>{{form}} Info</h4>
+                    <!-- <div id="routerInfo" class="grid" ui-grid="topoGridRouter" ng-style="infoStyle()"></div> -->
+                    <div id="formInfo"></div>
+                </div>
+            </div>
+            <button ng-if="panelVisible" ng-click="hideLeftPane()" class="hideLeft" title="Hide"><i class="icon-step-backward"></i></button>
+        </div>
+        <button ng-if="!panelVisible" ng-click="showLeftPane()" class="showLeft" title="Show"><i class="icon-step-forward"></i></button>
+    </div>
+
+    <div class="diagram col-xs-12">
+        <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 id="svg_legend" class="hidden-xs"></div>
+        <div id="multiple_details">
+            <h4 class="grid-title">Connections</h4>
+            <div class="grid" ui-grid="multiDetails" ui-grid-selection ui-grid-auto-resize ng-style="connectionsStyle()"></div>
+        </div>
+        <div id="link_details">
+            <h4 class="grid-title">Links</h4>
+            <div class="grid" ui-grid="linkDetails" ui-grid-auto-resize ng-style="linksStyle()"></div>
+        </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>


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org