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/23 18:30:03 UTC

[5/5] qpid-dispatch git commit: DISPATCH-1001 Removing developer tool

DISPATCH-1001 Removing developer tool


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

Branch: refs/heads/master
Commit: 4f42d5b34fb945fdc9494014c3f5898d392e5f51
Parents: 5d5db89
Author: Ernest Allen <ea...@redhat.com>
Authored: Wed May 23 14:29:38 2018 -0400
Committer: Ernest Allen <ea...@redhat.com>
Committed: Wed May 23 14:29:38 2018 -0400

----------------------------------------------------------------------
 console/config/README                           |   28 -
 console/config/config.py                        |  456 --
 console/config/css/brokers.ttf                  |  Bin 2272 -> 0 bytes
 console/config/css/dispatch.css                 |  738 ---
 console/config/css/mock.css                     |  165 -
 console/config/css/plugin.css                   |  986 ----
 console/config/css/site-base.css                | 4706 ------------------
 console/config/deploy                           |   38 -
 .../config/deployments/install_dispatch.yaml    |   78 -
 console/config/deployments/run_dispatch.yaml    |   37 -
 console/config/favicon-32x32.png                |  Bin 1055 -> 0 bytes
 console/config/html/qdrTopology.html            |  279 --
 console/config/index.html                       |   91 -
 console/config/js/dispatchPlugin.js             |  157 -
 console/config/js/qdrNewNode.js                 |  329 --
 console/config/js/qdrService.js                 |  282 --
 console/config/js/qdrTopology.js                | 2034 --------
 console/config/mock/__init__.py                 |   23 -
 console/config/mock/schema.py                   |   54 -
 console/config/mock/section.py                  |  111 -
 console/config/package.json                     |   37 -
 console/config/schema.json                      | 1814 -------
 console/config/topologies/config-2/A.conf       |   40 -
 console/config/topologies/config-2/B.conf       |   31 -
 24 files changed, 12514 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/4f42d5b3/console/config/README
----------------------------------------------------------------------
diff --git a/console/config/README b/console/config/README
deleted file mode 100644
index bf495e8..0000000
--- a/console/config/README
+++ /dev/null
@@ -1,28 +0,0 @@
-Qpid Dispatch config file read/update/write utility
-=============
-
-A utility to read, update, write, and deploy dispatch router config files.
-
-Dependencies
-============
-
-- tested using python 2.7
-- npm to install the 3rd party javascript libraries
-  http://blog.npmjs.org/post/85484771375/how-to-install-npm
-
-- ansible if you wish to deploy the routers
-http://docs.ansible.com/ansible/latest/intro_installation.html
-
-Running
-====================
-
-Install the 3rd party javascript libraries:
-- in the console/config/ directory run
-  npm install
-This will create a node_modules/ directory and install the needed files
-
-- run ./config.py
-- in the address bar of a browser, enter localhost:8000
-
-
-

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/4f42d5b3/console/config/config.py
----------------------------------------------------------------------
diff --git a/console/config/config.py b/console/config/config.py
deleted file mode 100755
index f83057e..0000000
--- a/console/config/config.py
+++ /dev/null
@@ -1,456 +0,0 @@
-#!/usr/bin/env python
-#
-# 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.
-#
-
-import argparse
-from pprint import pprint
-import os, sys, inspect
-import string
-import random
-from glob import glob
-from mock import *
-import SimpleHTTPServer
-import SocketServer
-import json
-import cStringIO
-import yaml
-import threading
-import subprocess
-from distutils.spawn import find_executable
-
-get_class = lambda x: globals()[x]
-sectionKeys = {"log": "module", "sslProfile": "name", "connector": "port", "listener": "port", "address": "prefix|pattern"}
-
-# modified from qpid-dispatch/python/qpid_dispatch_internal/management/config.py
-def _parse(lines):
-    """Parse config file format into a section list"""
-    begin = re.compile(r'([\w-]+)[ \t]*{') # WORD {
-    end = re.compile(r'}')                 # }
-    attr = re.compile(r'([\w-]+)[ \t]*:[ \t]*(.+)') # WORD1: VALUE
-    pattern = re.compile(r'([\w-]+)[ \t]*:[ \t]*([\S]+).*')
-
-    def sub(line):
-        """Do substitutions to make line json-friendly"""
-        line = line.strip()
-        if line.startswith("#"):
-            if line.startswith("#deploy_host:"):
-                line = line[1:]
-            else:
-                return ""
-        # 'pattern:' is a special snowflake.  It allows '#' characters in
-        # its value, so they cannot be treated as comment delimiters
-        if line.split(':')[0].strip().lower() == "pattern":
-            line = re.sub(pattern, r'"\1": "\2",', line)
-        else:
-            line = line.split('#')[0].strip()
-            line = re.sub(begin, r'["\1", {', line)
-            line = re.sub(end, r'}],', line)
-            line = re.sub(attr, r'"\1": "\2",', line)
-        return line
-
-    js_text = "[%s]"%("\n".join([sub(l) for l in lines]))
-    spare_comma = re.compile(r',\s*([]}])') # Strip spare commas
-    js_text = re.sub(spare_comma, r'\1', js_text)
-    # Convert dictionary keys to camelCase
-    sections = json.loads(js_text)
-    #Config.transform_sections(sections)
-    return sections
-
-class DirectoryConfigs(object):
-    def __init__(self, path='./'):
-        self.path = path
-        self.configs = {}
-
-        files = glob(path + '*.conf')
-        for file in files:
-            with open(file) as f:
-                self.configs[file] = _parse(f)
-
-    def asSection(self, s):
-        cname = s[0][0].upper() + s[0][1:] + "Section"
-        try:
-            c = get_class(cname)
-            return c(**s[1])
-        except KeyError, e:
-            return None
-
-class Manager(object):
-    def __init__(self, topology, verbose):
-        self.topology = topology
-        self.verbose = verbose
-        self.topo_base = "topologies/"
-        self.deploy_base = "deployments/"
-        self.deploy_file = self.deploy_base + "deploy.txt"
-        self.state = None
-
-    def operation(self, op, request):
-        m = op.replace("-", "_")
-        try:
-            method = getattr(self, m)
-        except AttributeError:
-            print op + " is not implemented yet"
-            return None
-        if self.verbose:
-            print "Got request " + op
-        return method(request)
-
-    def ANSIBLE_INSTALLED(self, request):
-        if self.verbose:
-            print "Ansible is", "installed" if find_executable("ansible") else "not installed"
-        return "installed" if find_executable("ansible") else ""
-
-    # if the node has listeners, and one of them has an http:'true'
-    def has_console(self, node):
-        #n = False
-        #return node.get('listeners') and any([n or h.get('http') for l, h in node.get('listeners').iteritems()])
-
-        listeners = node.get('listeners')
-        if listeners:
-            for k, listener in listeners.iteritems():
-                if listener.get('http'):
-                    return True
-
-        return False
-
-    def DEPLOY(self, request):
-        nodes = request["nodes"]
-        topology = request["topology"]
-        inventory_file = self.deploy_base + "inventory.yml"
-        ansible_become_pass = "ansible_become_pass"
-
-        self.PUBLISH(request, deploy=True)
-
-        inventory = {'deploy_routers':
-             {'vars': {'topology': topology},
-              'hosts': {}
-            }
-        }
-        hosts = inventory['deploy_routers']['hosts']
-
-        for node in nodes:
-            if node['cls'] == 'router':
-                host = node['host']
-                if not host in hosts:
-                    hosts[host] = {'nodes': [], 'create_console': False}
-                # if any of the nodes for this host has a console, set create_console for this host to true
-                hosts[host]['create_console'] = (hosts[host]['create_console'] or self.has_console(node))
-                hosts[host]['nodes'].append(node['name'])
-                # pass in the password for eash host if provided
-                if request.get(ansible_become_pass + "_" + host):
-                    hosts[host][ansible_become_pass] = request.get(ansible_become_pass + "_" + host)
-                # local hosts need to be marked as such
-                if host in ('0.0.0.0', 'localhost', '127.0.0.1'):
-                    hosts[host]['ansible_connection'] = 'local'
-
-        with open(inventory_file, 'w') as n:
-            yaml.safe_dump(inventory, n, default_flow_style=False)
-
-        # start ansible-playbook in separate thread so we don't have to wait and can still get a callback when done
-        def popenCallback(callback, args):
-            def popen(callback, args):
-                # send all output to deploy.txt so we can send it to the console in DEPLOY_STATUS
-                with open(self.deploy_file, 'w') as fout:
-                    proc = subprocess.Popen(args, stdout=fout, stderr=fout)
-                    proc.wait()
-                    callback(proc.returncode)
-                return
-            thread = threading.Thread(target=popen, args=(callback, args))
-            thread.start()
-
-        def ansible_done(returncode):
-            os.remove(inventory_file)
-            if self.verbose:
-                print "-------------- DEPLOYMENT DONE with return code", returncode, "------------"
-            if returncode:
-                self.state = returncode
-            else:
-                self.state = "DONE"
-
-        self.state = "DEPLOYING"
-        popenCallback(ansible_done, ['ansible-playbook', self.deploy_base + 'install_dispatch.yaml', '-i', inventory_file])
-
-        return "deployment started"
-
-    def DEPLOY_STATUS(self, request):
-        with open(self.deploy_file, 'r') as fin:
-            content = fin.readlines()
-
-        # remove leading blank line
-        if len(content) > 1 and content[0] == '\n':
-            content.pop(0)
-
-        return [''.join(content), self.state]
-
-    def GET_LOG(self, request):
-        return []
-
-    def GET_SCHEMA(self, request):
-        with open("schema.json") as fp:
-            data = json.load(fp)
-            return data
-
-    def LOAD(self, request):
-        topology = request["topology"]
-        nodes = []
-        links = []
-
-        dc = DirectoryConfigs('./' + self.topo_base + topology + '/')
-        configs = dc.configs
-
-        port_map = []
-        for index, file in enumerate(configs):
-            port_map.append({'connectors': [], 'listeners': []})
-            node = {}
-            for sect in configs[file]:
-                # remove notes to self
-                host = sect[1].pop('deploy_host', None)
-                section = dc.asSection(sect)
-                if section:
-                    if section.type == "router":
-                        node["index"] = index
-                        node["nodeType"] = unicode("inter-router")
-                        node["name"] = section.entries["id"]
-                        node["key"] = "amqp:/_topo/0/" + node["name"] + "/$management"
-                        if host:
-                            node['host'] = host
-                        nodes.append(node)
-
-                    elif section.type in sectionKeys:
-                        role = section.entries.get('role')
-                        if role == 'inter-router':
-                            # we are processing an inter-router listener or connector: so create a link
-                            port = section.entries.get('port', 'amqp')
-                            if section.type == 'listener':
-                                port_map[index]['listeners'].append(port)
-                            else:
-                                port_map[index]['connectors'].append(port)
-                        else:
-                            if section.type+'s' not in node:
-                                node[section.type+'s'] = {}
-                            key = sectionKeys[section.type]
-                            if '|' in key:
-                                # assumes at least one of the keys will have a value
-                                val = [section.entries.get(x) for x in key.split('|') if section.entries.get(x)][0]
-                            else:
-                                val = section.entries.get(key)
-                            node[section.type+'s'][val] = section.entries
-
-        for source, ports_for_this_routers in enumerate(port_map):
-            for listener_port in ports_for_this_routers['listeners']:
-                for target, ports_for_other_routers in enumerate(port_map):
-                    if listener_port in ports_for_other_routers['connectors']:
-                        links.append({'source': source, 'target': target, 'dir': unicode("in")})
-
-        return {"nodes": nodes, "links": links, "topology": topology}
-
-    def GET_TOPOLOGY(self, request):
-        if self.verbose:
-            pprint (self.topology)
-        return unicode(self.topology)
-
-    def GET_TOPOLOGY_LIST(self, request):
-        return [unicode(f) for f in os.listdir(self.topo_base) if os.path.isdir(self.topo_base + f)]
-
-    def SWITCH(self, request):
-        self.topology = request["topology"]
-        tdir = './' + self.topo_base + self.topology + '/'
-        if not os.path.exists(tdir):
-            os.makedirs(tdir)
-        return self.LOAD(request)
-
-    def SHOW_CONFIG(self, request):
-        nodeIndex = request['nodeIndex']
-        return self.PUBLISH(request, nodeIndex)
-
-    def _connect_(self, links, nodes, default_host, listen_port):
-        for link in links:
-            s = nodes[link['source']]
-            t = nodes[link['target']]
-            # keep track of names so we can print them above the sections
-            if 'listen_from' not in s:
-                s['listen_from'] = []
-            if 'conn_to' not in t:
-                t['conn_to'] = []
-            if 'conns' not in t:
-                t['conns'] = []
-
-            # make sure source node has a listener
-            lport = listen_port
-            lhost = s.get('host', default_host)
-            s['listen_from'].append(t['name'])
-            if 'listener' not in s:
-                s['listener'] = listen_port
-                listen_port += 1
-            else:
-                lport = s['listener']
-
-            t['conns'].append({"port": lport, "host": lhost})
-            t['conn_to'].append(s['name'])
-
-    def PUBLISH(self, request, nodeIndex=None, deploy=False):
-        nodes = request["nodes"]
-        links = request["links"]
-        topology = request["topology"]
-        settings = request["settings"]
-        http_port = settings.get('http_port', 5675)
-        listen_port = settings.get('internal_port', 2000)
-        default_host = settings.get('default_host', '0.0.0.0')
-
-        if nodeIndex and nodeIndex >= len(nodes):
-            return "Node index out of range"
-
-        if self.verbose:
-            if nodeIndex is not None:
-                print("Creating config for " + topology + " node " + nodes[nodeIndex]['name'])
-            elif deploy:
-                print("DEPLOYing to " + topology)
-            else:
-                print("PUBLISHing to " + topology)
-
-        if nodeIndex is None:
-            # remove all .conf files from the output dir. they will be recreated below possibly under new names
-            for f in glob(self.topo_base + topology + "/*.conf"):
-                if self.verbose:
-                    print "Removing", f
-                os.remove(f)
-
-        # establish connections and listeners for each node based on links
-        self._connect_(links, nodes, default_host, listen_port)
-
-        # now process all the routers
-        for node in nodes:
-            if node['nodeType'] == 'inter-router':
-                if self.verbose:
-                    print "------------- processing node", node["name"], "---------------"
-
-                nname = node["name"]
-                if nodeIndex is not None:
-                    config_fp = cStringIO.StringIO()
-                else:
-                    config_fp = open(self.topo_base + topology + "/" + nname + ".conf", "w+")
-
-                # add a router section in the config file
-                r = RouterSection(**node)
-                if not node.get('conns') and not node.get('listener'):
-                    r.setEntry('mode', 'standalone')
-                else:
-                    r.setEntry('mode', 'interior')
-                r.setEntry('id', node['name'])
-                if nodeIndex is None:
-                    r.setEntry('deploy_host', node.get('host', ''))
-                config_fp.write(str(r) + "\n")
-
-                # write other sections
-                for sectionKey in sectionKeys:
-                    if sectionKey+'s' in node:
-                        if self.verbose:
-                            print "found", sectionKey+'s'
-                        for k in node[sectionKey+'s']:
-                            if self.verbose:
-                                print "processing", k
-                            o = node[sectionKey+'s'][k]
-                            cname = sectionKey[0].upper() + sectionKey[1:] + "Section"
-                            if self.verbose:
-                                print "class name is", cname
-                            c = get_class(cname)
-                            if sectionKey == "listener" and o['port'] != 'amqp' and int(o['port']) == http_port:
-                                config_fp.write("\n# Listener for a console\n")
-                                if deploy:
-                                    o['httpRoot'] = '/usr/local/share/qpid-dispatch/stand-alone'
-                            if node.get('host') == o.get('host'):
-                                o['host'] = '0.0.0.0'
-                            if self.verbose:
-                                print "attributes", o, "is written as", str(c(**o))
-                            config_fp.write(str(c(**o)) + "\n")
-
-                if 'listener' in node:
-                    # always listen on localhost
-                    lhost = "0.0.0.0"
-                    listenerSection = ListenerSection(node['listener'], **{'host': lhost, 'role': 'inter-router'})
-                    if 'listen_from' in node and len(node['listen_from']) > 0:
-                        config_fp.write("\n# listener for connectors from " + ', '.join(node['listen_from']) + "\n")
-                    config_fp.write(str(listenerSection) + "\n")
-
-                if 'conns' in node:
-                    for idx, conns in enumerate(node['conns']):
-                        conn_port = conns['port']
-                        conn_host = conns['host']
-                        if node.get('host') == conn_host:
-                            conn_host = "0.0.0.0"
-                        connectorSection = ConnectorSection(conn_port, **{'host': conn_host, 'role': 'inter-router'})
-                        if 'conn_to' in node and len(node['conn_to']) > idx:
-                            config_fp.write("\n# connect to " + node['conn_to'][idx] + "\n")
-                        config_fp.write(str(connectorSection) + "\n")
-
-                # return requested config file as string
-                if node.get('index', -1) == nodeIndex:
-                    val = config_fp.getvalue()
-                    config_fp.close()
-                    return val
-
-                config_fp.close()
-
-        return "published"
-
-class HttpHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
-    # use GET requests to serve the web pages
-    def do_GET(self):
-        SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self);
-
-    # use PORT requests to send commands
-    def do_POST(self):
-        content_len = int(self.headers.getheader('content-length', 0))
-        if content_len > 0:
-            body = self.rfile.read(content_len)
-            data = json.loads(body)
-            response = self.server.manager.operation(data['operation'], data)
-            if response is not None:
-                self.send_response(200)
-                self.send_header('Content-Type', 'application/json')
-                self.end_headers()
-
-                self.wfile.write(json.dumps(response));
-                self.wfile.close();
-        else:
-            return SimpleHTTPServer.SimpleHTTPRequestHandler.do_POST(self)
-
-    # only log if verbose was requested
-    def log_request(self, code='-', size='-'):
-        if self.server.verbose:
-            self.log_message('"%s" %s %s', self.requestline, str(code), str(size))
-
-class ConfigTCPServer(SocketServer.TCPServer):
-    def __init__(self, port, manager, verbose):
-        SocketServer.TCPServer.__init__(self, ("", port), HttpHandler)
-        self.manager = manager
-        self.verbose = verbose
-
-Schema.init()
-parser = argparse.ArgumentParser(description='Read/Write Qpid Dispatch Router config files.')
-parser.add_argument('-p', "--port", type=int, default=8000, help='port to listen for requests from browser')
-parser.add_argument('-v', "--verbose", action='store_true', help='verbose output')
-parser.add_argument("-t", "--topology", default="config-2", help="which topology to load (default: %(default)s)")
-args = parser.parse_args()
-
-try:
-    httpd = ConfigTCPServer(args.port, Manager(args.topology, args.verbose), args.verbose)
-    print "serving at port", args.port
-    httpd.serve_forever()
-except KeyboardInterrupt:
-    pass
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/4f42d5b3/console/config/css/brokers.ttf
----------------------------------------------------------------------
diff --git a/console/config/css/brokers.ttf b/console/config/css/brokers.ttf
deleted file mode 100644
index ae83968..0000000
Binary files a/console/config/css/brokers.ttf and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/4f42d5b3/console/config/css/dispatch.css
----------------------------------------------------------------------
diff --git a/console/config/css/dispatch.css b/console/config/css/dispatch.css
deleted file mode 100644
index f21eecc..0000000
--- a/console/config/css/dispatch.css
+++ /dev/null
@@ -1,738 +0,0 @@
-/*
-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.temp {
-  opacity: 0.3;
-}
-path.link.temp.over {
-  opacity: 0.8;
-  stroke-dasharray: 10,2;
-}
-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;
-}
-circle.node.highlighted {
-  stroke: #6F6;
-}
-circle.node.inter-router {
-    fill: #EAEAEA;
-}
-circle.node.normal {
-    fill: #FFF;
-    stroke: #FFF;
-    fill-opacity: 0;
-    stroke-width: 0;
-}
-circle.node.on-demand {
-    fill: #C0FFC0;
-}
-circle.node.on-demand.artemis {
-	fill: #FCC;
-	/*opacity: 0.2; */
-}
-
-circle.node.fixed {
-    stroke-dasharray: 10,2;
-}
-circle.node.temp {
-    stroke: #f80;
-    fill: #f0f0ff;
-}
-
-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.id.log, text.id.address {
-  text-anchor: middle;
-  font-weight: normal;
-}
-
-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;
-}
-
-#topologyForm.selected {
-  border: 1px solid blue;
-}
-#topologyForm {
-  border-right: 1px solid lightgray;
-  border-bottom: 1px solid lightgray;
-    /*border: 1px solid white;*/
-    padding: 2px;
-    /* position: relative; */
-    /* top: -8px; */
-}
-div.qdr-topology.pane.left .ngViewport {
-    /* border: 1px solid lightgray; */
-}
-
-#topologyForm > div {
-  width:396px;
-}
-
-/* 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: 27em;
-}
-.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: #330;
-    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;
-}
-.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;
-}
-
-.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.dynatree-expanded button.btn-filter,
-a.dynatree-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: 24px !important;
-}
-.dynatree-node.loading {
-  position: initial;
-}
-
-.hideLeft {
-  position: absolute;
-  right: 0.5em;
-  top: 1em;
-  border: 0;
-}
-
-.showLeft {
-  position: absolute;
-  top: 1em;
-  left: 0.5em;
-  border: 0;
-}
-
-.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
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/4f42d5b3/console/config/css/mock.css
----------------------------------------------------------------------
diff --git a/console/config/css/mock.css b/console/config/css/mock.css
deleted file mode 100644
index 3faa3f5..0000000
--- a/console/config/css/mock.css
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- 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
-*/
-
-#buttonBar {
-  padding: 1em;
-  border-bottom: 1px solid lightgrey;
-  color: #f5f5f5;
-}
-
-.navbar-primary {
-    font-size: 14px;
-    background-image: linear-gradient(to bottom,#1d1d1d 0,#030303 100%);
-    background-repeat: repeat-x;
-    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff1d1d1d', endColorstr='#ff030303', GradientType=0);
-}
-
-#buttonBar select {
-    position: relative;
-    top: 2px;
-    margin-left: 0.25em;
-    margin-right: 0.5em;
-    color: black;
-}
-
-path.more {
-  stroke-width: 1;
-  stroke: black;
-}
-
-.edit_input {
-  width: 20em !important;
-}
-
-.pull-right {
-  float: right;
-  margin-left: 0.25em;
-}
-
-.selected-node {
-  margin: 0 5em;
-}
-
-#action_menu {
-  position: absolute;
-}
-
-span.btn-icon {
-  position: relative;
-  top: -2px;
-  padding-left: 2px;
-  font-family: PatternFlyIcons-webfont;
-}
-
-label.form-label {
-  font-weight: 800;
-  margin-top: 1em;
-  margin-bottom: 0;
-}
-
-span.logo {
-    letter-spacing: 4px;
-}
-
-.navbar-brand {
-  padding: 1px !important;
-}
-
-.config-area {
-  max-height: 35em;
-}
-
-.btn .caret {
-  font-weight: 800;
-  padding-right: 2px;
-}
-.btn .down.caret {
-  top: -2px;
-}
-
-.btn .plus.caret:before {
- content:"\f067";
-}
-
-.btn .down.caret:before {
- content:"\f0dd";
-}
-
-.tooltip.edit-tooltip .tooltip-inner {
-  min-width: 25em;
-  color: #880000;
-  background-color: #fcfcfc;
-  box-shadow: 0 6px 12px rgba(0,0,0,.175);
-  border: 1px solid #333333;
-}
-.tooltip.edit-tooltip .tooltip-arrow {
-  /* display: none; */
-  color: $ffff68;
-}
-
-
-.form-input-container {
-  display: inline-block;
-  width: 20em;
-}
-
-div.boolean label {
-  margin-bottom: 0;
-}
-
-.alert {
-  max-width: 20em;
-}
-
-input.router-host {
-  width: 45em;
-}
-
-pre.tail {
-  max-height: 15em;
-  min-height: 15em;
-  overflow-y: scroll;
-}
-
-circle.node {
-  opacity: 0.5;
-}
-circle.node.inter-router.highlighted {
-  opacity: 1;
-}
-circle.node {
-    stroke-width: 0;
-}
-
-.host_color, .host_name {
-  display: inline-block;
-}
-
-.host_color {
-  width: 1em;
-  height: 1em;
-  border: 0;
-}
-.host_name {
-  font-weight: bold;
-}
-
-.host_pass {
-  float: right;
-}

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/4f42d5b3/console/config/css/plugin.css
----------------------------------------------------------------------
diff --git a/console/config/css/plugin.css b/console/config/css/plugin.css
deleted file mode 100644
index a21af15..0000000
--- a/console/config/css/plugin.css
+++ /dev/null
@@ -1,986 +0,0 @@
-/*
-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 .gridStyle {
-    width: 20em;
-    margin-right: 0;
-    float: left;
-}
-
-
-.qdrList div.gridDetails {
-    width: auto;
-}
-
-div.gridDetails {
-    margin-left: 1em;
-}
-
-.selectedItems {
-    /* margin-left: 21em; */
-}
-
-.qdrListPane {
-    top: 110px;
-}
-
-.qdrListActions {
-    width: auto;
-    margin-left: 1em;
-}
-
-div.listAttrName {
-    padding-top: 5px;
-}
-
-div.listAttrName i.icon-bar-chart {
-    float: right;
-    margin: 3px 5px;
-}
-
-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;
-}
-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;
-}
-
-#list-controller .tree-header {
-    position: absolute;
-    height: auto;
-}
-
-#list-controller select {
-  height: 25px;
-  float: left;
-  padding: 0;
-}
-
-
-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.dynatree-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: 200px;
-}
-
-.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;
-    margin-left: 2em;
-    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;
-    margin-bottom: 10px;
-}
-
-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;
-}
-
-.treeContainer {
-	width: 100%;
-	float: left;
-}
-
-.pane-content {
-	overflow: auto;
-}
-
-#entityNames {
-    width: 20em;
-    float: left;
-}
-
-.treeDetails {
-	margin-left: 260px;
-}
-
-.gridStyle:not(.noHighlight) .ui-grid-row:hover .ui-grid-cell-contents {
-	background-color: #e0e0ff;
-}
-
-.ngCellText {
-	padding: 4px 0 0 4px;
-}
-
-.overview {
-	border-bottom: 1px solid #d4d4d4;
-}
-
-.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(.dynatree-has-children) .dynatree-icon:before,
-.qdr-attributes.pane.left span:not(.dynatree-has-children) .dynatree-icon:before {
-    color: green;
-}
-
-span:not(.dynatree-has-children).address .dynatree-icon:before,
-span:not(.dynatree-has-children).router\.address .dynatree-icon:before {
-  font-family: FontAwesome;
-  content: "\f0ac";
-}
-span:not(.dynatree-has-children).address.mobile .dynatree-icon:before,
-span:not(.dynatree-has-children).router\.address.mobile .dynatree-icon:before {
-  font-family: FontAwesome;
-  content: "\f109";
-}
-span:not(.dynatree-has-children).address.internal.mobile .dynatree-icon:before,
-span:not(.dynatree-has-children).router\.address.internal.mobile .dynatree-icon:before {
-  font-family: FontAwesome;
-  content: "\f0ac";
-}
-span:not(.dynatree-has-children).address.router .dynatree-icon:before,
-span:not(.dynatree-has-children).router\.address.router .dynatree-icon:before {
-  font-family: FontAwesome;
-  content: "\f047";
-}
-
-span.address-link .dynatree-icon:before {
-  font-family: FontAwesome;
-  content: "\f0ac";
-}
-
-span:not(.dynatree-has-children).connection.external .dynatree-icon:before {
-  font-family: FontAwesome;
-  content: "\f109";
-}
-span:not(.dynatree-has-children).connection.normal .dynatree-icon:before {
-  font-family: FontAwesome;
-  content: "\f08e";
-}
-span:not(.dynatree-has-children).connection.external.quiesced .dynatree-icon:before {
-  font-family: FontAwesome;
-	content: "\f14c";
-	color: red;
-}
-span:not(.dynatree-has-children).connection.inter-router .dynatree-icon:before {
-  font-family: FontAwesome;
-   content: "\f07e";
-}
-span:not(.dynatree-has-children).connection.router-control .dynatree-icon:before {
-  font-family: FontAwesome;
-   content: "\f013";
-}
-span:not(.dynatree-has-children).no-data .dynatree-icon:before {
-  font-family: FontAwesome;
-  content: "\f05e";
-  color: red !important;
-}
-span:not(.dynatree-has-children).loading .dynatree-icon:before {
-  font-family: FontAwesome;
-  content: "\f254";
-}
-span:not(.dynatree-has-children).connector .dynatree-icon:before {
-  font-family: FontAwesome;
-  content: "\f126";
-}
-span:not(.dynatree-has-children).container .dynatree-icon:before {
-  font-family: FontAwesome;
-  content: "\f16c";
-}
-span:not(.dynatree-has-children).log .dynatree-icon:before {
-  font-family: FontAwesome;
-  content: "\f0f6";
-}
-span:not(.dynatree-has-children).router\.node .dynatree-icon:before {
-  font-family: FontAwesome;
-  content: "\f013";
-}
-span:not(.dynatree-has-children).link.inter-router .dynatree-icon:before,
-span:not(.dynatree-has-children).router\.link.inter-router .dynatree-icon:before{
-  font-family: FontAwesome;
-  content: "\f07e";
-}
-span:not(.dynatree-has-children).link.router-control .dynatree-icon:before,
-span:not(.dynatree-has-children).router\.link.router-control .dynatree-icon:before{
-  font-family: FontAwesome;
-  content: "\f013";
-}
-span:not(.dynatree-has-children).link.endpoint .dynatree-icon:before,
-span:not(.dynatree-has-children).router\.link.endpoint .dynatree-icon:before{
-  font-family: FontAwesome;
-  content: "\f109";
-}
-span:not(.dynatree-has-children).link.console .dynatree-icon:before,
-span:not(.dynatree-has-children).router\.link.console .dynatree-icon:before {
-  font-family: FontAwesome;
-  content: "\f108";
-}
-span:not(.dynatree-has-children).listener .dynatree-icon:before {
-  font-family: FontAwesome;
-  content: "\f025";
-}
-span:not(.dynatree-has-children).connection .dynatree-icon:before {
-  font-family: FontAwesome;
-  content: "\f07e";
-}
-span:not(.dynatree-has-children).connection.console .dynatree-icon:before {
-  font-family: FontAwesome;
-  content: "\f108";
-}
-span:not(.dynatree-has-children).waypoint .dynatree-icon:before {
-  font-family: FontAwesome;
-  content: "\f0ec";
-}
-span:not(.dynatree-has-children).router .dynatree-icon:before {
-  font-family: FontAwesome;
-  content: "\f047";
-}
-span:not(.dynatree-has-children).fixedAddress .dynatree-icon:before {
-  font-family: FontAwesome;
-  content: "\f015";
-}
-span:not(.dynatree-has-children).linkRoutePattern .dynatree-icon:before {
-  font-family: FontAwesome;
-  content: "\f039";
-}
-span:not(.dynatree-has-children).allocator .dynatree-icon:before {
-  font-family: FontAwesome;
-  content: "\f170";
-}
-
-.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;
-}
-
-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;
-}
-
-#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;
-}
-
-div#list-controller {
-    padding-left: 300px;
-}
-
-.listening-on {
-    background-color: #CCFFCC;
-}
\ No newline at end of file


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