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