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 2017/11/11 14:00:18 UTC
[1/8] qpid-dispatch git commit: DISPATCH-801 Removed reference to 3rd
party libraries form stand-alone console
Repository: qpid-dispatch
Updated Branches:
refs/heads/master 97de78eeb -> 58461d730
DISPATCH-801 Removed reference to 3rd party libraries form stand-alone console
Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/fdb093e4
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/fdb093e4
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/fdb093e4
Branch: refs/heads/master
Commit: fdb093e4a5dee70b0865942d358a51eee0c117ec
Parents: 97de78e
Author: Ernest Allen <ea...@redhat.com>
Authored: Sat Nov 11 08:56:16 2017 -0500
Committer: Ernest Allen <ea...@redhat.com>
Committed: Sat Nov 11 08:56:16 2017 -0500
----------------------------------------------------------------------
LICENSE | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/fdb093e4/LICENSE
----------------------------------------------------------------------
diff --git a/LICENSE b/LICENSE
index 890d436..66380af 100644
--- a/LICENSE
+++ b/LICENSE
@@ -205,11 +205,7 @@
# Third Party Dependency Licensing Information:
###############################################
-The following 4 files are licensed under the above Apache License, Version 2.0
-1. console/stand-alone/plugin/lib/rhea-min.js
-2. console/hawtio/src/main/webapp/plugin/lib/rhea-min.js
-3. console/stand-alone/bower_components/angular-patternfly/dist/angular-patternfly.min.js
-4. console/stand-alone/bower_components/angular-patternfly/dist/styles/angular-patternfly.min.css
+console/hawtio/src/main/webapp/plugin/lib/rhea-min.js is licensed under the above Apache License, Version 2.0
The following 3 files are licensed under the BSD license, for details see licenses/d3.js-license
1. console/dispatch-dashboard/dispatch/static/dashboard/dispatch/lib/d3.v3.min.js
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[4/8] qpid-dispatch git commit: DISPATCH-801 Updated 3rd party UI
components to latest available via npm
Posted by ea...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/plugin/js/qdrOverview.js
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/js/qdrOverview.js b/console/stand-alone/plugin/js/qdrOverview.js
index 1266355..056dbf9 100644
--- a/console/stand-alone/plugin/js/qdrOverview.js
+++ b/console/stand-alone/plugin/js/qdrOverview.js
@@ -19,30 +19,24 @@ under the License.
/**
* @module QDR
*/
-/**
- * @module QDR
- */
var QDR = (function (QDR) {
/**
- * @method OverviewController
- * @param $scope
- * @param QDRService
- * @param QDRChartServer
- * dialogServer
- * $location
*
* Controller that handles the QDR overview page
*/
- QDR.module.controller("QDR.OverviewController", ['$scope', 'QDRService', '$location', '$timeout', '$uibModal', function($scope, QDRService, $location, $timeout, $uibModal) {
+ QDR.module.controller("QDR.OverviewController", ['$scope', 'QDRService', '$location', '$timeout', '$uibModal', 'uiGridConstants', function($scope, QDRService, $location, $timeout, $uibModal, uiGridConstants) {
+
+ QDR.log.debug("QDR.OverviewControll started with location of " + $location.path() + " and connection of " + QDRService.management.connection.is_connected());
+ var updateIntervalHandle = undefined;
+ var updateInterval = 5000;
- console.log("QDR.OverviewControll started with location of " + $location.path() + " and connection of " + QDRService.connected);
var COLUMNSTATEKEY = 'QDRColumnKey.';
var OVERVIEWEXPANDEDKEY = "QDROverviewExpanded"
var OVERVIEWACTIVATEDKEY = "QDROverviewActivated"
var FILTERKEY = "QDROverviewFilters"
var OVERVIEWMODEIDS = "QDROverviewModeIds"
- var treeRoot; // the dynatree root node. initialized once log data is received
+ var treeRoot; // the fancytree root node. initialized once log data is received
// we want attributes to be listed first, so add it at index 0
$scope.subLevelTabs = [{
@@ -91,14 +85,22 @@ var QDR = (function (QDR) {
];
var topLevelChildren = [];
- $scope.allRouterSelected = function (row ) {
- console.log("row selected" + row)
- }
function afterSelectionChange(rowItem, checkAll) {
var nodeId = rowItem.entity.nodeId;
- $("#overtree").dynatree("getTree").activateKey(nodeId);
+ $("#overtree").fancytree("getTree").activateKey(nodeId);
}
+ var selectRow = function (gridApi) {
+ if (!gridApi.selection)
+ return
+ gridApi.selection.on.rowSelectionChanged($scope,function(row){
+ var treeKey = row.grid.options.treeKey
+ if (treeKey && row.entity[treeKey]) {
+ var key = row.entity[treeKey]
+ $("#overtree").fancytree("getTree").activateKey(key);
+ }
+ })
+ }
$scope.routerPagingOptions = {
pageSizes: [50, 100, 500],
pageSize: 50,
@@ -118,9 +120,9 @@ var QDR = (function (QDR) {
$scope.totalRouters = 0;
$scope.allRouterFields = [];
$scope.pagedRouterFields = [];
- $scope.allRouterSelections = [];
$scope.allRouters = {
saveKey: 'allRouters',
+ treeKey: 'nodeId',
data: 'pagedRouterFields',
columnDefs: [
{
@@ -156,55 +158,48 @@ var QDR = (function (QDR) {
totalServerItems: 'totalRouters',
pagingOptions: $scope.routerPagingOptions,
multiSelect: false,
- selectedItems: $scope.allRouterSelections,
- plugins: [new ngGridFlexibleHeightPlugin()],
- afterSelectionChange: function(data) {
- if (data.selected) {
- var selItem = $scope.allRouterSelections[0]
- var nodeId = selItem.nodeId
- // activate Routers->nodeId in the tree
- $("#overtree").dynatree("getTree").activateKey(nodeId);
- }
- }
+ enableSelectAll: false,
+ onRegisterApi: selectRow,
+ enableSelectionBatchEvent: false,
+ enableRowHeaderSelection: false,
+ minRowsToShow: Math.min(QDRService.management.topology.nodeIdList().length, 50),
+ noUnselect: true,
};
// get info for all routers
- var allRouterInfo = function () {
+ var allRouterInfo = function (node, callback) {
var nodes = {}
// gets called each node/entity response
var gotNode = function (nodeName, entity, response) {
if (!nodes[nodeName])
nodes[angular.copy(nodeName)] = {}
- nodes[nodeName][entity] = angular.copy(response);
+ nodes[nodeName][entity] = response;
}
// send the requests for all connection and router info for all routers
- QDRService.fetchAllEntities([{entity: ".connection", attrs: ["role"]}], function () {
- QDRService.fetchAllEntities([{entity: ".router"}], function () {
- // we have all the data now in the nodes object
- var allRouterFields = []
- for (var node in nodes) {
- var connections = 0
- for (var i=0; i<nodes[node][".connection"].results.length; ++i) {
- // we only requested "role" so it will be at [0]
- if (nodes[node][".connection"].results[i][0] === 'inter-router')
- ++connections
- }
- var routerRow = {connections: connections, nodeId: node, id: QDRService.nameFromId(node)}
- nodes[node][".router"].attributeNames.forEach( function (routerAttr, i) {
- if (routerAttr !== "routerId" && routerAttr !== "id")
- routerRow[routerAttr] = nodes[node][".router"].results[0][i]
- })
- allRouterFields.push(routerRow)
+ QDRService.management.topology.fetchAllEntities([
+ {entity: "connection", attrs: ["role"]},
+ {entity: "router"}], function () {
+ // we have all the data now in the nodes object
+ var allRouterFields = []
+ for (var node in nodes) {
+ var connections = 0
+ for (var i=0; i<nodes[node]["connection"].results.length; ++i) {
+ // we only requested "role" so it will be at [0]
+ if (nodes[node]["connection"].results[i][0] === 'inter-router')
+ ++connections
}
- $timeout(function () {
- $scope.allRouterFields = allRouterFields
- getPagedData($scope.routerPagingOptions.pageSize, $scope.routerPagingOptions.currentPage);
- updateRouterTree(nodeIds)
- scheduleNextUpdate()
- //if ($scope.router)
- // routerInfo($scope.router)
+ var routerRow = {connections: connections, nodeId: node, id: QDRService.management.topology.nameFromId(node)}
+ nodes[node]["router"].attributeNames.forEach( function (routerAttr, i) {
+ if (routerAttr !== "routerId" && routerAttr !== "id")
+ routerRow[routerAttr] = nodes[node]["router"].results[0][i]
})
- }, gotNode)
+ allRouterFields.push(routerRow)
+ }
+ $scope.allRouterFields = allRouterFields
+ expandGridToContent("Routers", $scope.allRouterFields.length)
+ getPagedData($scope.routerPagingOptions.pageSize, $scope.routerPagingOptions.currentPage);
+ updateRouterTree(nodeIds)
+ callback(null)
}, gotNode)
loadColState($scope.allRouters)
}
@@ -226,29 +221,29 @@ var QDR = (function (QDR) {
],
jqueryUIDraggable: true,
enableColumnResize: true,
+ minRowsToShow: 25,
multiSelect: false
}
$scope.router = null;
// get info for a single router
- var routerInfo = function (node) {
+ var routerInfo = function (node, callback) {
$scope.router = node
var routerFields = [];
$scope.allRouterFields.some( function (field) {
- if (field.id === node.data.title) {
+ if (field.id === node.title) {
Object.keys(field).forEach ( function (key) {
- if (key !== '$$hashKey') {
- var attr = (key === 'connections') ? 'External connections' : key
- routerFields.push({attribute: attr, value: field[key]})
- }
+ var attr = (key === 'connections') ? 'External connections' : key
+ routerFields.push({attribute: attr, value: field[key]})
})
return true
}
})
- $timeout(function () {$scope.routerFields = routerFields})
- scheduleNextUpdate()
+ $scope.routerFields = routerFields
+ expandGridToContent("Router", $scope.routerFields.length)
loadColState($scope.routerGrid);
+ callback(null)
}
$scope.addressPagingOptions = {
@@ -273,6 +268,7 @@ var QDR = (function (QDR) {
$scope.selectedAddresses = []
$scope.addressesGrid = {
saveKey: 'addressesGrid',
+ treeKey: 'uid',
data: 'pagedAddressesData',
columnDefs: [
{
@@ -320,20 +316,15 @@ var QDR = (function (QDR) {
pagingOptions: $scope.addressPagingOptions,
enableColumnResize: true,
multiSelect: false,
- jqueryUIDraggable: true,
- selectedItems: $scope.selectedAddresses,
- plugins: [new ngGridFlexibleHeightPlugin()],
- afterSelectionChange: function(data) {
- if (data.selected) {
- var selItem = data.entity;
- var nodeId = selItem.uid
- $("#overtree").dynatree("getTree").activateKey(nodeId);
- }
- }
+ enableSelectAll: false,
+ onRegisterApi: selectRow,
+ enableSelectionBatchEvent: false,
+ enableRowHeaderSelection: false,
+ noUnselect: true
};
// get info for all addresses
- var allAddressInfo = function () {
+ var allAddressInfo = function (address, callback) {
var nodes = {}
// gets called each node/entity response
var gotNode = function (nodeName, entity, response) {
@@ -362,16 +353,16 @@ var QDR = (function (QDR) {
return ''
}
var prettyVal = function (val) {
- return QDRService.pretty(val || "-")
+ return QDRService.utilities.pretty(val || "-")
}
var addressFields = []
var addressObjs = {}
// send the requests for all connection and router info for all routers
- QDRService.fetchAllEntities({entity: ".router.address"}, function () {
+ QDRService.management.topology.fetchAllEntities({entity: "router.address"}, function () {
for (var node in nodes) {
- var response = nodes[node][".router.address"]
+ var response = nodes[node]["router.address"]
response.results.forEach( function (result) {
- var address = QDRService.flatten(response.attributeNames, result)
+ var address = QDRService.utilities.flatten(response.attributeNames, result)
var addNull = function (oldVal, newVal) {
if (oldVal != null && newVal != null)
@@ -382,12 +373,12 @@ var QDR = (function (QDR) {
}
var uid = address.identity
- var identity = QDRService.identity_clean(uid)
+ var identity = QDRService.utilities.identity_clean(uid)
- if (!addressObjs[QDRService.addr_text(identity)+QDRService.addr_class(identity)])
- addressObjs[QDRService.addr_text(identity)+QDRService.addr_class(identity)] = {
- address: QDRService.addr_text(identity),
- 'class': QDRService.addr_class(identity),
+ if (!addressObjs[QDRService.utilities.addr_text(identity)+QDRService.utilities.addr_class(identity)])
+ addressObjs[QDRService.utilities.addr_text(identity)+QDRService.utilities.addr_class(identity)] = {
+ address: QDRService.utilities.addr_text(identity),
+ 'class': QDRService.utilities.addr_class(identity),
phase: addr_phase(identity),
inproc: address.inProcess,
local: address.subscriberCount,
@@ -400,7 +391,7 @@ var QDR = (function (QDR) {
uid: uid
}
else {
- var sumObj = addressObjs[QDRService.addr_text(identity)+QDRService.addr_class(identity)]
+ var sumObj = addressObjs[QDRService.utilities.addr_text(identity)+QDRService.utilities.addr_class(identity)]
sumObj.inproc = addNull(sumObj.inproc, address.inproc)
sumObj.local = addNull(sumObj.local, address.local)
sumObj.remote = addNull(sumObj.remote, address.remote)
@@ -410,22 +401,6 @@ var QDR = (function (QDR) {
sumObj.toproc = addNull(sumObj.toproc, address.toproc)
sumObj.fromproc = addNull(sumObj.fromproc, address.fromproc)
}
-/*
- addressFields.push({
- address: QDRService.addr_text(identity),
- 'class': QDRService.addr_class(identity),
- phase: addr_phase(identity),
- inproc: prettySum("inProcess"),
- local: prettySum("subscriberCount"),
- remote: prettySum("remoteCount"),
- 'in': prettySum("deliveriesIngress"),
- out: prettySum("deliveriesEgress"),
- thru: prettySum("deliveriesTransit"),
- toproc: prettySum("deliveriesToContainer"),
- fromproc:prettySum("deliveriesFromContainer"),
- uid: uid
- })
-*/
})
}
for (var obj in addressObjs) {
@@ -458,15 +433,14 @@ var QDR = (function (QDR) {
} else
addressFields[i].title = addressFields[i].address
}
- $timeout(function () {
- $scope.addressesData = addressFields
- getAddressPagedData($scope.addressPagingOptions.pageSize, $scope.addressPagingOptions.currentPage);
- // repopulate the tree's child nodes
- updateAddressTree(addressFields)
- scheduleNextUpdate()
- })
+ $scope.addressesData = addressFields
+ expandGridToContent("Addresses", $scope.addressesData.length)
+ getAddressPagedData($scope.addressPagingOptions.pageSize, $scope.addressPagingOptions.currentPage);
+ // repopulate the tree's child nodes
+ updateAddressTree(addressFields)
+ loadColState($scope.addressesGrid);
+ callback(null)
}, gotNode)
- loadColState($scope.addressesGrid);
}
var updateLinkGrid = function ( linkFields ) {
@@ -478,13 +452,14 @@ var QDR = (function (QDR) {
include = false;
}
if ($scope.filter.hideConsoles) {
- if (QDRService.isConsoleLink(link))
+ if (QDRService.utilities.isConsole(QDRService.management.topology.getConnForLink(link)))
include = false;
}
return include;
})
QDR.log.debug("setting linkFields in updateLinkGrid")
$scope.linkFields = filteredLinks;
+ expandGridToContent("Links", $scope.linkFields.length)
getLinkPagedData($scope.linkPagingOptions.pageSize, $scope.linkPagingOptions.currentPage);
// if we have a selected link
if ($scope.link) {
@@ -493,9 +468,9 @@ var QDR = (function (QDR) {
return link.name === $scope.link.data.fields.name;
})
if (links.length > 0) {
- // linkInfo() is the function that is called by dynatree when a link is selected
- // It is passed a dynatree node. We need to simulate that node type to update the link grid
- linkInfo({data: {title: links[0].title, fields: links[0]}})
+ // linkInfo() is the function that is called by fancytree when a link is selected
+ // It is passed a fancytree node. We need to simulate that node type to update the link grid
+ linkInfo({data: {title: links[0].title, fields: links[0]}}, function () {$timeout(function (){})})
}
}
}
@@ -521,15 +496,9 @@ var QDR = (function (QDR) {
$scope.pagedLinkData = []
$scope.selectedLinks = []
- var linkRowTmpl = "<div ng-class=\"{linkDirIn: row.getProperty('linkDir') == 'in', linkDirOut: row.getProperty('linkDir') == 'out'}\">" +
- "<div ng-style=\"{ 'cursor': row.cursor }\" ng-repeat=\"col in renderedColumns\" ng-class=\"col.colIndex()\" class=\"ngCell {{col.cellClass}}\">" +
- "<div class=\"ngVerticalBar\" ng-style=\"{height: rowHeight}\" ng-class=\"{ ngVerticalBarVisible: !$last }\"> </div>" +
- "<div ng-cell></div>" +
- "</div>" +
- "</div>";
-
$scope.linksGrid = {
saveKey: 'linksGrid',
+ treeKey: 'uid',
data: 'pagedLinkData',
columnDefs: [
{
@@ -604,21 +573,16 @@ var QDR = (function (QDR) {
enableColumnResize: true,
enableColumnReordering: true,
showColumnMenu: true,
- rowTemplate: linkRowTmpl,
+ rowTemplate: 'linkRowTemplate.html',
+ minRowsToShow: 15,
multiSelect: false,
- jqueryUIDraggable: true,
- selectedItems: $scope.selectedLinks,
- plugins: [new ngGridFlexibleHeightPlugin()],
- afterSelectionChange: function(data) {
- if (data.selected) {
- var selItem = data.entity;
- var nodeId = selItem.uid
- $("#overtree").dynatree("getTree").activateKey(nodeId);
- }
- }
+ enableSelectAll: false,
+ onRegisterApi: selectRow,
+ enableSelectionBatchEvent: false,
+ enableRowHeaderSelection: false,
+ noUnselect: true
};
-
$scope.$on('ngGridEventColumns', function (e, columns) {
var saveInfo = columns.map( function (col) {
return [col.width, col.visible]
@@ -643,26 +607,27 @@ return;
})
}
}
- var allLinkInfo = function () {
+ var allLinkInfo = function (node, callback) {
var gridCallback = function (linkFields) {
- QDRService.ensureAllEntities({entity: ".connection", force: true}, function () {
+ QDRService.management.topology.ensureAllEntities({entity: "connection", force: true}, function () {
// only update the grid with these fields if the List tree node is selected
// this is becuase we are using the link grid in other places and we don't want to overwrite it
if ($scope.template.name === "Links")
updateLinkGrid(linkFields)
updateLinkTree(linkFields)
+ callback(null)
})
}
- getAllLinkFields([gridCallback, scheduleNextUpdate])
+ getAllLinkFields([gridCallback])
loadColState($scope.linksGrid);
}
var getAllLinkFields = function (completionCallbacks, selectionCallback) {
if (!$scope.linkFields) {
- QDR.log.info("$scope.linkFields was not defined")
+ QDR.log.debug("$scope.linkFields was not defined!")
return;
}
- var nodeIds = QDRService.nodeIdList()
+ var nodeIds = QDRService.management.topology.nodeIdList()
var linkFields = []
var now = Date.now()
var rate = function (linkName, response, result) {
@@ -675,7 +640,7 @@ return;
var elapsed = (now - oldname[0].timestamp) / 1000;
if (elapsed < 0)
return 0
- var delivered = QDRService.valFor(response.attributeNames, result, "deliveryCount") - oldname[0].rawDeliveryCount
+ var delivered = QDRService.utilities.valFor(response.attributeNames, result, "deliveryCount") - oldname[0].rawDeliveryCount
//QDR.log.debug("elapsed " + elapsed + " delivered " + delivered)
return elapsed > 0 ? parseFloat(Math.round((delivered/elapsed) * 100) / 100).toFixed(2) : 0;
} else {
@@ -686,6 +651,7 @@ return;
var expected = nodeIds.length;
var received = 0;
var gotLinkInfo = function (nodeName, entity, response) {
+ if (response.results)
response.results.forEach( function (result) {
var nameIndex = response.attributeNames.indexOf('name')
var prettyVal = function (field) {
@@ -694,20 +660,20 @@ return;
return "-"
}
var val = result[fieldIndex]
- return QDRService.pretty(val)
+ return QDRService.utilities.pretty(val)
}
var uncounts = function () {
- var und = QDRService.valFor(response.attributeNames, result, "undeliveredCount")
- var uns = QDRService.valFor(response.attributeNames, result, "unsettledCount")
- return QDRService.pretty(und + uns)
+ var und = QDRService.utilities.valFor(response.attributeNames, result, "undeliveredCount")
+ var uns = QDRService.utilities.valFor(response.attributeNames, result, "unsettledCount")
+ return QDRService.utilities.pretty(und + uns)
}
var linkName = function () {
- var namestr = QDRService.nameFromId(nodeName)
- return namestr + ':' + QDRService.valFor(response.attributeNames, result, "identity")
+ var namestr = QDRService.management.topology.nameFromId(nodeName)
+ return namestr + ':' + QDRService.utilities.valFor(response.attributeNames, result, "identity")
}
var fixAddress = function () {
var addresses = []
- var owningAddr = QDRService.valFor(response.attributeNames, result, "owningAddr") || ""
+ var owningAddr = QDRService.utilities.valFor(response.attributeNames, result, "owningAddr") || ""
var rawAddress = owningAddr
/*
- "L*" => "* (local)"
@@ -743,12 +709,12 @@ return;
return addresses
}
if (!selectionCallback || selectionCallback(response, result)) {
- var adminStatus = QDRService.valFor(response.attributeNames, result, "adminStatus")
- var operStatus = QDRService.valFor(response.attributeNames, result, "operStatus")
+ var adminStatus = QDRService.utilities.valFor(response.attributeNames, result, "adminStatus")
+ var operStatus = QDRService.utilities.valFor(response.attributeNames, result, "operStatus")
var linkName = linkName()
- var linkType = QDRService.valFor(response.attributeNames, result, "linkType")
+ var linkType = QDRService.utilities.valFor(response.attributeNames, result, "linkType")
var addresses = fixAddress();
- var link = QDRService.flatten(response.attributeNames, result)
+ var link = QDRService.utilities.flatten(response.attributeNames, result)
linkFields.push({
link: linkName,
title: linkName,
@@ -764,7 +730,7 @@ return;
releasedCount: prettyVal("releasedCount"),
deliveryCount:prettyVal("deliveryCount") + " ",
- rate: QDRService.pretty(rate(linkName, response, result)),
+ rate: QDRService.utilities.pretty(rate(linkName, response, result)),
capacity: link.capacity,
undeliveredCount: link.undeliveredCount,
unsettledCount: link.unsettledCount,
@@ -794,7 +760,7 @@ return;
}
}
nodeIds.forEach( function (nodeId) {
- QDRService.fetchEntity(nodeId, "router.link", [], gotLinkInfo);
+ QDRService.management.topology.fetchEntity(nodeId, "router.link", [], gotLinkInfo);
})
}
@@ -820,6 +786,7 @@ return;
$scope.allConnectionSelections = [];
$scope.allConnectionGrid = {
saveKey: 'allConnGrid',
+ treeKey: 'uid',
data: 'pagedConnectionsData',
columnDefs: [
{
@@ -854,26 +821,21 @@ return;
pagingOptions: $scope.connectionPagingOptions,
enableColumnResize: true,
multiSelect: false,
- jqueryUIDraggable: true,
- selectedItems: $scope.allConnectionSelections,
- plugins: [new ngGridFlexibleHeightPlugin()],
- afterSelectionChange: function(data) {
- if (data.selected) {
- var selItem = $scope.allConnectionSelections[0]
- var nodeId = selItem.uid
- // activate Routers->nodeId in the tree
- $("#overtree").dynatree("getTree").activateKey(nodeId);
- }
- }
+ enableSelectAll: false,
+ onRegisterApi: selectRow,
+ enableSelectionBatchEvent: false,
+ enableRowHeaderSelection: false,
+ noUnselect: true
};
// get info for a all connections
- var allConnectionInfo = function () {
- getAllConnectionFields([updateConnectionGrid, updateConnectionTree, scheduleNextUpdate])
+ var allConnectionInfo = function (connection, callback) {
+ getAllConnectionFields([updateConnectionGrid, updateConnectionTree, function () {callback(null)}])
loadColState($scope.allConnectionGrid);
}
// called after conection data is available
var updateConnectionGrid = function (connectionFields) {
$scope.allConnectionFields = connectionFields;
+ expandGridToContent("Connections", $scope.allConnectionFields.length)
getConnectionPagedData($scope.connectionPagingOptions.pageSize, $scope.connectionPagingOptions.currentPage);
}
@@ -881,7 +843,7 @@ return;
// called periodically
// creates a connectionFields array and calls the callbacks (updateTree and updateGrid)
var getAllConnectionFields = function (callbacks) {
- var nodeIds = QDRService.nodeIdList()
+ var nodeIds = QDRService.management.topology.nodeIdList()
var connectionFields = [];
var expected = nodeIds.length;
var received = 0;
@@ -889,8 +851,8 @@ return;
response.results.forEach( function (result) {
var auth = "no_auth"
- var sasl = QDRService.valFor(response.attributeNames, result, "sasl")
- if (QDRService.valFor(response.attributeNames, result, "isAuthenticated")) {
+ var sasl = QDRService.utilities.valFor(response.attributeNames, result, "sasl")
+ if (QDRService.utilities.valFor(response.attributeNames, result, "isAuthenticated")) {
auth = sasl
if (sasl === "ANONYMOUS")
auth = "anonymous-user"
@@ -899,27 +861,27 @@ return;
sasl = "Kerberos"
if (sasl === "EXTERNAL")
sasl = "x.509"
- auth = QDRService.valFor(response.attributeNames, result, "user") + "(" +
- QDRService.valFor(response.attributeNames, result, "sslCipher") + ")"
+ auth = QDRService.utilities.valFor(response.attributeNames, result, "user") + "(" +
+ QDRService.utilities.valFor(response.attributeNames, result, "sslCipher") + ")"
}
}
var sec = "no-security"
- if (QDRService.valFor(response.attributeNames, result, "isEncrypted")) {
+ if (QDRService.utilities.valFor(response.attributeNames, result, "isEncrypted")) {
if (sasl === "GSSAPI")
sec = "Kerberos"
else
- sec = QDRService.valFor(response.attributeNames, result, "sslProto") + "(" +
- QDRService.valFor(response.attributeNames, result, "sslCipher") + ")"
+ sec = QDRService.utilities.valFor(response.attributeNames, result, "sslProto") + "(" +
+ QDRService.utilities.valFor(response.attributeNames, result, "sslCipher") + ")"
}
- var host = QDRService.valFor(response.attributeNames, result, "host")
+ var host = QDRService.utilities.valFor(response.attributeNames, result, "host")
var connField = {
host: host,
security: sec,
authentication: auth,
routerId: nodeName,
- uid: host + QDRService.valFor(response.attributeNames, result, "identity")
+ uid: host + QDRService.utilities.valFor(response.attributeNames, result, "identity")
}
response.attributeNames.forEach( function (attribute, i) {
connField[attribute] = result[i]
@@ -934,7 +896,7 @@ return;
}
}
nodeIds.forEach( function (nodeId) {
- QDRService.fetchEntity(nodeId, ".connection", [], gotConnectionInfo)
+ QDRService.management.topology.fetchEntity(nodeId, "connection", [], gotConnectionInfo)
})
}
@@ -956,18 +918,19 @@ return;
}
],
enableColumnResize: true,
+ minRowsToShow: 11,
jqueryUIDraggable: true,
multiSelect: false
}
// get info for a single address
- var addressInfo = function (address) {
+ var addressInfo = function (address, callback) {
$scope.address = address
var currentEntity = getCurrentLinksEntity();
// we are viewing the addressLinks page
if (currentEntity === 'Address' && entityModes[currentEntity].currentModeId === 'links') {
updateModeLinks()
- scheduleNextUpdate()
+ callback(null)
return;
}
@@ -977,7 +940,8 @@ return;
if (field != "title" && field != "uid")
$scope.addressFields.push({attribute: field, value: address.data.fields[field]})
})
- scheduleNextUpdate()
+ expandGridToContent("Address", $scope.addressFields.length)
+ callback(null)
loadColState($scope.addressGrid);
}
@@ -998,14 +962,15 @@ return;
}
],
enableColumnResize: true,
+ minRowsToShow: 24,
jqueryUIDraggable: true,
multiSelect: false
}
// display the grid detail info for a single link
- var linkInfo = function (link) {
-QDR.log.debug("linkInfo called for " + link.data.key)
+ var linkInfo = function (link, callback) {
if (!link) {
+ callback(null)
return;
}
$scope.link = link
@@ -1017,7 +982,8 @@ QDR.log.debug("linkInfo called for " + link.data.key)
if (excludeFields.indexOf(field) == -1)
$scope.singleLinkFields.push({attribute: field, value: link.data.fields[field]})
})
- scheduleNextUpdate()
+ expandGridToContent("Link", $scope.singleLinkFields.length)
+ callback(null)
loadColState($scope.linkGrid);
}
@@ -1042,34 +1008,34 @@ QDR.log.debug("linkInfo called for " + link.data.key)
{Address: 'attributes', Connection: 'attributes'}
}
var savedModeIds = loadModeIds()
- var entityModes = {
- Address: {
- currentModeId: savedModeIds.Address,
- filter: function (response, result) {
- var owningAddr = QDRService.valFor(response.attributeNames, result, "owningAddr")
+ var entityModes = {
+ Address: {
+ currentModeId: savedModeIds.Address,
+ filter: function (response, result) {
+ var owningAddr = QDRService.utilities.valFor(response.attributeNames, result, "owningAddr")
var id = $scope.address.data.fields.uid
return (owningAddr === $scope.address.data.fields.uid)
- }
- },
- Connection: {
- currentModeId: savedModeIds.Connection,
- filter: function (response, result) {
- var connectionId = QDRService.valFor(response.attributeNames, result, "connectionId")
+ }
+ },
+ Connection: {
+ currentModeId: savedModeIds.Connection,
+ filter: function (response, result) {
+ var connectionId = QDRService.utilities.valFor(response.attributeNames, result, "connectionId")
return (connectionId === $scope.connection.data.fields.identity)
- }
- }
+ }
}
+ }
$scope.selectMode = function (mode, entity) {
if (!mode || !entity)
return;
entityModes[entity].currentModeId = mode.id;
saveModeIds();
if (mode.id === 'links') {
-QDR.log.debug("setting linkFields to [] in selectMode")
$scope.linkFields = [];
getLinkPagedData($scope.linkPagingOptions.pageSize, $scope.linkPagingOptions.currentPage);
updateModeLinks();
}
+ updateExpanded()
}
$scope.isModeSelected = function (mode, entity) {
return mode.id === entityModes[entity].currentModeId
@@ -1079,23 +1045,20 @@ QDR.log.debug("setting linkFields to [] in selectMode")
}
var updateEntityLinkGrid = function (linkFields) {
- $timeout(function () {
- QDR.log.debug("setting linkFields in updateEntityLinkGrid");
- $scope.linkFields = linkFields
- getLinkPagedData($scope.linkPagingOptions.pageSize, $scope.linkPagingOptions.currentPage);
- })
+ $scope.linkFields = linkFields
+ expandGridToContent("Link", $scope.linkFields.length)
+ getLinkPagedData($scope.linkPagingOptions.pageSize, $scope.linkPagingOptions.currentPage);
}
// based on which entity is selected, get and filter the links
var updateModeLinks = function () {
var currentEntity = getCurrentLinksEntity()
if (!currentEntity)
return;
- var selectionCallback = entityModes[currentEntity].filter;
- getAllLinkFields([updateEntityLinkGrid], selectionCallback)
+ getAllLinkFields([updateEntityLinkGrid], entityModes[currentEntity].filter)
}
var getCurrentLinksEntity = function () {
var currentEntity;
- var active = $("#overtree").dynatree("getActiveNode");
+ var active = $("#overtree").fancytree("getActiveNode");
if (active) {
currentEntity = active.data.type;
}
@@ -1111,8 +1074,15 @@ QDR.log.debug("setting linkFields to [] in selectMode")
}
$scope.quiesceLink = function (row, $event) {
- QDRService.quiesceLink(row.entity.nodeId, row.entity.name);
$event.stopPropagation()
+ QDRService.management.topology.quiesceLink(row.entity.nodeId, row.entity.name)
+ .then( function (results, context) {
+ var statusCode = context.message.application_properties.statusCode;
+ if (statusCode < 200 || statusCode >= 300) {
+ Core.notification('error', context.message.statusDescription);
+ QDR.log.error('Error ' + context.message.statusDescription)
+ }
+ })
}
$scope.quiesceLinkDisabled = function (row) {
@@ -1123,12 +1093,12 @@ QDR.log.debug("setting linkFields to [] in selectMode")
}
$scope.expandAll = function () {
- $("#overtree").dynatree("getRoot").visit(function(node){
+ $("#overtree").fancytree("getRoot").visit(function(node){
node.expand(true);
});
}
$scope.contractAll = function () {
- $("#overtree").dynatree("getRoot").visit(function(node){
+ $("#overtree").fancytree("getRoot").visit(function(node){
node.expand(false);
})
}
@@ -1150,20 +1120,23 @@ QDR.log.debug("setting linkFields to [] in selectMode")
}
],
enableColumnResize: true,
+ minRowsToShow: 21,
jqueryUIDraggable: true,
multiSelect: false
}
- var connectionInfo = function (connection) {
- if (!connection)
+ var connectionInfo = function (connection, callback) {
+ if (!connection) {
+ callback(null)
return;
+ }
$scope.connection = connection
var currentEntity = getCurrentLinksEntity();
// we are viewing the connectionLinks page
if (currentEntity === 'Connection' && entityModes[currentEntity].currentModeId === 'links') {
updateModeLinks()
- scheduleNextUpdate()
+ callback(null)
return;
}
@@ -1173,12 +1146,16 @@ QDR.log.debug("setting linkFields to [] in selectMode")
if (field != "title" && field != "uid")
$scope.connectionFields.push({attribute: field, value: connection.data.fields[field]})
})
+ expandGridToContent("Connection", $scope.connectionFields.length)
// this is missing an argument?
loadColState($scope.connectionGrid);
+ callback(null)
}
- var logModuleCellTemplate = '<div ng-click="logInfoFor(row, col)" class="ngCellText" ng-class="col.colIndex()"><span ng-cell-text>{{COL_FIELD | pretty}}</span></div>'
+ //var logModuleCellTemplate = '<div ng-click="logInfoFor(row, col)" class="ui-grid-cell-contents">{{grid.getCellValue(row, col) | pretty}}</div>'
+ var logModuleCellTemplate = '<div class="ui-grid-cell-contents" ng-click="grid.appScope.logInfoFor(row, col)">{{COL_FIELD CUSTOM_FILTERS | pretty}}</div>'
+
$scope.logModule = {}
$scope.logModuleSelected = []
$scope.logModuleData = []
@@ -1239,15 +1216,12 @@ QDR.log.debug("setting linkFields to [] in selectMode")
enableColumnResize: true,
jqueryUIDraggable: true,
multiSelect: false,
- selectedItems: $scope.logModuleSelected,
- plugins: [new ngGridFlexibleHeightPlugin()],
- afterSelectionChange: function(data) {
- if (data.selected) {
- var selItem = $scope.logModuleSelected[0]
- var nodeId = selItem.nodeId
-
- }
- }
+ enableSelectAll: false,
+ onRegisterApi: selectRow,
+ enableSelectionBatchEvent: false,
+ enableRowHeaderSelection: false,
+ minRowsToShow: Math.min(QDRService.management.topology.nodeIdList().length, 50),
+ noUnselect: true
}
$scope.logInfoFor = function (row, col) {
@@ -1274,11 +1248,10 @@ QDR.log.debug("setting linkFields to [] in selectMode")
},
}
});
-
d.result.then(function (result) {
- console.log("d.open().then");
+ QDR.log.debug("d.open().then");
}, function () {
- console.log('Modal dismissed at: ' + new Date());
+ QDR.log.debug('Modal dismissed at: ' + new Date());
});
};
@@ -1287,6 +1260,7 @@ QDR.log.debug("setting linkFields to [] in selectMode")
$scope.allLogSelections = [];
$scope.allLogGrid = {
saveKey: 'allLogGrid',
+ treeKey: 'name',
data: 'allLogFields',
columnDefs: [
{
@@ -1294,12 +1268,6 @@ QDR.log.debug("setting linkFields to [] in selectMode")
saveKey: 'allLogGrid',
displayName: 'Module'
},
-/* {
- field: 'enable',
- displayName: 'Enable'
- },
-*/
-
{
field: 'noticeCount',
displayName: 'Notice',
@@ -1345,24 +1313,17 @@ QDR.log.debug("setting linkFields to [] in selectMode")
],
//enableCellSelection: true,
enableColumnResize: true,
- jqueryUIDraggable: true,
+ minRowsToShow: 17,
multiSelect: false,
- selectedItems: $scope.allLogSelections,
- plugins: [new ngGridFlexibleHeightPlugin()],
-
- afterSelectionChange: function(data) {
- if (data.selected) {
- var selItem = $scope.allLogSelections[0]
- var nodeId = selItem.name
- // activate in the tree
- $("#overtree").dynatree("getTree").activateKey(nodeId);
- }
- }
-
+ enableSelectAll: false,
+ onRegisterApi: selectRow,
+ enableSelectionBatchEvent: false,
+ enableRowHeaderSelection: false,
+ noUnselect: true
};
var allLogEntries = {}
- var allLogInfo = function () {
+ var allLogInfo = function (log, callback) {
// update the count of entries for each module
$scope.allLogFields = []
var logResults = {}
@@ -1371,7 +1332,7 @@ QDR.log.debug("setting linkFields to [] in selectMode")
var gotLogStats = function (node, entity, response) {
logDetails[node] = []
response.results.forEach( function (result) {
- var oresult = QDRService.flatten(response.attributeNames, result)
+ var oresult = QDRService.utilities.flatten(response.attributeNames, result)
// make a copy for the details grid since logResults has the same object reference
logDetails[node].push(angular.copy(oresult))
if (!(oresult.name in logResults)) {
@@ -1392,117 +1353,54 @@ QDR.log.debug("setting linkFields to [] in selectMode")
sortedModules.forEach( function (module) {
$scope.allLogFields.push(logResults[module])
})
+ expandGridToContent("Logs", $scope.allLogFields.length)
allLogEntries = logDetails
updateLogTree($scope.allLogFields)
+ callback(null)
}
- QDRService.fetchAllEntities({entity: 'logStats'}, gotAllLogStats, gotLogStats)
-/*
- var q = QDR.queue(1)
+ QDRService.management.topology.fetchAllEntities({entity: 'logStats'}, gotAllLogStats, gotLogStats)
+ }
- var queuedSendMethod = function (node, callback) {
- var gotLogInfo = function (nodeId, entity, response, context) {
- var statusCode = context.message.application_properties.statusCode;
- if (statusCode < 200 || statusCode >= 300) {
- callback("getLog failed with statusCode of " + statusCode)
- } else {
- var logFields = response.map( function (result) {
- return {
- nodeId: QDRService.nameFromId(nodeId),
- name: result[0],
- type: result[1],
- message: result[2],
- source: result[3],
- line: result[4],
- time: Date(result[5]).toString()
- }
- })
- logResults.push.apply(logResults, logFields) // append new array to existing
- callback(null)
- }
- }
- QDRService.sendMethod(node, undefined, {}, "GET-LOG", {}, gotLogInfo)
+ var expandGridToContent = function (type, rows) {
+ var tree = $("#overtree").fancytree("getTree")
+ var node = tree.getActiveNode()
+ if (node) {
+ if (node.data.type === type) {
+ var height = (rows+1) * 30 + 40 // header is 40px
+ var gridDetails = $('#overview-controller .grid')
+ gridDetails.css('height', height + "px")
}
- for (var i=0; i<nodeIds.length; ++i) {
- q.defer(queuedSendMethod, nodeIds[i])
- }
- q.await(function (error) {
- if (!error) {
- logResults.sort( function (a, b) {return b.name - a.name})
- var allLogFields = $scope.allLogFields
- $scope.allLogFields = [];
- for (var i=0; i<allLogFields.length; ++i) {
- $scope.allLogFields.push({module: allLogFields[i].module,
- count: logResults.filter( function (entry) {
- return entry.name === allLogFields[i].module
- }).length
- })
- }
- $timeout(function () {allLogEntries = logResults; scheduleNextUpdate()})
- }
- })
}
- if ($scope.allLogFields.length == 0) {
- QDRService.fetchEntity(nodeIds[0], "logStats", [], function (nodeName, entity, response) {
- var moduleIndex = response.attributeNames.indexOf("name")
- response.results.sort( function (a,b) {return a[moduleIndex] < b[moduleIndex] ? -1 : a[moduleIndex] > b[moduleIndex] ? 1 : 0})
- response.results.forEach( function (result) {
- var log = QDRService.flatten(response.attributeNames, result)
- $scope.allLogFields.push(log)
- })
- updateLogTree($scope.allLogFields)
- haveLogFields()
- })
- } else {
- haveLogFields()
- }
- */
}
$scope.logFields = []
// get info for a single log
- var logInfo = function (node) {
+ var logInfo = function (node, callback) {
var gotLogInfo = function (responses) {
- $timeout(function () {
- $scope.logModuleData = []
- $scope.logModule.module = node.data.key
- for (var n in responses) {
- var moduleIndex = responses[n]['log'].attributeNames.indexOf("module")
- var result = responses[n]['log'].results.filter( function (r) {
- return r[moduleIndex] === node.data.key
- })[0]
- var logInfo = QDRService.flatten(responses[n]['log'].attributeNames, result)
- var entry = allLogEntries[n]
- entry.forEach( function (module) {
- if (module.name === node.data.key) {
- module.nodeName = QDRService.nameFromId(n)
- module.nodeId = n
- module.enable = logInfo.enable
- $scope.logModuleData.push(module)
- }
- })
- }
- $scope.logModuleData.sort ( function (a,b) { return a.nodeName < b.nodeName? -1 : a.nodeName> b.nodeName? 1 : 0})
- scheduleNextUpdate()
- })
- }
- QDRService.fetchAllEntities({entity: 'log', attrs: ['module', 'enable']}, gotLogInfo)
-/*
- $timeout(function () {
- $scope.log = node
- $scope.logFields = []
- for (var n in allLogEntries) {
- var entry = allLogEntries[n]
- entry.forEach( function (module) {
- if (module.name === node.data.key) {
- module.nodeId = n
- $scope.logFields.push(module)
- }
- })
+ $scope.logModuleData = []
+ $scope.logModule.module = node.key
+ for (var n in responses) {
+ var moduleIndex = responses[n]['log'].attributeNames.indexOf("module")
+ var result = responses[n]['log'].results.filter( function (r) {
+ return r[moduleIndex] === node.key
+ })[0]
+ var logInfo = QDRService.utilities.flatten(responses[n]['log'].attributeNames, result)
+ var entry = allLogEntries[n]
+ entry.forEach( function (module) {
+ if (module.name === node.key) {
+ module.nodeName = QDRService.management.topology.nameFromId(n)
+ module.nodeId = n
+ module.enable = logInfo.enable
+ $scope.logModuleData.push(module)
+ }
+ })
+ }
+ $scope.logModuleData.sort ( function (a,b) { return a.nodeName < b.nodeName? -1 : a.nodeName> b.nodeName? 1 : 0})
+ expandGridToContent("Log", $scope.logModuleData.length)
+ callback(null)
}
- scheduleNextUpdate()
- })
-*/
+ QDRService.management.topology.fetchAllEntities({entity: 'log', attrs: ['module', 'enable']}, gotLogInfo)
}
var getExpandedList = function () {
@@ -1512,7 +1410,7 @@ QDR.log.debug("setting linkFields to [] in selectMode")
if (treeRoot.visit) {
treeRoot.visit(function(node){
if (node.isExpanded()) {
- list.push(node.data.parent)
+ list.push(node.data.parentKey)
}
});
}
@@ -1545,148 +1443,158 @@ QDR.log.debug("setting linkFields to [] in selectMode")
var template = $scope.templates.filter( function (tpl) {
return tpl.name == type;
})
- $scope.template = template[0];
+ $timeout( function () {
+ $scope.template = template[0];
+ })
}
$scope.template = $scope.templates[0]
// activated is called each time a tree node is clicked
// based on which node is clicked, load the correct data grid template and start getting the data
- var activated = function (node) {
- QDR.log.debug("node activated: " + node.data.title)
+ var onTreeNodeActivated = function (event, data) {
saveExpanded()
- saveActivated(node.data.key)
-
- setTemplate(node)
- // the nodes info function will fetch the grids data
- if (node.data.info) {
- $timeout(function () {
- if (node.data.key === node.data.parent) {
- node.data.info()
- }
- else {
- node.data.info(node)
- }
- })
- }
+ saveActivated(data.node.key)
+ $scope.ActivatedKey = data.node.key
+ setTemplate(data.node)
+ updateExpanded()
}
- var treeNodeExpanded = function (node) {
+ var onTreeNodeExpanded = function (event, data) {
saveExpanded()
- tick()
+ updateExpanded()
}
- $scope.template = {url: ''};
- if (!QDRService.connected) {
- QDRService.redirectWhenConnected("overview")
+ if (!QDRService.management.connection.is_connected()) {
+ QDR.redirectWhenConnected($location, "overview")
return;
}
- // we are currently connected. setup a handler to get notified if we are ever disconnected
- var onDisconnect = function () {
-QDR.log.info("we were just disconnected while on the overview page. Setting org to redirect back once we are connected again")
- $timeout(function () {
- QDRService.redirectWhenConnected("overview")
- })
- }
- QDRService.addDisconnectAction( onDisconnect )
-
/* --------------------------------------------------
*
* setup the tree on the left
*
* -------------------------------------------------
*/
+ var getActiveChild = function (node) {
+ var active = node.children.filter(function (child) {
+ return child.isActive()
+ })
+ if (active.length > 0)
+ return active[0].key
+ return null
+ }
// utility function called by each top level tree node when it needs to populate its child nodes
- var updateLeaves = function (leaves, parentKey, parentFolder, worker) {
- var scrollTree = $('.qdr-overview.pane.left .pane-viewport')
- var scrollTop = scrollTree.scrollTop();
- var tree = $("#overtree").dynatree("getTree")
- var parentNode = tree.getNodeByKey(parentKey);
- parentNode.removeChildren();
-
+ var updateLeaves = function (leaves, entity, worker) {
+ var tree = $("#overtree").fancytree("getTree"), node;
+ if (tree) {
+ node = tree.getNodeByKey(entity)
+ }
+ if (!tree || !node) {
+ return
+ }
+ var wasActive = node.isActive()
+ var wasExpanded = node.isExpanded()
+ var activeChildKey = getActiveChild(node)
+ node.removeChildren()
+ var children = []
leaves.forEach( function (leaf) {
- parentNode.addChild(worker(leaf))
+ children.push(worker(leaf))
})
- scrollTree.scrollTop(scrollTop)
- if (firstTime) {
- var newActive = tree.getActiveNode();
- if (newActive &&
-// newActive.data.key === lastKey &&
- newActive.data.key !== newActive.data.parent && // this is a leaf node
- newActive.data.parent === parentKey) { // the active node was just created
- firstTime = false
-QDR.log.debug("newly created node needs to be activated")
- activated(newActive)
+ node.addNode(children)
+ // top level node was expanded
+ if (wasExpanded)
+ node.setExpanded(true, {noAnimation: true, noEvents: true})
+ if (wasActive) {
+ node.setActive(true, {noAnimation: true, noEvents: true})
+ } else {
+ // re-active the previously active child node
+ if (activeChildKey) {
+ var newNode = tree.getNodeByKey(activeChildKey)
+ // the node may not be there after the update
+ if (newNode)
+ newNode.setActive(true, {noAnimation: true, noEvents: true}) // fires the onTreeNodeActivated event for this node
}
}
- }
+ resizer()
+ }
+
+ var resizer = function () {
+ // this forces the tree and the grid to be the size of the browser window.
+ // the effect is that the tree and the grid will have vertical scroll bars if needed.
+ // the alternative is to let the tree and grid determine the size of the page and have
+ // the scroll bar on the window
+ var viewport = $('#overview-controller .pane-viewport')
+ viewport.height( window.innerHeight - viewport.offset().top)
+
+ // remove the comments to allow the tree to take all the height it needs
+/*
+ var gridDetails = $('#overview-controller .grid')
+ gridDetails.height( window.innerHeight - gridDetails.offset().top)
+
+ var gridViewport = $('#overview-controller .ui-grid-viewport')
+ gridViewport.height( window.innerHeight - gridViewport.offset().top )
+*/
+ }
+ $(window).resize(resizer);
// get saved tree state
- var lastKey = loadActivatedNode();
+ $scope.ActivatedKey = loadActivatedNode();
var expandedNodeList = loadExpandedNodeList();
var firstTime = true;
// create a routers tree branch
var routers = new Folder("Routers")
routers.type = "Routers"
- routers.info = allRouterInfo
- routers.activate = lastKey === 'Routers'
- routers.expand = (expandedNodeList.indexOf("Routers") > -1)
- routers.clickFolderMode = 1
+ routers.info = {fn: allRouterInfo}
+ routers.expanded = (expandedNodeList.indexOf("Routers") > -1)
routers.key = "Routers"
- routers.parent = "Routers"
- routers.addClass = "routers"
- routers.isFolder = true
+ routers.parentKey= "Routers"
+ routers.extraClasses = "routers"
topLevelChildren.push(routers)
// called when the list of routers changes
var updateRouterTree = function (nodes) {
var worker = function (node) {
- var name = QDRService.nameFromId(node)
- var router = new Folder(name)
+ var name = QDRService.management.topology.nameFromId(node)
+ var router = new Leaf(name)
router.type = "Router"
- router.info = routerInfo
+ router.info = {fn: routerInfo}
router.nodeId = node
router.key = node
- router.addClass = "router"
- router.parent = "Routers"
- router.activate = lastKey === node
+ router.extraClasses = "router"
+ router.parentKey = "Routers"
return router;
}
- $timeout(function () {updateLeaves(nodes, "Routers", routers, worker)})
+ updateLeaves(nodes, "Routers", worker)
}
// create an addresses tree branch
var addresses = new Folder("Addresses")
addresses.type = "Addresses"
- addresses.info = allAddressInfo
- addresses.activate = lastKey === 'Addresses'
- addresses.expand = (expandedNodeList.indexOf("Addresses") > -1)
- addresses.clickFolderMode = 1
+ addresses.info = {fn: allAddressInfo}
+ addresses.expanded = (expandedNodeList.indexOf("Addresses") > -1)
addresses.key = "Addresses"
- addresses.parent = "Addresses"
- addresses.addClass = "addresses"
- addresses.isFolder = true
+ addresses.parentKey = "Addresses"
+ addresses.extraClasses = "addresses"
topLevelChildren.push(addresses)
var updateAddressTree = function (addressFields) {
var worker = function (address) {
- var a = new Folder(address.title)
- a.info = addressInfo
+ var a = new Leaf(address.title)
+ a.info = {fn: addressInfo}
a.key = address.uid
a.fields = address
a.type = "Address"
a.tooltip = address['class'] + " address"
if (address.address === '$management')
a.tooltip = "internal " + a.tooltip
- a.addClass = a.tooltip
- a.activate = lastKey === address.uid
- a.parent = "Addresses"
+ a.extraClasses = a.tooltip
+ a.parentKey = "Addresses"
return a;
}
- $timeout(function () {updateLeaves(addressFields, "Addresses", addresses, worker)})
+ updateLeaves(addressFields, "Addresses", worker)
}
$scope.$watch("filter", function (newValue, oldValue) {
if (newValue !== oldValue) {
- $timeout(allLinkInfo);
+ allLinkInfo(null, function () {$timeout(function (){})})
localStorage[FILTERKEY] = JSON.stringify($scope.filter)
}
}, true)
@@ -1699,97 +1607,101 @@ QDR.log.debug("newly created node needs to be activated")
$scope.filter = angular.fromJson(localStorage[FILTERKEY]) || {endpointsOnly: "true", hideConsoles: true};
var links = new Folder("Links")
links.type = "Links"
- links.info = allLinkInfo
- links.activate = lastKey === 'Links'
- links.expand = (expandedNodeList.indexOf("Links") > -1)
- links.clickFolderMode = 1
+ links.info = {fn: allLinkInfo}
+ links.expanded = (expandedNodeList.indexOf("Links") > -1)
links.key = "Links"
- links.parent = "Links"
- links.addClass = "links"
- links.isFolder = true
+ links.parentKey = "Links"
+ links.extraClasses = "links"
topLevelChildren.push(links)
// called both before the tree is created and whenever a background update is done
var updateLinkTree = function (linkFields) {
var worker = function (link) {
- var l = new Folder(link.title)
- var isConsole = QDRService.isConsoleLink(link)
- l.info = linkInfo
+ var l = new Leaf(link.title)
+ var isConsole = QDRService.utilities.isConsole(QDRService.management.topology.getConnForLink(link))
+ l.info = {fn: linkInfo}
l.key = link.uid
l.fields = link
l.type = "Link"
- l.parent = "Links"
- l.activate = lastKey === link.uid
+ l.parentKey = "Links"
if (isConsole)
l.tooltip = "console link"
else
l.tooltip = link.linkType + " link"
- l.addClass = l.tooltip
+ l.extraClasses = l.tooltip
return l;
}
- $timeout(function () {updateLeaves(linkFields, "Links", links, worker)})
+ updateLeaves(linkFields, "Links", worker)
}
var connections = new Folder("Connections")
connections.type = "Connections"
- connections.info = allConnectionInfo
- connections.activate = lastKey === 'Connections'
- connections.expand = (expandedNodeList.indexOf("Connections") > -1)
- connections.clickFolderMode = 1
+ connections.info = {fn: allConnectionInfo}
+ connections.expanded = (expandedNodeList.indexOf("Connections") > -1)
connections.key = "Connections"
- connections.parent = "Connections"
- connections.addClass = "connections"
- connections.isFolder = true
+ connections.parentKey = "Connections"
+ connections.extraClasses = "connections"
topLevelChildren.push(connections)
updateConnectionTree = function (connectionFields) {
var worker = function (connection) {
- var c = new Folder(connection.host)
- var isConsole = QDRService.isAConsole (connection.properties, connection.identity, connection.role, connection.routerId)
+ var c = new Leaf(connection.host)
+ var isConsole = QDRService.utilities.isAConsole (connection.properties, connection.identity, connection.role, connection.routerId)
c.type = "Connection"
- c.info = connectionInfo
+ c.info = {fn: connectionInfo}
c.key = connection.uid
c.fields = connection
if (isConsole)
c.tooltip = "console connection"
else
c.tooltip = connection.role === "inter-router" ? "inter-router connection" : "external connection"
- c.addClass = c.tooltip
- c.parent = "Connections"
- c.activate = lastKey === connection.uid
+ c.extraClasses = c.tooltip
+ c.parentKey = "Connections"
return c
}
- $timeout(function () {updateLeaves(connectionFields, "Connections", connections, worker)})
+ updateLeaves(connectionFields, "Connections", worker)
}
var updateLogTree = function (logFields) {
var worker = function (log) {
- var l = new Folder(log.name)
+ var l = new Leaf(log.name)
l.type = "Log"
- l.info = logInfo
+ l.info = {fn: logInfo}
l.key = log.name
- l.parent = "Logs"
- l.activate = lastKey === l.key
- l.addClass = "log"
+ l.parentKey = "Logs"
+ l.extraClasses = "log"
return l
}
- $timeout(function () {updateLeaves(logFields, "Logs", logs, worker)})
+ updateLeaves(logFields, "Logs", worker)
}
var htmlReady = false;
var dataReady = false;
- $scope.largeNetwork = QDRService.isLargeNetwork()
+ $scope.largeNetwork = QDRService.management.topology.isLargeNetwork()
var logs = new Folder("Logs")
logs.type = "Logs"
- logs.info = allLogInfo
- logs.activate = lastKey === 'Logs'
- logs.expand = (expandedNodeList.indexOf("Logs") > -1)
- logs.clickFolderMode = 1
+ logs.info = {fn: allLogInfo}
+ logs.expanded = (expandedNodeList.indexOf("Logs") > -1)
logs.key = "Logs"
- logs.parent = "Logs"
- logs.isFolder = true
- if (QDRService.versionCheck('0.8.0'))
+ logs.parentKey = "Logs"
+ if (QDRService.management.connection.versionCheck('0.8.0'))
topLevelChildren.push(logs)
+
+ var onTreeInitialized = function (event, data) {
+ treeRoot = data.tree
+ loadColState($scope.allRouters);
+ loadColState($scope.routerGrid);
+ loadColState($scope.addressesGrid);
+ loadColState($scope.addressGrid);
+ loadColState($scope.linksGrid);
+ loadColState($scope.linkGrid);
+ loadColState($scope.allConnectionGrid);
+ loadColState($scope.connectionGrid);
+ var activeNode = treeRoot.getNodeByKey($scope.ActivatedKey)
+ if (activeNode)
+ activeNode.setActive(true)
+ updateExpanded()
+ }
var initTreeAndGrid = function () {
if (!htmlReady || !dataReady)
return;
@@ -1798,29 +1710,15 @@ QDR.log.debug("newly created node needs to be activated")
setTimeout(initTreeAndGrid, 100);
return;
}
- $('#overtree').dynatree({
- onActivate: activated,
- onExpand: treeNodeExpanded,
+ $('#overtree').fancytree({
+ activate: onTreeNodeActivated,
+ expand: onTreeNodeExpanded,
+ init: onTreeInitialized,
autoCollapse: $scope.largeNetwork,
activeVisible: !$scope.largeNetwork,
- selectMode: 1,
- debugLevel: 0,
- classNames: {
- expander: 'fa-angle',
- connector: 'dynatree-no-connector'
- },
- children: topLevelChildren
+ clickFolderMode: 1,
+ source: topLevelChildren
})
- treeRoot = $("#overtree").dynatree("getRoot");
- tick()
- loadColState($scope.allRouters);
- loadColState($scope.routerGrid);
- loadColState($scope.addressesGrid);
- loadColState($scope.addressGrid);
- loadColState($scope.linksGrid);
- loadColState($scope.linkGrid);
- loadColState($scope.allConnectionGrid);
- loadColState($scope.connectionGrid);
}
$scope.overviewLoaded = function () {
@@ -1828,51 +1726,57 @@ QDR.log.debug("newly created node needs to be activated")
initTreeAndGrid();
}
- var nodeIds = QDRService.nodeIdList()
- //updateRouterTree(nodeIds);
+ var nodeIds = QDRService.management.topology.nodeIdList()
// add placeholders for the top level tree nodes
var topLevelTreeNodes = [routers, addresses, links, connections, logs]
topLevelTreeNodes.forEach( function (parent) {
- var placeHolder = new Folder("loading...")
- placeHolder.addClass = "loading"
+ var placeHolder = new Leaf("loading...")
+ placeHolder.extraClasses = "loading"
parent.children = [placeHolder]
})
- var singleQ = null
var updateExpanded = function () {
- if (!treeRoot)
- return;
- if (treeRoot.visit) {
- treeRoot.visit(function(node){
- if (node.isActive())
- setTemplate(node)
+ QDR.log.debug("updateExpandedEntities")
+ clearTimeout(updateIntervalHandle)
+
+ var tree = $("#overtree").fancytree("getTree");
+ if (tree && tree.visit) {
+ var q = d3.queue(10)
+ tree.visit( function (node) {
if (node.isActive() || node.isExpanded()) {
- if (node.data.key === node.data.parent) {
- node.data.info()
- }
- else {
- node.data.info(node)
+ q.defer(node.data.info.fn, node)
+ }
+ })
+ q.await( function (error) {
+ if (error)
+ QDR.log.error(error.message)
+
+ // if there are no active nodes, activate the saved one
+ var tree = $("#overtree").fancytree("getTree")
+ if (!tree.getActiveNode()) {
+ var active = tree.getNodeByKey($scope.ActivatedKey)
+ if (active) {
+ active.setActive(true)
+ } else {
+ tree.getNodeByKey("Routers").setActive(true)
}
}
+
+ // fancytree animations sometimes stop short of shrinking its placeholder spans
+ d3.selectAll('.ui-effects-placeholder').style('height', '0px')
+ // once all expanded tree nodes have been update, schedule another update
+ $timeout(function () {
+ updateIntervalHandle = setTimeout(updateExpanded, updateInterval)
+ })
})
}
}
- var tickTimer;
- var scheduleNextUpdate = function () {
- clearTimeout(tickTimer)
- tickTimer = setTimeout(tick, refreshInterval)
- }
- var tick = function () {
- clearTimeout(tickTimer)
- updateExpanded();
- }
dataReady = true;
initTreeAndGrid();
$scope.$on("$destroy", function( event ) {
- clearTimeout(tickTimer)
- QDRService.delDisconnectAction( onDisconnect )
- //QDRService.stopUpdating()
+ clearTimeout(updateIntervalHandle)
+ $(window).off("resize", resizer);
});
}]);
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/plugin/js/qdrOverviewLogsController.js
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/js/qdrOverviewLogsController.js b/console/stand-alone/plugin/js/qdrOverviewLogsController.js
index 0bda9e9..103e39e 100644
--- a/console/stand-alone/plugin/js/qdrOverviewLogsController.js
+++ b/console/stand-alone/plugin/js/qdrOverviewLogsController.js
@@ -23,7 +23,7 @@ var QDR = (function(QDR) {
QDR.module.controller('QDR.OverviewLogsController', function ($scope, $uibModalInstance, QDRService, $timeout, nodeName, nodeId, module, level) {
- var gotLogInfo = function (nodeId, entity, response, context) {
+ var gotLogInfo = function (nodeId, response, context) {
var statusCode = context.message.application_properties.statusCode;
if (statusCode < 200 || statusCode >= 300) {
Core.notification('error', context.message.statusDescription);
@@ -36,7 +36,7 @@ var QDR = (function(QDR) {
})
var logFields = levelLogs.map( function (result) {
return {
- nodeId: QDRService.nameFromId(nodeId),
+ nodeId: QDRService.management.topology.nameFromId(nodeId),
name: result[0],
type: result[1],
message: result[2],
@@ -51,7 +51,8 @@ var QDR = (function(QDR) {
})
}
}
- QDRService.sendMethod(nodeId, undefined, {}, "GET-LOG", {module: module}, gotLogInfo)
+ QDRService.management.connection.sendMethod(nodeId, undefined, {}, "GET-LOG", {module: module})
+ .then( function (response) {gotLogInfo(nodeId, response.response, response.context)})
$scope.loading = true
$scope.module = module
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/plugin/js/qdrSchema.js
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/js/qdrSchema.js b/console/stand-alone/plugin/js/qdrSchema.js
index 7365d5a..89c5e9d 100644
--- a/console/stand-alone/plugin/js/qdrSchema.js
+++ b/console/stand-alone/plugin/js/qdrSchema.js
@@ -22,15 +22,15 @@ under the License.
var QDR = (function (QDR) {
QDR.module.controller("QDR.SchemaController", ['$scope', '$location', '$timeout', 'QDRService', function($scope, $location, $timeout, QDRService) {
- if (!QDRService.connected) {
- QDRService.redirectWhenConnected("schema")
+ if (!QDRService.management.connection.is_connected()) {
+ QDR.redirectWhenConnected($location, "schema")
return;
}
var onDisconnect = function () {
- $timeout( function () {QDRService.redirectWhenConnected("schema")})
+ $timeout( function () {QDR.redirectWhenConnected("schema")})
}
// we are currently connected. setup a handler to get notified if we are ever disconnected
- QDRService.addDisconnectAction( onDisconnect )
+ QDRService.management.connection.addDisconnectAction( onDisconnect )
var keys2kids = function (tree, obj) {
if (obj === Object(obj)) {
@@ -40,7 +40,7 @@ var QDR = (function (QDR) {
var key = keys[i];
var kid = {title: key}
if (obj[key] === Object(obj[key])) {
- kid.isFolder = true
+ kid.folder = true
keys2kids(kid, obj[key])
} else {
kid.title += (': ' + JSON.stringify(obj[key],null,2))
@@ -51,10 +51,10 @@ var QDR = (function (QDR) {
}
var tree = []
- for (var key in QDRService.schema) {
+ for (var key in QDRService.management.schema()) {
var kid = {title: key}
- kid.isFolder = true
- var val = QDRService.schema[key]
+ kid.folder = true
+ var val = QDRService.management.schema()[key]
if (val === Object(val))
keys2kids(kid, val)
else
@@ -62,17 +62,18 @@ var QDR = (function (QDR) {
tree.push(kid);
}
- $('#schema').dynatree({
+ $('#schema').fancytree({
minExpandLevel: 2,
+ clickFolderMode: 3,
classNames: {
expander: 'fa-angle',
- connector: 'dynatree-no-connector'
+ connector: 'fancytree-no-connector'
},
- children: tree
+ source: tree
})
$scope.$on("$destroy", function(event) {
- QDRService.delDisconnectAction( onDisconnect )
+ QDRService.management.connection.delDisconnectAction( onDisconnect )
});
}]);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[6/8] qpid-dispatch git commit: DISPATCH-801 Updated 3rd party UI
components to latest available via npm
Posted by ea...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/plugin/css/site-base.css
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/css/site-base.css b/console/stand-alone/plugin/css/site-base.css
deleted file mode 100644
index 27aca28..0000000
--- a/console/stand-alone/plugin/css/site-base.css
+++ /dev/null
@@ -1,4721 +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.
-*/
-* {
- outline: none;
-}
-
-* {
- font-family: 'Open Sans', sans-serif;
-}
-
-a:focus {
- outline: none;
-}
-.navbar .brand {
- font-size: 18px;
-}
-
-.brand > img {
- height: 11px;
- width: auto;
-}
-
-.property-name {
- white-space: nowrap;
-}
-
-small table tbody tr td.property-name {
- font-weight: bold;
- text-align: right;
-}
-
-#log-panel {
- position: fixed;
- top: -5px;
- left: 30px;
- right: 30px;
- bottom: 50%;
- z-index: 10000;
- background: inherit;
- transition: bottom 1s ease-in-out;
-}
-
-#log-panel > div {
- position: relative;
- width: 100%;
- height: 100%;
-}
-
-#log-panel #log-panel-statements {
- margin-left: 0;
- margin-bottom: 0;
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 20px;
- overflow-y: auto;
-}
-
-#log-panel-statements li {
- margin-left: 3px;
- margin-right: 3px;
- transition: background .25s ease-in-out;
-}
-
-#log-panel-statements li pre {
- border-radius: 0;
- font-size: 11px;
-}
-
-#log-panel-statements li:hover {
- background: #111111;
-}
-
-#log-panel-statements li.DEBUG {
- color: dodgerblue;
-}
-
-#log-panel-statements li.INFO {
- color: white;
-}
-
-#log-panel-statements li.WARN {
- color: yellow;
-}
-
-#log-panel-statements li.ERROR {
- color: red;
-}
-
-#log-panel #close {
- text-align: center;
- position: absolute;
- height: 20px;
- bottom: 0;
- left: 0;
- right: 0;
- box-shadow: 0 1px 13px rgba(0, 0, 0, 0.1) inset;
- opacity: 1;
-}
-
-#log-panel #copy {
- position: absolute;
- right: 23px;
- bottom: 26px;
- background: inherit;
- transition: opacity 1s ease-in-out;
- opacity: 0.4;
- cursor: pointer;
-}
-
-#log-panel #copy:hover {
- opacity: 1;
-}
-
-div.log-stack-trace p {
- line-height: 14px;
- margin-bottom: 2px;
-}
-
-#canvas {
- display: inline-block;
-}
-.fill {
- min-height: 100%;
- height: 100%;
-}
-/* sub tab tweaks */
-body div div ul.nav {
- margin-bottom: 5px;
- border-bottom: none;
-}
-
-#tree-ctrl {
- position: relative;
- top: -3px;
-}
-
-#tree-ctrl > li > a {
- display: block;
- padding-left: 5px;
- padding-right: 5px;
- /* padding: 5px; */
-}
-
-ul.dynatree-container {
- background: inherit;
-}
-ul.dynatree-container li {
- background: inherit;
-}
-/* Chart stuff */
-#charts {
- display: block;
- overflow: hidden;
- margin: 5px auto;
- position: relative;
- padding-bottom: 35px;
-}
-.group {
- margin-bottom: 1em;
-}
-.axis {
- font: 10px sans-serif;
- pointer-events: none;
- z-index: 2;
-}
-.axis.text {
- -webkit-transition: fill-opacity 250ms linear;
-}
-.axis path {
- display: none;
-}
-.axis line {
- stroke: #000;
- shape-rendering: crispEdges;
-}
-.axis.top {
- position: relative;
- top: 0;
- padding: 0;
-}
-.axis.bottom {
- position: absolute;
- bottom: 0px;
- padding: 0;
-}
-.horizon {
- overflow: hidden;
- position: relative;
-}
-.horizon:last-child {
- border-bottom: none;
-}
-.horizon + .horizon {
- border-top: none;
-}
-.horizon canvas {
- display: block;
-}
-.horizon .title,
-.horizon .value {
- bottom: 0;
- line-height: 30px;
- margin: 0 6px;
- position: absolute;
- white-space: nowrap;
-}
-.horizon .title {
- left: 0;
-}
-.horizon .value {
- right: 0;
-}
-.line {
- opacity: .2;
- z-index: 2;
-}
-
-td {
- padding-right: 20px;
-}
-
-.expandable {
- padding: 3px;
-}
-
-.expandable > .title {
- cursor: pointer;
-}
-
-i.expandable-indicator {
- font-family: FontAwesome;
- font-weight: normal;
- font-style: normal;
- display: inline-block;
- text-decoration: inherit;
-}
-
-.expandable-body form fieldset legend {
- font-size: inherit;
- margin-bottom: 0px;
-}
-
-.expandable.opened i.expandable-indicator:before {
- font-family: FontAwesome;
- content: "\f078" !important;
-}
-
-.expandable.closed i.expandable-indicator:before {
- font-family: FontAwesome;
- content: "\f054";
-}
-
-.expandable.opened i.expandable-indicator.folder:before {
- font-family: FontAwesome;
- content: "\F07C" !important;
-}
-
-.expandable.closed i.expandable-indicator.folder:before {
- font-family: FontAwesome;
- content: "\F07B";
-}
-
-.expandable.opened .expandable-body {
- display: inline-block;
- margin-bottom: 3px;
-}
-
-.expandable.closed .expandable-body {
- display: none;
-}
-
-span.dynatree-icon {
- position: relative;
- top: -2px;
- font-size: 17px;
-}
-
-span:not(.dynatree-has-children) .dynatree-icon:before {
- font-family: FontAwesome;
- content: "\f013";
-}
-
-ul.inline,
-ol.inline {
- margin-left: 0;
- list-style: none;
-}
-
-ul.inline > li,
-ol.inline > li {
- display: inline-block;
- padding-right: 2px;
- padding-left: 2px;
-}
-
-.tab {
- display: block;
- margin-left: 1em;
-}
-
-.red {
- color: red !important;
-}
-
-.orange {
- color: orange !important;
-}
-
-.yellow {
- color: yellow !important;
-}
-
-.green {
- color: green !important;
-}
-
-.background-green {
- color: white;
- background-color: #51a351;
-}
-
-.background-light-green {
- color: white;
- background-color: #5ab15a;
-}
-
-.blue {
- color: dodgerblue !important;
-}
-
-.background-blue {
- color: white;
- background-color: #006dcc;
-}
-
-.icon1point5x {
- font-size: 1.5em;
-}
-
-.centered,
-.align-center {
- margin-left: auto !important;
- margin-right: auto !important;
- text-align: center;
-}
-
-.align-right {
- text-align: right;
-}
-
-.align-left {
- text-align: left;
-}
-
-.inline {
- display: inline;
-}
-
-.inline-block,
-.list-row-select,
-.list-row-contents,
-.list-row-contents > .ngCellText {
- display: inline-block;
-}
-
-.list-row {
- height: 30px;
- white-space: nowrap;
-}
-
-.list-row .ngCellText {
- padding: 0;
- vertical-align: middle;
-}
-
-.list-row-select,
-.list-row-contents {
- height: 100%;
- vertical-align: middle;
-}
-
-.list-row-select > input {
- vertical-align: middle;
-}
-
-.no-bottom-margin {
- margin-bottom: 0 !important;
-}
-
-.no-bottom-margin .control-group {
- margin-bottom: 4px;
-}
-
-.bottom-margin {
- margin-bottom: 20px;
-}
-
-li.attr-column {
- width: 1em;
-}
-
-.editor-autoresize .CodeMirror {
- height: auto;
-}
-
-.well.editor-autoresize {
- padding: 0px;
-}
-
-.well.editor-autoresize .CodeMirror {
- margin-bottom: 0px;
- border: none;
-}
-
-.editor-autoresize .CodeMirror .CodeMirror-scroll {
- overflow-y: hidden;
- overflow-x: auto;
-}
-
-.gridster ul#widgets {
- list-style-type: none;
-}
-
-.gridster ul#widgets .gs_w {
- padding: 0px;
- overflow: hidden;
- position: relative;
-}
-
-.gridster ul#widgets .preview-holder {
- transition-property: opacity;
- transition-duration: 500ms;
- padding: 1px;
-}
-
-.widget-area {
- position: relative;
- height: 100%;
- width: 100%;
-}
-
-.widget-title {
- margin: 0;
- padding-left: 5px;
- padding-right: 5px;
- z-index: 6000;
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
-}
-
-.widget-title:hover {
- cursor: move;
-}
-
-.widget-title > .row-fluid > .pull-right > i {
- cursor: pointer;
- opacity: .25;
-}
-
-.widget-title > .row-fluid > .pull-right > i:hover {
- transition: opacity 0.25s ease-in-out;
- -moz-transition: opacity 0.25s ease-in-out;
- -webkit-transition: opacity 0.25s ease-in-out;
- opacity: 1;
-}
-
-.widget-body {
- position: absolute;
- top: 20px;
- bottom: 0;
- left: 0;
- right: 0;
-}
-
-.height-controls > a {
- float: left;
- display: block;
- opacity: .1;
- text-decoration: none;
-}
-
-.width-controls > a {
- float: left;
- display: block;
- opacity: .1;
- text-decoration: none;
-}
-
-.width-controls > a:hover {
- opacity: .9;
- text-decoration: none;
-}
-
-.height-controls > a:hover {
- opacity: .9;
- text-decoration: none;
-}
-
-.width-controls {
- font-size: 32px;
- z-index: 50;
- position: absolute;
- width: 1.5em;
- height: 3em;
- display: block;
- right: 5px;
- top: 43%;
-}
-
-.height-controls {
- font-size: 32px;
- z-index: 50;
- position: absolute;
- display: block;
- width: 3em;
- height: 1.5em;
- left: 41%;
- bottom: 5px;
-}
-
-editable-property {
- position: relative;
-}
-
-.ep.editing {
- position: absolute;
- top: -10px;
- padding: 0;
- z-index: 10000;
- border: 1px solid #cecdcd;
- white-space: nowrap;
-}
-
-/*
-.widget-title > div > div .ep[ng-show=editing] {
- top: -1px;
-}
-
-table .ep.editing {
- top: 12px;
-}
- */
-.ep.editing > form > fieldset > i {
- position: relative;
- top: 2px;
-}
-
-.ep > i {
- cursor: pointer;
- opacity: .25;
- transition: opacity 0.25s ease-in-out;
- -moz-transition: opacity 0.25s ease-in-out;
- -webkit-transition: opacity 0.25s ease-in-out;
-}
-
-.ep > form > fieldset > input {
- border: 0;
-}
-
-.ep > i:hover {
- opacity: 1;
-}
-
-.ep form fieldset i {
- cursor: pointer;
- padding-left: 5px;
-}
-
-.ep form.no-bottom-margin {
- margin: 0;
-}
-
-.ngTotalSelectContainer {
- margin: 0px;
-}
-
-.ngTopPanel {
- background: inherit;
-}
-
-.ngGrid {
- background: inherit;
-}
-
-.ngViewport {
- margin-left: 0px;
- margin-right: 0px;
-}
-
-#widgets li div div div div form fieldset div input {
- display: none;
-}
-#widgets li div div div div div#attributesGrid div div div div.ngHeaderCell {
- border: none;
-}
-#widgets li div div div div div#attributesGrid div div div div.ngCell {
- border: none;
-}
-#widgets li div div div div div#attributesGrid div.ngTopPanel {
- border: none;
-}
-#widgets li div div div div div#attributesGrid div.ngTopPanel div.ngGroupPanel {
- border: none;
-}
-#widgets li div div div div div#attributesGrid div.ngFooterPanel {
- border: none;
- display: none;
-}
-.ngFooterPanel {
- border-top: none;
-}
-.ngRow .ngCell:last-child {
- border-right: none;
-}
-.ngRow:last-child {
- border-bottom: none;
-}
-.ngFooterTotalItems span:first-child {
- margin-right: .5em;
-}
-
-.ACTIVE:before {
- font-family: FontAwesome;
- content: "\f087";
- font-style: normal;
- color: #777777;
-}
-
-.RESOLVED:before {
- font-family: FontAwesome;
- content: "\f0ad";
- font-style: normal;
-}
-
-.STARTING:before {
- font-family: FontAwesome;
- content: "\f021";
- font-style: normal;
-}
-
-.STARTING {
- -moz-animation: spin 2s infinite linear;
- -o-animation: spin 2s infinite linear;
- -webkit-animation: spin 2s infinite linear;
- animation: spin 2s infinite linear;
-}
-
-.STOPPING:before {
- font-family: FontAwesome;
- content: "\f021";
- font-style: normal;
-}
-
-.STOPPING {
- -moz-animation: spin 2s infinite linear;
- -o-animation: spin 2s infinite linear;
- -webkit-animation: spin 2s infinite linear;
- animation: spin 2s infinite linear;
-}
-
-.UNINSTALLED:before {
- font-family: FontAwesome;
- content: "\f014";
- font-style: normal;
-}
-
-.INSTALLED:before {
- font-family: FontAwesome;
- content: "\f06b";
- font-style: normal;
-}
-
-.table-bordered {
- border: none;
- border-radius: 0px;
-}
-
-.table-bordered thead:first-child tr:first-child th:first-child,
-.table-bordered tbody:first-child tr:first-child td:first-child {
- border-radius: 0px;
- border-left: none;
-}
-
-.table-bordered th,
-.table-bordered td {
- border-left: none;
- border-top: none;
-}
-
-.table-bordered th:last-child,
-.table-bordered td:last-child {
- border-left: none;
- border-top: none;
- border-right: none;
-}
-
-table.table thead .sorting {
- background: inherit;
-}
-
-table.table thead .sorting_asc:after {
- background: url('../img/datatable/sort_asc.png') no-repeat top center;
-}
-
-table.table thead .sorting_desc:after {
- background: url('../img/datatable/sort_desc.png') no-repeat top center;
-}
-
-.dataTables_filter label {
- margin-bottom: 0px;
-}
-
-.dataTables_filter label input {
- padding-right: 14px;
- padding-right: 4px \9;
- padding-left: 14px;
- padding-left: 4px \9;
- margin-bottom: 0;
-}
-
-.nav {
- margin-bottom: 10px;
-}
-
-.navbar-fixed-top {
- margin-bottom: 0px;
-}
-
-#main > div > ul.nav,
-ng-include > .nav.nav-tabs {
- margin-bottom: 10px;
- min-width: 120px;
-}
-
-#main > div > ul.nav > li,
-ng-include > .nav.nav-tabs > li {
- margin-top: 3px;
- margin-bottom: 3px;
-}
-
-.navbar .btn-navbar span:after {
- font-family: FontAwesome;
- content: "\f0de";
- margin-left: 7px;
-}
-
-.navbar .btn-navbar.collapsed span:after {
- font-family: FontAwesome;
- content: "\f0dd";
- margin-left: 7px;
-}
-
-#main > div > ul.nav,
-ng-include > .nav.nav-tabs {
- padding-left: 3px;
- padding-right: 3px;
-}
-
-.nav-tabs > li > a,
-.nav-pills > li > a {
- margin-right: 0px;
-}
-
-div#main div ul.nav li a,
-div#main div ul.nav li span {
- padding-bottom: 2px;
- padding-top: 2px;
-}
-div#main div ul.nav li a:not(.btn), div#main div ul.nav li span.a:not(.btn) {
- border: 1px;
- border-radius: 2px;
- background: inherit;
- color: #777777;
- text-shadow: 0 1px 0 #FFFFFF;
-}
-
-div#main div ul.nav li a:hover {
- padding-bottom: 2px;
- padding-top: 2px;
-}
-
-#main div div div section .tabbable .nav.nav-tabs {
- margin-top: 0px;
- margin-bottom: 10px;
- min-width: 120px;
-}
-
-#main > div > div > div > .nav.nav-tabs:not(.connected),
-.span12 > .nav.nav-tabs:not(.connected) {
- margin-top: 5px;
-}
-
-.span12 > .nav.nav-tabs:not(.connected),
-.span12 > .nav.nav-tabs > li {
- margin: 3px;
-}
-
-.logbar {
- z-index: 40;
- position: fixed;
- width: 87%;
- top: 70px;
- left: 5%;
- padding-left: 20px;
- padding-right: 20px;
-}
-
-.logbar-container {
- margin-top: 10px;
- margin-bottom: 5px;
-}
-
-.logbar-container .control-group {
- margin-bottom: 5px;
-}
-
-.log-main {
- margin-top: 55px;
-}
-
-.log-filter {
- margin-right: 30px;
-}
-
-.ui-resizeable-handle {
- display: none;
-}
-
-.ui-resizable-se {
- height: 10px;
- width: 10px;
- margin-right: 5px;
- margin-bottom: 5px;
- font-size: 32px;
- z-index: 50;
- position: absolute;
- display: block;
- right: 0px;
- bottom: 0px;
- cursor: se-resize;
-}
-
-.no-log {
- margin-top: 55px;
-}
-
-.control i {
- cursor: pointer;
-}
-
-td.details {
- padding: 0px;
- border: none;
- margin: 0px;
- height: 0px;
-}
-
-.innerDetails {
- padding: 5px;
- white-space: normal;
- display: none;
-}
-
-table.dataTable {
- table-layout: fixed;
-}
-
-table.dataTable tbody tr td {
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis;
-}
-
-.wiki.logbar-container {
- margin-top: 5px;
- margin-bottom: 5px;
-}
-
-.wiki.logbar-container > .nav.nav-tabs {
- margin-top: 0px;
- margin-bottom: 0px;
-}
-
-.wiki.logbar-container .pull-right {
- margin-top: 1px;
-}
-
-.wiki-fixed {
- margin-top: 45px;
-}
-
-.wiki-fixed .pane {
- top: 120px;
-}
-
-.help-sidebar li {
- padding-left: 2px;
- padding-right: 2px;
-}
-
-.help-sidebar li a {
- padding-left: 3px;
- padding-right: 3px;
-}
-
-.help-sidebar li:first-child {
- margin-top: 0px !important;
- padding-top: 20px;
-}
-
-.help-display p {
- text-align: justify;
-}
-
-.help-display h5 {
- margin-top: 2em;
-}
-
-.help-display h6 {
- margin-top: 2em;
-}
-
-.form-data {
- display: inline-block;
- margin: 5px;
-}
-
-input[type="checkbox"].hawtio-checkbox {
- margin-top: 10px;
-}
-
-.bundle-list {
- width: 100%;
-}
-
-.bundle-item {
- position: relative;
- display: inline-block;
- width: 300px;
- margin-bottom: 1px;
-}
-
-.bundle-item-details table {
- min-height: 0;
-}
-
-.bundle-item-details {
- height: 0;
- display: inline-block;
- z-index: 15;
-}
-
-.bundle-item > a {
- display: block;
- z-index: 5;
-}
-
-.bundle-item > a:hover {
- text-decoration: none;
-}
-
-.bundle-item a span {
- display: block;
- padding: 8px;
- font-weight: normal;
- z-index: 6;
- text-overflow: ellipsis;
- overflow: hidden;
-}
-
-.bundle-item a span.badge {
- margin-left: 7px;
-}
-
-.bundle-item a span.badge::before {
- padding: 0px;
- float: left;
- position: relative;
- top: 4px;
- left: -8px;
- display: block;
- content: ' ';
- height: 6px;
- width: 6px;
- z-index: 10;
-}
-
-.bundle-item a.toggle-action {
- position: absolute;
- display: block;
- width: 16px;
- height: 16px;
- margin: 0;
- padding: 0;
- right: 12px;
- top: 6px;
- opacity: 0.2;
- transition: all 500ms ease-in-out;
- font-size: 18px;
-}
-
-.bundle-item a.toggle-action .icon-power-off {
- color: orange;
-}
-
-.bundle-item a.toggle-action .icon-play-circle {
- color: green;
-}
-
-.bundle-item a.toggle-action:hover {
- opacity: 1;
- text-decoration: none;
-}
-
-.bundle-list {
- margin-bottom: 2em;
-}
-
-div.hawtio-form-tabs div.tab-content {
- padding-top: 15px;
- padding: 10px;
-}
-
-.hawtio-form fieldset legend {
- margin-bottom: 0;
- border-bottom: none;
- font-size: 15px;
-}
-
-.spacer {
- display: inline-block;
- margin-bottom: 10px;
-}
-
-div.hawtio-form-tabs ul.nav-tabs {
- margin-bottom: 0px !important;
-}
-
-div.hawtio-form-tabs ul.nav-tabs li {
- margin-bottom: -1px !important;
-}
-
-div.hawtio-form-tabs ul.nav-tabs li.active:first-child {
- margin-left: 0px;
-}
-
-div.hawtio-form-tabs ul.nav-tabs li.active {
- margin-right: 1px;
- margin-left: 2px;
- box-shadow: 0 -10px 10px -10px rgba(0, 0, 0, 0.1) !important;
-}
-
-div.hawtio-form-tabs ul.nav-tabs li.active a {
- font-weight: bold;
-}
-
-.popover-inner .popover-title {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-.popover {
- width: auto;
-}
-
-li.stacktrace {
- line-height: 10px;
-}
-
-.control-button {
- width: 14px;
-}
-
-.ngViewport:focus {
- outline: none;
-}
-
-.wikiGridStyle {
- height: 350px;
-}
-
-/** Animations */
-.wave-enter-setup,
-.wave-leave-setup {
- transition: all cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.5s;
-}
-
-.wave-enter-setup {
- position: absolute;
- left: -100%;
-}
-
-.wave-enter-start {
- left: 0;
-}
-
-.wave-leave-setup {
- position: absolute;
- left: 0;
-}
-
-.wave-leave-start {
- left: 100%;
-}
-
-/* slideout directive stuff */
-.slideout {
- position: fixed;
- z-index: 3000;
- width: 75%;
-}
-
-.slideout > .slideout-title {
- min-height: 22px;
- font-size: 20px;
- padding: 15px;
-}
-
-.slideout > .slideout-content {
- position: relative;
- min-height: 93%;
- max-height: 93%;
- overflow: auto;
- -webkit-transform: translateZ(0);
-}
-
-.slideout-title span {
- width: 97%;
- display: inline-block;
- text-align: left;
-}
-
-.slideout.left > .slideout-content {
- left: 0;
- top: 0;
- margin-right: 2px;
- margin-left: 0px;
-}
-
-.slideout.right > .slideout-content {
- left: 2px;
- top: 0;
- margin-left: 2px;
- margin-right: 0px;
-}
-
-.slideout > .slideout-content > .slideout-body {
- margin: 5px;
- height: 100%;
-}
-
-.slideout.right {
- left: 100%;
-}
-
-.slideout.left {
- left: -75%;
-}
-
-.slideout .slideout-title a {
- display: inline-block;
-}
-
-.slideout .slideout-title a:hover {
- text-decoration: none;
-}
-
-.slideout.right .slideout-title a {
- margin-left: 5px;
- float: left;
-}
-
-.out {
- transition: left 1s, right 1s ease-in-out;
-}
-
-.slideout.left .slideout-title a {
- margin-right: 5px;
- float: right;
-}
-
-.slideout.right.out {
- left: 25%;
-}
-
-.slideout.left.out {
- left: 0%;
-}
-
-.column-filter {
- width: 94%;
- margin-bottom: 10px !important;
-}
-
-.color-picker {
- display: inline-block;
- position: relative;
- margin: 0px;
- line-height: 0px;
-}
-
-.color-picker .wrapper {
- display: inline-block;
- padding: 2px;
- line-height: 0;
-}
-
-.selected-color {
- width: 1em;
- height: 1em;
- padding: 4px;
- transition: all cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.5s;
- display: inline-block;
- cursor: pointer;
-}
-
-.color-picker-popout {
- transition: opacity 0.25s ease-in-out;
- position: absolute;
- top: 0px;
- overflow: hidden;
- padding: 0px;
- line-height: 0;
- margin: 0px;
- width: 0px;
- opacity: 0;
-}
-
-.popout-open {
- padding: 1px;
- width: auto;
- opacity: 1;
-}
-
-.color-picker div table tr td div {
- width: 1em;
- height: 1em;
- padding: 3px;
- transition: all cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.5s;
-}
-
-.color-picker div table tr td {
- padding-right: 5px;
-}
-
-.color-picker div table tr td:last-child {
- padding-right: 0px;
-}
-
-.modal-body div form fieldset div.spacer {
- display: inherit;
- margin-bottom: inherit;
-}
-
-.mouse-pointer {
- cursor: pointer;
-}
-
-.clickable {
- cursor: pointer;
- opacity: 0.6;
- transition: opacity .5s;
- text-decoration: none;
-}
-
-.clickable,
-.clickable:before {
- width: 16px;
- height: 16px;
- line-height: 16px;
-}
-
-.clickable.no-fade {
- transition: none;
- opacity: 1;
-}
-
-.clickable:hover {
- opacity: 1;
- text-decoration: none;
-}
-
-.hawtio-pager {
- overflow: auto;
- display: inline-block;
-}
-
-.hawtio-pager label {
- min-height: 100%;
- vertical-align: middle;
- margin-right: 5px;
- display: inline-block;
-}
-
-.fabric-view {
- position: relative;
- min-width: 928px;
-}
-
-.columns {
- position: absolute;
- bottom: 0;
- top: 0;
- left: 0;
- right: 0;
- padding-left: 300px;
- padding-right: 304px;
- padding-bottom: 0px;
- padding-top: 0px;
-}
-
-.column {
- float: left;
- position: relative;
- margin-top: 0px;
- margin-bottom: 0;
- height: 100%;
- overflow-x: hidden;
- overflow-y: auto;
-}
-
-.columns #center {
- width: 100%;
- padding: 0 5px;
- margin-right: 8px;
-}
-
-.columns #left {
- width: 280px;
- padding: 0 5px;
- margin-left: -100%;
- right: 315px;
-}
-
-.columns #right {
- width: 270px;
- padding: 0 5px;
- margin-right: -330px;
-}
-
-.canvas {
- height: 91%;
-}
-
-.container-section {
- height: 90%;
- overflow-x: hidden;
- overflow-y: auto;
-}
-
-.profile-section {
- overflow-x: hidden;
- overflow-y: auto;
-}
-
-.box.ui-draggable-dragging {
- width: 274px;
- transition: none;
-}
-
-.box.selected .box-right i {
- text-shadow: none;
-}
-
-.contained {
- display: inline-block;
- overflow: hidden;
- text-overflow: ellipsis;
- position: relative;
- white-space: nowrap;
-}
-
-h2 > .contained {
- top: 5px;
-}
-
-h4 > .contained {
- top: 4px;
-}
-
-.dropdown-toggle > .contained,
-.breadcrumb-link > .contained {
- top: 2px;
- line-height: 15px;
-}
-
-/* these widths are totally arbitrary */
-.c-narrow {
- max-width: 5em;
-}
-
-.c-medium {
- max-width: 10em;
-}
-
-.c-wide {
- max-width: 15em;
-}
-
-.c-wide2 {
- max-width: 20em;
-}
-
-.c-wide3 {
- max-width: 25em;
- min-width: 10em;
-}
-
-.c-max {
- width: 100%;
-}
-
-.fabric-page-header > .profile-summary-wide {
- margin-left: 10px;
- line-height: 22px;
-}
-
-.profile-selector-name > .contained {
- top: 8px;
-}
-
-.box {
- cursor: pointer;
- height: 50px;
- overflow: hidden;
- padding: 0;
- margin: 0;
- position: relative;
- text-overflow: ellipsis;
- transition: all 0.2s ease 0s;
- white-space: nowrap;
- line-height: 22px;
- vertical-align: middle;
-}
-
-.box > .box-left,
-.box > .box-right,
-.box > .box-middle {
- display: inline-block;
- position: absolute;
- vertical-align: middle;
- top: 0;
- bottom: 0;
- padding-top: 10px;
-}
-
-.box > .box-left {
- left: 11px;
-}
-
-.box > .box-right {
- right: 11px;
-}
-
-.box > .box-middle {
- right: 60px;
-}
-
-.box > .box-left > div,
-.box > .box-right > div,
-.box > .box-middle > div {
-
-}
-
-.box > .box-left > div > div,
-.box > .box-right > div > div,
-.box > .box-middle > div > div {
- vertical-align: middle;
- display: inline-block;
- margin-left: 4px;
- margin-right: 4px;
-}
-
-
-.box > .box-left > div > div .contained,
-.box > .box-left > div > div > span,
-.box > .box-right > div > div .contained,
-.box > .box-middle > div > div .contained {
- vertical-align: middle;
-}
-
-
-.box > .box-left > .profile-select {
- display: inline-block;
- top: 9px;
- max-width: 210px;
- width: 210px;
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis;
-}
-
-.box input[type='checkbox'] {
- margin-top: 5px;
- display: inline;
-}
-
-.box .active-profile a.invisible {
- visibility: none;
-}
-
-.box .active-profile div {
- display: inline;
-}
-
-.box .active-profile {
- position: absolute;
- display: inline-block;
- top: 10px;
- left: 12px;
- right: 0px;
-}
-
-.box .active-profile [class^='icon-circle'] {
- top: 0;
-}
-
-.box-middle ul.inline li {
- opacity: 0.5;
- transition: opacity 0.5s;
-}
-
-.box-middle ul.inline li:hover{
- opacity: 1;
-}
-
-.section-header {
- padding: 5px 7px;
-}
-
-.selection-controls {
- display: inline-block;
-}
-
-.section-title {
- margin-left: 10px;
- display: inline-block;
-}
-
-.section-controls {
- display: inline-block;
- float: right;
-}
-
-#center .section-header .section-controls {
- position: relative;
- top: 7px;
- left: -2px;
-}
-
-.page-padded .section-header .section-controls {
- position: relative;
- top: 6px;
- left: -3px;
-}
-
-.page-padded .section-header .selection-controls {
- position: relative;
- top: 1px;
-}
-
-.section-controls > a,
-.section-controls > span > span > span > span > span > .hawtio-dropdown {
- margin-left: 12px;
- margin-right: 12px;
- cursor: pointer;
-}
-
-.section-controls > a:hover,
-.section-controls > span:hover {
- text-decoration: none;
-}
-
-.section-controls > a.nav-danger {
- color: IndianRed !important;
-}
-
-.section-controls > a.nav-danger:hover {
- text-shadow: rgba(205, 92, 92, 0.6) 0 0 20px !important;
-}
-
-.page-padded .section-header .section-filter {
- margin-top: 0px;
-}
-
-.section-filter {
- position: relative;
- display: inline-block;
- margin-left: 12px;
-}
-
-.active-profile-filter > .section-filter {
- margin-top: 5px;
-}
-
-#center > .section-header > .section-filter {
- margin-top: 0px;
-}
-
-#right > .section-header > .section-filter {
- margin-left: 8px;
-}
-
-#right > .canvas {
- height: 80%;
-}
-
-.section-filter .icon-remove {
- position: absolute;
- top: 7px;
- right: 9px;
-}
-
-.features-toolbar {
- position: relative;
- margin-bottom: 0.5em;
-}
-
-.version-section > .canvas > div > .box {
- line-height: inherit;
-}
-
-.version-section select {
- width: 100%;
- margin-top: 5px;
- margin-bottom: 5px;
-}
-
-span.remove {
- float: right;
-}
-
-span.deleting {
- text-decoration: line-through;
-}
-
-td.deleting {
- background-color: IndianRed !important;
-}
-
-td.adding {
- background-color: Aquamarine !important;
-}
-
-.no-match-filter {
- display: none;
-}
-
-.file-upload div form fieldset .input-prepend .btn {
- float: left;
-}
-
-@-moz-document url-prefix() {
- /* hack to get the add button to line up correctly in FF */
- .input-prepend .btn {
- padding-top: 5px;
- padding-bottom: 5px;
- }
-}
-
-.input-prepend .progress {
- position: relative;
- left: 1px;
- top: 0px;
- min-height: 30px;
- width: 160px;
-}
-
-.login-wrapper {
- position: absolute;
- left: 0;
- top: 350px;
- padding-top: 2px;
- padding-bottom: 2px;
- padding-left: 0;
- padding-right: 0;
- line-height: 0;
- width: 100%;
-}
-
-.login-wrapper form {
- margin-bottom: 0px;
- padding-top: 67px;
- padding-bottom: 7px;
- padding-right: 40px;
- padding-left: 40px;
-}
-
-.login-wrapper form fieldset {
- width: 413px;
-}
-
-.login-form form fieldset .control-group {
- margin-bottom: 15px;
- margin-left: 5px;
-}
-
-.login-form form fieldset .control-group button[type='submit'] {
- float: right;
-}
-
-.login-logo {
- display: block;
- position: absolute;
- letter-spacing: 5px;
- padding: 10px;
- font-size: 20px;
- left: 233px;
- top: 9px;
-}
-
-.login-logo > img {
- height: 30px;
-}
-
-/** highlight required fields which have no focus */
-input.ng-invalid,
-textarea.ng-invalid,
-select.ng-invalid {
- border-color: #e5e971;
- -webkit-box-shadow: 0 0 6px #eff898;
- -moz-box-shadow: 0 0 6px #eff898;
- box-shadow: 0 0 6px #eff898;
-}
-
-/** Use bigger and darker border on checkboxes as its hard to see since they already have a shadow */
-input[type="checkbox"].ng-invalid {
- -webkit-box-shadow: 0 0 12px #e5e971;
- -moz-box-shadow: 0 0 12px #e5e971;
- box-shadow: 0 0 12px #e5e971;
-}
-
-.container-profile-settings {
- min-width: 360px;
-}
-
-.container-settings {
- min-width: 360px;
-}
-
-.bold {
- font-weight: bold;
-}
-
-.container-settings dd .ep {
- display: inline-block;
- top: -5px;
-}
-
-.deployment-pane h3 {
- margin-top: 0px;
-}
-
-.deployment-pane ul li i {
- display: inline-block;
- white-space: nowrap;
-}
-
-.deployment-pane ul li {
- white-space: nowrap;
- padding: 7px;
-}
-
-.deployment-pane ul li editable-property {
- display: inline-block;
-}
-
-.deployment-pane ul li .ep {
- display: inline-block;
-}
-
-.container-settings dd input[type=radio] {
- display: inline-block;
-}
-
-.fabric-page-header .span4 h1,
-.fabric-page-header .span4 h2 {
- line-height: inherit;
-}
-
-.fabric-page-header h2.inline-block {
- margin-top: 0;
- margin-bottom: 0;
-}
-
-.create-container-body {
- margin-top: 10px;
-}
-
-.log-stack-trace > dd {
- margin-left: 0;
-}
-
-.log-message > dd > div {
- margin-top: 10px;
-}
-
-.log-stack-trace > dd > ul {
- margin-top: 10px;
-}
-
-.log-stack-trace > dd > ul > li {
- line-height: 12px;
-}
-
-.log-stack-trace > dd > ul > li > div.stack-line > a {
- font-weight: bold;
-}
-
-pre.stack-line {
- padding: 0;
- margin: 0;
- line-height: 14px;
-}
-
-div.stack-line {
- white-space: pre-wrap;
- word-break: break-all;
- word-wrap: break-word;
- line-height: 14px;
-}
-
-#container-create-form {
- margin-bottom: 14px;
-}
-
-#container-create-form .control-group {
- margin-bottom: 0px;
-}
-
-h1.ajaxError {
- font-size: 16px;
-}
-
-h2.ajaxError {
- font-size: 14px;
-}
-
-h3.ajaxError,
-h4.ajaxError {
- font-size: 12px;
-}
-
-.directive-example {
- padding: 10px;
- margin: 10px;
-}
-
-div#main div ul.nav li a.nav-primary.active {
- color: rgba(255, 255, 255, 0.75);
-}
-
-div#main div ul.nav li a.nav-primary {
- color: #ffffff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- background-color: #006dcc;
- background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
- background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
- background-image: -o-linear-gradient(top, #0088cc, #0044cc);
- background-image: linear-gradient(to bottom, #0088cc, #0044cc);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
- border-color: #0044cc #0044cc #002a80;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- *background-color: #0044cc;
- /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-
- filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
-}
-
-div#main div ul.nav li a.nav-primary:hover,
-div#main div ul.nav li a.nav-primary:active,
-div#main div ul.nav li a.nav-primary.active,
-div#main div ul.nav li a.nav-primary.disabled,
-div#main div ul.nav li a.nav-primary[disabled] {
- color: #ffffff;
- background-color: #0044cc;
- *background-color: #003bb3;
-}
-
-div#main div ul.nav li a.nav-primary:active,
-div#main div ul.nav li a.nav-primary.active {
- background-color: #003399 \9;
-}
-
-.nav.nav-tabs li a[disabled] {
- cursor: not-allowed;
- opacity: 0.3;
-}
-
-.caret:before {
- font-family: 'FontAwesome';
- border: 0;
- content: "\f078";
- font-size: 11px;
- display: block;
- position: relative;
- top: -9px;
- left: 0;
-}
-
-.dropdown.perspective-selector .caret:before {
- top: -7px;
-}
-
-.caret {
- border: none;
- width: 9px;
-}
-
-div#main div ul.nav li a.nav-primary .caret {
- border-top-color: #ffffff;
- border-bottom-color: #ffffff;
-}
-
-.main-nav-upper .container:before {
- display: none;
-}
-
-.main-nav-upper .container:after {
- display: none;
-}
-
-.main-nav-upper .container {
- width: auto;
- line-height: 23px;
- vertical-align: auto;
-}
-
-.main-nav-upper .icon-desktop:before {
- position:relative;
- top: 1px;
-}
-
-.main-nav-lower .container:before {
- display: none;
-}
-
-.main-nav-lower .container:after {
- display: none;
-}
-
-.main-nav-lower .container {
- width: 100%;
-}
-
-.overflow > .dropdown-toggle:not(.open) + .dropdown-menu {
- border: none;
-}
-
-.main-nav-lower .container ul.nav {
- width: 100%;
-}
-
-.navbar-inner {
- height: auto;
- min-height: 0;
-}
-
-.main-nav-upper {
- height: 28px;
- min-height: 28px;
- font-size: 11px;
-}
-
-.main-nav-upper .brand {
- font-size: 13px;
- margin-left: 0px;
- padding: 0px;
- font-weight: normal;
- margin-left: 20px;
-}
-
-.main-nav-upper .nav li a {
- padding-top: 2px;
- padding-bottom: 5px;
-}
-
-#main-nav {
- max-height: 70px;
- background-color: #F0f0f0;
- font-size: 20px;
-}
-
-div#main.qdr {
- margin-top: 40px !important;
-}
-
-dd.file-list {
- margin-left: 0;
-}
-
-.file-list-toolbar .nav .caption {
- font-weight: bold;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-left: 0 !important;
-}
-
-.file-icon {
- padding: 0;
- margin: 0;
- display: inline-block;
- width: 16px;
- height: 16px;
- margin-right: 6px;
-}
-
-.file-icon i {
- width: 16px;
- height: 16px;
- font-size: 17px;
- position: relative;
- left: 2px;
- top: 2px;
-}
-
-.file-icon img {
- width: 16px;
- height: 16px;
-}
-
-.page-padded {
- padding-left: 20px;
- padding-right: 20px;
-}
-
-.fabric-page-header .span4 h2 i {
- margin-right: 13px;
-}
-
-.controller-section-widget {
- padding: 3px;
-}
-
-.container-dashboard-controls {
- position: relative;
- z-index: 10;
-}
-
-.container-dashboard-controls .pull-right .btn {
- opacity: 0.5;
- transition: opacity 1s;
-}
-
-.container-dashboard-controls .pull-right .btn:hover {
- opacity: 0.9;
-}
-
-.container-dashboard-status-table {
- position: relative;
- top: -34px;
- display: table;
- max-width: 278px;
- z-index: 9;
-}
-
-.container-status-dashboard {
- text-align: center;
- display: table-cell;
- min-width: 144px;
-}
-
-.container-status-dashboard i {
- position: relative;
- left: 0px;
- font-size: 133px;
-}
-
-.status-icon {
- display: inline-block;
- text-decoration: none;
- color: inherit;
-}
-
-.status-icon:hover {
- text-decoration: none;
-}
-
-.dashboard-service-list {
- display: table-cell;
- min-width: 139px;
- vertical-align: middle;
-}
-
-.container-dashboard-profile-controls {
- width: 100%;
- text-align: center;
- margin-bottom: 5px;
-}
-
-.no-list {
- list-style-type: none;
-}
-
-.profile-selector-item {
- display: table;
-}
-
-.profile-selector-checkbox {
- display: table-cell;
- padding-right: 5px;
-}
-
-.profile-selector-name {
- display: table-cell;
- position: relative;
- width: 100%;
-}
-
-.profile-info {
- position: absolute;
- right: 3px;
-}
-
-.profile-list ul {
- margin-left: 0;
- margin-bottom: 0;
-}
-
-.profile-list ul li .expandable .expandable-body {
- margin-left: 16px;
-}
-
-/** fabric active profiles */
-.active-profile-titles {
- position: relative;
- display: inline-block;
- width: 100%;
- height: 40px;
-}
-
-.active-profile-list .expandable {
- padding: 0;
-}
-
-.active-profile-titles.section-header {
- padding: 0;
-}
-
-.active-profile-titles div:not(.active-profile-filter) {
- display: inline-block;
- font-weight: bold;
- top: 10px;
-}
-
-.active-profile-row {
- position: relative;
- display: inline-block;
- width: 100%;
- line-height: 22px;
- height: 22px;
-}
-
-.active-profile-row div {
- display: inline-block;
-}
-
-.active-profile-list .expandable .expandable-body {
- width: 100%;
-}
-
-.active-profile-list .expandable .expandable-body ul li .box {
- background: inherit;
-}
-
-.active-profile-list .expandable .expandable-body ul li .child-container {
- margin-left: 0;
-}
-
-.active-profile-expander {
- position: absolute;
- left: 0;
-}
-
-.active-profile-requirements {
- position: absolute;
- right: 75px;
-}
-
-.active-profile-requirements-title {
- position: absolute;
- right: 75px;
-}
-
-.active-profile-create {
- position: absolute;
- right: 210px;
-}
-
-.active-profile-count {
- position: absolute;
- right: 0px;
-}
-
-.active-profile-count-title {
- padding: 5px;
- text-align: right;
- font-weight: bold;
-}
-
-.active-profile-titles .section-controls {
- position: absolute;
- top: 10px !important;
- right: 10px;
-}
-
-.active-profile-titles .section-controls a {
- font-weight: normal;
-}
-
-
-.active-profile-name {
- position: absolute;
- left: 35px;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- right: 95px;
-}
-
-.active-profile-icon {
- position: absolute;
- top: 1px;
- left: 15px;
- color: green !important;
-}
-
-.active-profile-icon i {
- font-size: 17px;
-}
-
-.active-profile-filter {
- position: absolute;
- left: 0px;
- top: -10px;
-}
-
-.active-profile-main {
- min-width: 754px;
-}
-
-.active-profile-count a .icon-plus {
- position: relative;
- top: 1px;
-}
-
-.active-profile-count a:hover {
- text-decoration: none;
-}
-
-/** fabric brokers page */
-.mq-titles {
- position: relative;
- display: inline-block;
- width: 100%;
- height: 40px;
-}
-
-.mq-titles.section-header {
- padding: 0;
-}
-
-.mq-titles .section-controls {
- position: absolute;
- top: 9px !important;
- right: 0px;
-}
-
-.mq-titles .section-controls a {
- font-weight: normal;
-}
-
-.mq-profile-icon {
- color: green !important;
-}
-
-.mq-profile-list, .mq-broker-list, .mq-container-list {
- margin-left: 15px;
-}
-
-i.mq-master {
- color: orange;
-}
-
-.mq-broker-rectangle, .mq-container-rectangle {
- position: relative;
-
- display: inline-block;
- *display: inline;
- /* IE7 inline-block hack */
-
-
- margin-left: 5px;
- margin-right: 5px;
- margin-bottom: 5px;
- margin-top: 5px;
-
- border-left-width: 10px;
- border-right-width: 10px;
- border-top-width: 10px;
-
- *zoom: 1;
- padding: 4px 12px;
- margin-bottom: 0;
- font-size: 14px;
- line-height: 20px;
- *line-height: 20px;
- text-align: center;
- vertical-align: middle;
- cursor: pointer;
-}
-
-.mq-page {
- position: relative;
-}
-
-.mq-page .hero-unit {
- position: absolute;
- top: 53px;
- left: 10px;
- right: 10px;
-}
-
-.mq-groups {
- position: absolute;
- top: 42px;
- left: 19px;
- right: 10px;
-}
-
-.mq-group-rectangle:first-child {
- margin-top: 10px;
-}
-
-.mq-group-rectangle {
- position: relative;
- margin-left: 0;
- margin-right: 10px;
- margin-bottom: 10px;
- margin-top: 0;
-}
-
-.mq-group-rectangle-label .mq-group-name {
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- position: absolute;
- top: 61px;
- left: 4px;
- right: 0;
-}
-
-.mq-group-rectangle-label a {
- position: absolute;
- top: 5px;
- right: 5px;
-}
-
-.mq-group-rectangle-label {
- position: relative;
- top: 7px;
- display: inline-block;
- min-width: 150px;
- max-width: 150px;
- min-height: 150px;
-}
-
-.mq-profiles {
- position: absolute;
- min-height: 185px;
- left: 150px;
- right: 0;
- display: inline-block;
- overflow-x: auto;
-}
-
-.mq-profiles .mq-profile-canvas {
- overflow: auto;
-}
-
-.mq-profile-rectangle {
- display: inline-block;
- height: 150px;
- margin: 0;
- margin-top: 5px;
- margin-left: 10px;
- padding-left: 4px;
- padding-right: 4px;
- padding-top: 4px;
-}
-
-.mq-profile-rectangle-label {
- position: relative;
- top: 2px;
-}
-
-.mq-profile-name {
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- margin-right: 48px;
- max-width: 300px;
- display: block;
-}
-
-.mq-profile-rectangle-label .mq-profile-create-broker {
- position: absolute;
- top: 0;
- right: 0;
-}
-
-.mq-profile-canvas {
- display: inline-block;
-}
-
-.mq-broker-area {
- position: relative;
- top: 11px;
- text-align: center;
- margin-left: auto;
- margin-right: auto;
-}
-
-.mq-container-rectangle {
- margin-top: 2px;
- width: 20px;
-}
-
-.mq-container-row {
- display: block;
- margin-top: 8px;
- margin-left: auto;
- margin-right: auto;
-}
-
-.mq-broker-rectangle {
- height: 88px;
-}
-
-.mq-group-rectangle-label, .mq-profile-rectangle-label, .mq-broker-rectangle-label, .mq-container-rectangle-label {
- white-space:nowrap;
-}
-
-/** dashboard */
-.dashboard-link-row {
- width: 100%;
- position: relative;
-}
-
-a.dashboard-link {
- line-height: 15px;
- font-weight: normal;
-}
-
-a.dashboard-link:hover {
- text-decoration: none;
-}
-
-.dashboard-link {
- position: absolute;
- top: 15px;
- right: 76px;
- z-index: 500;
-}
-
-.container-list-main {
- min-width: 592px;
-}
-
-.widget-title > .row-fluid {
- position: relative;
-}
-
-.widget-title > .row-fluid > .pull-left {
- position: absolute;
- right: 16px;
- left: 0;
-}
-
-.widget-title > .row-fluid > .pull-left > .ep > div {
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis;
-}
-
-.container-detail-profiles {
- position: relative;
- margin-top: 2px;
-}
-
-.container-detail-profile-buttons {
- position: absolute;
- right: 0;
- z-index: 50;
-}
-
-#dialog-body div .profile-list {
- max-height: 327px;
- overflow-y: auto;
-}
-
-@media (max-width: 979px) {
- .navbar-fixed-top .navbar-inner, .navbar-fixed-bottom .navbar-inner {
- padding: 0;
- }
-
- .navbar-fixed-top, .navbar-fixed-bottom {
- position: fixed;
- }
-
-}
-
-.header-list li {
- vertical-align: top;
- height: 30px;
-}
-
-.header-list li div {
- height: 30px;
-}
-
-.provision-list {
- margin-left: 0px;
-}
-
-.provision-list ul {
- margin-left: 0px;
-}
-
-.provision-list ul li {
- list-style-type: none;
- padding: 7px;
-}
-
-ul.zebra-list {
- margin-left: 0;
-}
-
-.zebra-list li {
- padding: 7px;
-}
-
-ul.zebra-list > li {
- list-style-type: none;
-}
-
-ol.zebra-list {
- counter-reset:li;
- margin-left: 0;
- padding-left: 0;
-}
-
-ol.zebra-list > li {
- position: relative;
- list-style-type: none;
-}
-
-ol.zebra-list > li:before {
- content: counter(li);
- counter-increment: li;
- padding: 7px;
- font-weight: bold;
-}
-
-.pointer {
- cursor: pointer;
-}
-
-.container-profile-settings span.folder-title {
- font-weight: bold;
-}
-li.profile-selector-folder span.folder-title:hover, li.profile div.profile-selector-name>span>span:hover {
- color: #005580;
-}
-.widget-body div div .wiki-fixed {
- margin: 3px;
-}
-
-
-.loading {
- position: relative;
- top: 140px;
-}
-.loading p {
- margin-top: 20px;
- font-weight: bold;
- font-size: 20px;
-}
-
-.add-link {
- position: absolute;
- right: 20px;
- top: 130px;
- width: 22px;
- height: 19px;
- text-align: center;
-}
-
-.log-table > li {
- position: relative;
- list-style-type: none;
- min-height: 32px;
- max-width: 100%;
- padding: 0;
-}
-
-.log-table .table-head div div {
- font-weight: bold;
- text-align: center !important;
- direction: ltr !important;
-}
-
-.log-table .table-head div div:nth-child(4) {
- font-weight: bold;
- left: 247px;
- width: 326px;
- text-align: center !important;
- direction: ltr !important;
-}
-
-.log-table > li > div > div {
- position: absolute;
- display: inline-block;
- white-space: nowrap;
- text-overflow: ellipsis;
- font-size: 12px;
- min-height: 28px;
- overflow-x: hidden;
- padding: 3px;
- padding-top: 6px;
- width: auto;
-}
-
-.log-table {
- margin: 0;
-}
-
-.log-table > .table-row {
- cursor: pointer;
-}
-
-.log-table > .table-row.selected:before {
- z-index: 39;
- position: absolute;
- top: 6px;
- font-family: FontAwesome;
- content: "\f054";
- font-size: 20px;
- color: green;
-}
-
-.log-table > li > div > div:nth-child(1):not(.stack-line) {
- left: 0;
- width: 11px;
- z-index: 5;
-}
-
-.log-table > li > div > div:nth-child(2) {
- left: 18px;
- width: 180px;
- z-index: 5;
-}
-
-.log-table > li > div > div:nth-child(3) {
- left: 190px;
- width: 60px;
- z-index: 5;
- text-align: center;
-}
-
-.log-table > li > div > div:nth-child(4) {
- padding-right: 5px;
- text-align: right;
- direction: rtl;
- z-index: 3;
- left: 0;
- width: 573px;
-}
-
-.log-table > li > div > div:nth-child(5) {
- left: 580px;
- right: 0;
- padding-left: 5px;
-}
-
-.log-table > li > div > div:nth-child(6) {
- position: static;
- margin-top: 43px;
- white-space: normal;
- display: block;
-}
-
-.log-info-panel {
- z-index: 60;
- position: fixed;
- right: 7em;
- top: 150px;
- bottom: 5em;
- padding: 0;
- overflow: hidden;
- min-height: 500px;
- min-width: 800px;
-}
-
-@media(max-width: 1085px) {
- .log-info-panel {
- left: 5px;
- right: 5px;
- max-width: inherit;
- min-width: 500px;
- }
-}
-
-.log-info-panel >.log-info-panel-frame {
- position: relative;
- height: 100%;
- width: 100%;
- margin: 10px;
-}
-
-.log-info-panel > .log-info-panel-frame > .log-info-panel-header {
- position: absolute;
- top: 0;
- height: 80px;
- left: 5px;
- right: 50px;
- white-space: nowrap;
-}
-
-.log-info-panel-header > span {
- margin-left: 7px;
- position: relative;
- top: 2px;
- overflow: hidden;
-}
-
-.log-info-panel-frame > .log-info-panel-body {
- position: absolute;
- overflow: auto;
- left: 5px;
- right: 27px;
- top: 80px;
- bottom: 15px;
- padding-top: 10px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-.log-info-panel-body > .row-fluid {
- margin-bottom: 10px;
-}
-
-.log-info-panel > .log-info-panel-frame > .log-info-panel-body > .row-fluid > span {
- margin-right: 7px;
- white-space: nowrap;
-}
-
-.log-table-dashboard {
- position: absolute;
- bottom: 0;
- left: 0;
- right: 0;
-}
-
-.ex-node-container {
- position: relative;
- width: 100%;
- height: 696px;
-}
-
-.ex-node {
- position: absolute;
- width: 150px;
- height: 90px;
- text-align: center;
- padding-top: 60px;
-}
-
-.dozer-mapping-node {
- display: block;
- margin-top: 10px;
- margin-bottom: 10px;
- padding: 20px;
-}
-
-.dozer-mappings li {
- list-style-type: none;
-}
-
-.dozer-mappings ul {
- margin-left: 50px;
-}
-
-.dozer-mappings span {
- width: 500px;
-}
-
-.wiki-file-list-up:hover {
- text-decoration: none;
-
-}
-
-.fabric-page-header.features {
- margin-top: 10px;
-}
-
-.fabric-page-header > * {
- line-height: 38px;
-}
-
-.profile-selector-name a:hover {
- text-decoration: none;
-}
-
-.file-name:hover {
- text-decoration: none;
-}
-
-i.expandable-indicator.folder {
- font-size: 17px;
-}
-
-.switches li {
- width: 215px;
-}
-
-.switch-light.switch-ios {
- width: 100px;
-}
-
-.switch-container {
- position: static;
- padding-top: 5px;
- width: 215px;
- height: 45px;
-}
-
-[class^="dynatree-folder icon-"], [class*=" dynatree-folder icon-"] {
-
-}
-
-[class^="dynatree-folder icon-"]:before, [class*=" dynatree-folder icon-"]:before {
- font-size: 17px;
- margin-left: 18px;
-}
-
-
-[class^="dynatree-folder icon-"], [class*=" dynatree-folder icon-"] .dynatree-connector {
- display: none;
-}
-
-[class^="dynatree-folder icon-"], [class*=" dynatree-folder icon-"] .dynatree-icon {
- display: none;
-}
-
-.main-nav-lower .container ul .dropdown.overflow {
- margin-right: 25px;
-}
-
-.dropdown-menu.right {
- left: auto;
- right: 0;
-}
-
-.dropdown-menu.right:before {
- left:auto !important;
- right: 9px;
-}
-
-.dropdown-menu.right:after {
- left:auto !important;
- right: 10px;
-}
-
-@media(max-width: 1134px) {
- .profile-details > [class^="span"] {
- width: 100%;
- float: inherit;
- display: block;
- margin-left: 2px;
- margin-right: 2px;
- }
-}
-
-/* Start 800x600 Optimzations */
-@media(max-width: 849px) {
-
- .page-padded {
- padding-left: 5px;
- padding-right: 5px;
- }
-
- .wiki-fixed {
- margin-left: 0 !important;
- margin-right: 0 !important;
- }
-
- .wiki-fixed .row-fluid .span9 {
- margin-left: 9px;
- }
-
- .container-details > [class*=" offset"] {
- display: none;
- }
-
- .container-details > .span4.offset1 {
- width: 100%;
- float: inherit;
- display: block;
- margin-left: 2px;
- margin-right: 2px;
- }
-
- .container-details > .span5.offset1 {
- width: 100%;
- float: inherit;
- display: block;
- margin-left: 2px;
- margin-right: 2px;
- }
-
- .create-container-body > [class^="span"] {
- width: 100%;
- float: inherit;
- display: block;
- margin-left: 2px;
- margin-right: 2px;
- }
-
- .create-container-body > [class^="span"]:first-child {
- margin-bottom: 15px;
- }
-
- .features-toolbar .pull-left {
- margin-bottom: 10px;
- }
-
- .edit-feature-lists > [class^="span"] {
- width: 49%;
- float: inherit;
- display: inline-block;
- margin-left: 0;
- margin-right: 0;
- }
-
-}
-/* End 800x600 optimizations */
-
-/*
- * jquery.tocify.css 1.8.0
- * Author: @gregfranko
- */
-/* The Table of Contents container element */
-.tocify {
- /* top works for the wiki, may need customization
- elsewhere */
- top: 120px;
- width: 232px;
- padding-left: 1em;
- padding-right: 1em;
- overflow-y: auto;
- overflow-x: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- position: fixed;
- bottom: 5px;
- z-index: 20;
-}
-
-.tocify h2,
-.tocify h3 {
- white-space: normal;
-}
-
-.toc-container {
- position: relative;
- width: 100%;
-}
-
-.toc-content {
- position: absolute;
- left: 290px;
- right: 0;
-}
-
-.tocify ul {
- margin-left: 0px;
-}
-
-.tocify li {
- list-style-type: none;
- display: block;
-}
-
-.tocify li a {
- display: block;
- padding: 3px;
- transition: background,border .25s ease-in-out;
-}
-
-.tocify li a:hover {
- text-decoration: none;
-}
-
-.tocify li a.active {
- font-weight: bolder;
-}
-
-/* Makes the font smaller for all subheader elements. */
-.tocify-subheader li {
- font-size: 12px;
-}
-
-/* Further indents second level subheader elements. */
-.tocify-subheader .tocify-subheader {
- text-indent: 30px;
-}
-
-/* Further indents third level subheader elements. You can continue this pattern if you have more nested elements. */
-.tocify-subheader .tocify-subheader .tocify-subheader {
- text-indent: 40px;
-}
-
-@media(max-width: 700px) {
- .tocify {
- position: static;
- width: auto;
- margin-bottom: 1em;
- }
-
- .toc-content {
- position: static;
- left: auto;
- }
-}
-
-fs-donut svg g text.value {
- font-size: 40px;
-}
-
-fs-donut svg g text.units {
- font-size: 20px;
-}
-
-.health-displays {
- width: 100%;
-}
-
-.panel {
- position: fixed;
-}
-
-.panel.bottom {
- bottom: 0;
-}
-
-.deploy {
- right: 0;
-}
-
-.profile-list-item:after {
- content: ", ";
-}
-
-.profile-list-item:last-child:after {
- content: " ";
-}
-
-.health-displays .health-display,
-.column-box,
-.column-box-variable,
-.column-box-square,
-.column-box-half-screen {
- position: relative;
- display: inline-block;
- width: 300px;
- height: 300px;
- margin-left: 0;
- margin-right: 0;
- margin-bottom: 10px;
- overflow: hidden;
- vertical-align: top;
-}
-
-.column-box {
- height: auto;
- min-height: 175px;
- width: 500px;
-}
-
-.wiki-icon-view {
- min-height: 200px;
-}
-
-.wiki-icon-view .column-box {
- min-height: 0;
- margin-bottom: 25px;
-}
-
-.column-box-half-screen {
- width: 50%;
- min-width: auto;
- height: auto;
-}
-
-.column-box-square {
- height: 32px;
- width: 32px;
- line-height: 28px;
- vertical-align: middle;
- text-align: center;
-}
-
-.column-box-variable {
- height: auto;
- min-height: 175px;
- width: auto;
- min-width: 175px;
- max-width: 500px;
-}
-
-.column-box-variable > h3 {
- margin-bottom: 0;
-}
-
-.column-box .file-icon > * {
- width: 100%;
- height: auto;
-}
-
-.location-box {
- margin: 12px;
-}
-
-.column-box-square > i {
- font-size: 24px;
- height: 24px;
- vertical-align: middle;
-}
-
-.container-groups .column-box {
- height: 125px;
- width: auto;
-}
-
-.container-header-version,
-.container-header-version + hr {
- margin-bottom: 0;
-}
-
-.container-header-version + hr {
- margin-top: 0;
-}
-
-.container-groups .container-group-header {
- border-bottom: none;
-}
-
-.column-row {
- float: left;
-}
-
-.column-box-selected .column-box-header {
- font-size: 150%;
- font-weight: bold;
-}
-
-.column-box-icons > .span1 {
- text-align: center;
- vertical-align: middle;
- width: 32px;
-}
-
-.column-box-icons i,
-.column-box-icons img {
- font-size: 32px;
- width: 32px;
-}
-
-.ok-container > i {
- font-size: 32px;
- color: #a4a4a4;
-}
-
-.column-box > div {
- position: relative;
- height: 100%;
- margin: 10px;
-}
-
-.column-box h3 {
- text-overflow: ellipsis;
- line-height: normal;
- margin-bottom: 0;
-}
-
-.bottom-anchored {
- position: absolute;
- bottom: 0;
- margin-top: -3em;
-}
-
-.label-list > li > .badge {
- margin-top: 3px;
- margin-bottom: 3px;
-}
-
-.label-list > .inline-block > .badge {
- margin-left: 3px;
- margin-right: 3px;
-}
-
-.health-details {
- top: 0;
- bottom: 0;
- z-index: 40;
-}
-
-.health-status {
- padding: 0;
- position: absolute;
- bottom: 0;
- overflow: hidden;
- left: 0;
- right: 0;
- z-index: 20;
-}
-
-.health-message-wrap {
- margin: 0;
- padding: 0;
- width: 100%;
- height: 100%;
-}
-
-.health-message {
- display: block;
- margin: 10px;
-}
-
-.health-details-toggle {
- position: absolute;
- display: inline-block;
- width: 16px;
- height: 16px;
- right: 2px;
- top: 0px;
-}
-
-.health-details-wrap {
- width: 300px;
- height: 300px;
- overflow-y: auto;
- overflow-x: hidden;
-}
-
-.health-details-wrap a {
- color: #d4d4d4;
-}
-
-.health-details-wrap dl {
- margin-top: 5px;
- margin-bottom: 2px;
- margin-left: 0;
-}
-
-.health-details-wrap table {
- max-width: 300px;
-}
-
-.health-details-wrap table tr td {
- vertical-align: middle;
-}
-
-.health-details-wrap table tr td:first-child {
- font-weight: bold;
- text-align: right;
- padding-right: 5px;
-}
-
-.health-details-wrap table tr td:last-child {
- padding-left: 5px;
- overflow-x: hidden;
- text-overflow: ellipsis;
-}
-
-.health-display-title {
- padding-top: 18px;
- font-size: 30px;
- width: 100%;
- height: 40px;
- margin-top: 10px;
- margin-bottom: 10px;
- font-weight: bold;
- text-align: center;
-}
-
-.health-display-title.ok {
- background-color: lightgreen;
-}
-
-.health-display-title.warning {
- background-color: darkorange;
-}
-
-.health-displays .health-display .health-chart {
- width: 300px;
- height: 300px;
-}
-
-.create-column {
- vertical-align: top;
- display: inline-block;
- width: 445px;
- margin-bottom: 10px;
-}
-
-#create-form {
- max-width: 422px;
-}
-
-/* hack to work around strange tabset behavior */
-tabset > .tabbable > ul {
-/* display: none; */
-}
-/* end hack */
-
-tabset > .tabbable > .tab-content > .nav.nav-tabs > li {
- cursor: pointer;
-}
-
-tabset > .tabbable > .tab-content > .nav.nav-tabs > li.active {
- cursor: pointer;
-}
-
-tabset > .tabbable > .tab-content > .nav.nav-tabs > li.disabled {
- opacity: 0.3;
-}
-
-.toast.toast-warning * {
- color: black;
-}
-
-.hawtio-toc .panel-title {
- padding: 0;
- margin-top: 20px;
- margin-bottom: 20px;
-}
-
-.hawtio-toc .panel-title a {
- display: block;
- text-align: center;
- padding: 10px;
-}
-
-._jsPlumb_endpoint {
- z-index: 25;
-}
-
-.panes {
- position: relative;
- display: block;
- min-height: 100%;
-}
-
-.panes > .left-pane {
- position: absolute;
- left: 0;
- right: 285px;
- height: 100%;
-}
-
-.panes > .right-pane {
- position: absolute;
- right: 0;
- width: 275px;
- height: 100%;
-}
-
-.camel-viewport {
- overflow: auto;
- height: 100%;
-}
-
-.camel-canvas-endpoint svg circle {
- fill: #346789;
-}
-
-.camel-props {
- position: relative;
- height: 100%;
-}
-
-.camel-props > .button-bar {
- left: 0;
- right: 0;
- display: block;
- position: absolute;
-}
-
-.button-bar > .centered > form {
- margin-bottom: 10px;
-}
-
-.camel-props > .prop-viewport {
- overflow-y: auto;
- overflow-x: visible;
- position: absolute;
- bottom: 0;
- top: 80px;
- width: 100%;
-}
-
-.camel-props form > fieldset > legend {
- font-size: medium;
- font-weight: bold;
- margin: 0;
- line-height: 12px;
- padding: 3px;
-}
-
-.endpoint-control > label {
- font-size: medium;
- font-weight: bold;
- margin: 0;
- line-height: 12px;
- padding: 3px;
-}
-
-.endpoint-props > p {
- font-size: medium;
- font-weight: bold;
- margin: 0;
- margin-bottom: 25px;
- line-height: 12px;
- padding: 3px;
-}
-
-.endpoint-control > .controls {
- margin-top: 15px;
-}
-
-.camel-props form fieldset .control-label {
- float: none;
- width: auto;
- text-align: left;
-}
-
-.camel-props form fieldset .controls {
- margin-left: auto;
-}
-
-.camel-props form fieldset .controls .input-xxlarge {
- width: auto;
- margin-left: auto;
- margin-right: auto;
-}
-
-.camel-props form fieldset div[hawtio-form-array] > div > div > div > .controls.pull-right {
- float: none;
-}
-
-.welcome {
- margin-left: 5em;
- margin-right: 5em;
-}
-
-input.ng-invalid-pattern {
- border-color: #e9322d;
- -webkit-box-shadow: 0 0 6px #f8b9b7;
- -moz-box-shadow: 0 0 6px #f8b9b7;
- box-shadow: 0 0 6px #f8b9b7;
-}
-
-input.ng-invalid-pattern:focus {
- border-color: #e9322d;
- -webkit-box-shadow: 0 0 6px #f8b9b7;
- -moz-box-shadow: 0 0 6px #f8b9b7;
- box-shadow: 0 0 6px #f8b9b7;
-}
-
-.threads.logbar > .logbar-container {
- margin-top: 2px;
- margin-bottom: 5px;
-}
-
-.state-panel > ul > li:not(:first-child) > span {
- margin-left: 15px;
-}
-
-.state-panel > ul > li.active {
- font-weight: bold;
-}
-
-.runnable {
- color: green;
-}
-
-.timed-waiting {
- color: orange;
-}
-
-.waiting,
-.darkgray {
- color: darkgray;
-}
-
-.blocked {
- color: red;
-}
-
-strong.new,
-.lightgreen {
- color: lightgreen;
-}
-
-.terminated,
-.darkred {
- color: darkred;
-}
-
-.thread-state-indicator {
- width: 100%;
- height: 100%;
- padding-top: 5px;
-}
-
-.monitor-indicator {
- font-size: 10px;
- padding: 4px;
- margin: 5px;
-}
-
-.monitor-indicator.button {
- cursor: pointer;
-}
-
-.monitor-indicator.true {
- background: #1cd11d;
- box-shadow: inset 0px 1px 0px 0px rgba(250, 250, 250, 0.5), 0px 0px 4px 1px rgba(34, 203, 1, 0.49);
-}
-
-.monitor-indicator.false {
- background: #737373;
- box-shadow: inset 0px 1px 0px 0px rgba(250, 250, 250, 0.5);
-}
-
-.table-header {
- color: black;
- position: relative;
-}
-
-.table-header > .indicator:after {
- font-family: 'FontAwesome';
- position: absolute;
- right: 5px;
-}
-
-.table-header.asc > .indicator:after {
- content: "\f077";
-}
-
-.table-header.desc > .indicator:after {
- content: "\f078";
-}
-
-.camel-tree > ul.nav {
- margin-bottom: 3px !important;
-}
-
-.camel-tree > .section-filter {
- margin: 0 0 8px;
- display: block;
-}
-
-.table > thead > tr > th {
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-th > .indicator:before {
- display: inline-block;
- content: "\00a0";
- margin-left: 12px;
-}
-
-.simple-table-checkbox,
-.simple-table-checkbox > input {
- vertical-align: middle;
- margin: 0;
- width: 16px;
- line-height: 16px;
- max-width: 16px;
-}
-
-
-.table td,
-.table th {
- vertical-align: middle;
-}
-
-.ngCellText .icon-replication-controller {
- width: 32px;
-}
-
-.repository-browser-toolbar > .btn {
- margin-bottom: 10px;
-}
-
-.bundle-list-toolbar {
- vertical-align: top;
-}
-
-.bundle-list-toolbar > .pull-left > *,
-.bundle-list-toolbar > .pull-right > * {
- display: inline-block;
-}
-
-.bundle-list-toolbar > div > input,
-.bundle-list-toolbar > div > div > input {
- margin-bottom: 10px;
-}
-
-.bundle-list-toolbar > div > label,
-.bundle-list-toolbar > div > strong {
- position: relative;
- top: -3px;
-}
-
-.bundle-list-toolbar > div > .input-append {
- position: relative;
- left: 3px;
- top: -9px;
-}
-
-.connect-column {
- display: inline-block;
- vertical-align: top;
- width: 34em;
-}
-
-.icon-spacer:before {
- content: '\00a0';
- width: 11px;
-}
-
-.dropdown-menu {
- padding-top: 0;
- padding-bottom: 0;
- margin-top: 0;
- top: 100%;
- left: 0;
- right: 0;
- border-radius: 0;
-}
-
-.main-nav-upper .dropdown-menu {
- border-top: none;
- margin-top: -1;
- border-radius: 0;
-}
-
-.main-nav-lower .dropdown-menu {
- border-top: none;
-}
-
-.dropdown-menu > li > a {
- cursor: pointer;
- padding-left: 15px;
- padding-right: 15px;
-}
-
-.dropdown.perspective-selector > .dropdown-menu {
- min-width: 160px;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-.dropdown.perspective-selector .dropdown-menu > div {
- display: block;
-}
-
-.dropdown.perspective-selector .dropdown-menu > div > p,
-.hawtio-dropdown p {
- font-size: smaller;
- padding-left: 3px;
- padding-right: 3px;
- margin-bottom: 0;
-}
-
-.nav .hawtio-dropdown {
- margin-top: 2px;
-}
-
-.dropdown.perspective-selector .dropdown-menu > div > ul {
- margin-top: 0;
-}
-
-.dropdown.perspective-selector .dropdown-menu > div > ul > li.clear-recent > a {
- padding: 3px 5px;
-}
-
-.dropdown-menu > li:hover > a {
- text-shadow:0px 0px 1px white;
-}
-
-.dropdown-menu:before {
- display: none !important;
-}
-
-.dropdown-menu:after {
- display: none !important;
-}
-
-.nav.nav-tabs li .hawtio-dropdown .dropdown-menu {
- margin-top: 4px;
- border-top: none;
-}
-
-span.hawtio-dropdown {
- position: relative;
- display: block;
- cursor: pointer;
-}
-
-span.hawtio-dropdown .dropdown-menu {
- width: auto;
-}
-
-.btn .hawtio-dropdown > .caret {
- width: 7px;
-}
-
-.btn .hawtio-dropdown > .dropdown-menu {
- left: -10px;
- margin-top: 5px;
- text-align: left;
-}
-
-.submenu-caret {
- display: inline-block;
- width: 0;
- height: 0;
-}
-
-.submenu-caret:before {
- font-family: 'FontAwesome';
- border: 0;
- content: "\f054";
- font-size: 11px;
- display: block;
-}
-
-.hawtio-dropdown > ul > li {
- padding: 3px;
- padding-left: 5px;
-}
-
-.hawtio-dropdown > ul > li > .menu-item {
- position: relative;
- display: block;
-}
-
-.hawtio-dropdown > .submenu-caret:before,
-.hawtio-dropdown > ul > li > .menu-item > .submenu-caret:before {
- position: absolute;
- top: 0;
- right: -2px;
-}
-
-.dropdown-menu .sub-menu {
- position: absolute;
- left: 195px;
- top: -8px;
-}
-
-.hawtio-breadcrumb > li {
- display: inline-block;
-}
-
-.dropdown-menu .dropdown .caret {
- display: none;
-}
-
-.hawtio-breadcrumb .caret {
- border: 0;
- width: 17px;
- margin-right: 2px;
- margin-left: 0;
-}
-
-.hawtio-breadcrumb .caret:before {
- font-family: 'FontAwesome';
- content: "\F105";
- font-size: 40px;
- top: -9px;
-}
-/*
-.modal {
- z-index: 5000;
- width: 660px;
- margin: -250px 0 0 -320px;
-}
-.modal-backdrop {
- z-index: 4090;
-}
-*/
-.scrollable-section {
- overflow-x: hidden;
- overflow-y: auto;
- max-height: 260px;
-}
-
-.component {
- opacity: 0.8;
- filter: alpha(opacity = 80);
-}
-
-.window,
-.node > rect {
- stroke-width: 2px;
- stroke: #346789;
- fill: url(#rect-gradient);
- border: 2px solid #346789;
- z-index: 20;
- position: absolute;
- font-size: 0.8em;
- filter: alpha(opacity = 80);
- cursor: move;
-
- box-shadow: 2px 2px 19px #e0e0e0;
- -o-box-shadow: 2px 2px 19px #e0e0e0;
- -webkit-box-shadow: 2px 2px 19px #e0e0e0;
- -moz-box-shadow: 2px 2px 19px #e0e0e0;
- -moz-border-radius: 4px;
- border-radius: 4px;
- background-color: lightgrey;
- fill: lightgrey;
-}
-
-.window,
-.node.selected > rect {
- stroke-width: 2px;
- stroke-dasharray: 10,5;
- stroke: red;
-}
-
-.window-inner {
- position: relative;
- border-radius: 2px;
-}
-
-.window-inner {
- padding: 6px;
-}
-
-.window-inner.from,
-.node > .from {
- background-color: lightsteelblue;
- fill: lightsteelblue;
-}
-
-.window-inner.choice,
-.node > .choice {
- background-color: lightblue;
- fill: lightblue;
-}
-
-.window-inner.when,
-.node > .when {
- background-color: lightgreen;
- fill: lightgreen;
-}
-
-.window-inner.otherwise,
-.node > .otherwise {
- background-color: lightgreen;
- fill: lightgreen;
-}
-
-.window-inner.to,
-.node > .to {
- background-color: lightsteelblue;
- fill: lightsteelblue;
-}
-
-.window-inner.log,
-.node > .log {
- background-color: lightcyan;
- fill: lightcyan;
-}
-
-.window-inner.setBody,
-.node > .setBody {
- background-color: #d3d3d3;
- fill: #d3d3d3;
-}
-
-.window-inner.onException,
-.node > .onException {
- background-color: lightpink;
- fill: lightpink;
-}
-
-.window-inner.delay,
-.node > .delay {
- background-color: lightgrey;
- fill: lightgrey;
-}
-
-.window-inner.bean,
-.node > .bean {
- background-color: mediumaquamarine;
- fill: mediumaquamarine;
-}
-
-.window-inner > * {
- vertical-align: middle;
-}
-
-.window-inner > span {
- max-width: 15em;
- display: inline-block;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
-}
-
-.window:hover {
- border-color: #5d94a6;
- background-color: #ffffa0;
-}
-
-.window:hover > .window-inner {
- background: inherit;
-}
-
-.window.selected {
- background-color: #f0f0a0;
-}
-
-.window.selected > .window-inner {
- background: inherit;
-}
-
-img.nodeIcon {
- width: 24px !important;
- height: 24px !important;
- cursor: crosshair;
- margin-right: 10px;
-}
-
-img.nodeIcon:hover {
- opacity: 0.6;
- box-shadow: 2px 2px 19px #a0a0a0;
- background-color: #a0a0a0;
-}
-
-.l1 {
- font-size: 13px;
-}
-
-._jsPlumb_connector {
- z-index: 4;
-}
-
-._jsPlumb_overlay {
- z-index: 6;
-}
-
-.hl {
- border: 3px solid red;
-}
-
-.strong {
- font-weight: bold;
-}
-
-.discovery > li {
- position: relative;
-}
-
-.discovery > li > div {
- vertical-align: middle;
-}
-
-.discovery > li > div:first-child {
- margin-right: 10px;
-}
-
-.discovery > li > div:last-child,
-.discovery > li > .lock {
- position: absolute;
- width: 32px;
- height: 32px;
- margin: auto;
- top: 0;
- bottom: 0;
- right: 10px;
-}
-
-.discovery > li > .lock {
- right: 42px;
-}
-
-.discovery > li > div:last-child > div.connect-button {
- width: 32px;
- height: 32px;
-}
-
-.discovery > li > div:last-child > div > i,
-.discovery > li > .lock > i {
- font-size: 32px;
- cursor: pointer;
-}
-
-.discovery > li > .lock > i {
- cursor: inherit;
-}
-
-.discovery > li > div:first-child > img {
- vertical-align: middle;
- width: 64px;
- max-height: 64px;
-}
-
-.auth-form {
- white-space: nowrap;
-}
-
-.auth-form > form > input {
- margin-bottom: 0;
-}
-
-.slideout-body .btn-group,
-.btn-group[hawtio-pager] {
- line-height: normal;
-}
-
-@media print {
- #main-nav,
- #log-panel {
- display: none !important;
- height: 0 !important;
- }
-
- .wiki-grid {
- display: none;
- }
-
- .wiki-fixed {
- margin-top: 0 !important;
- }
-
- .wiki-fixed > .row-fluid > .span3 {
- display: none;
- }
-
- .wiki-fixed > .row-fluid > .span9 {
- width: 100%;
- }
-
- .instance-name {
- display: none !important;
- }
-
- .logbar-container > .nav {
- display: none !important;
- height: 0 !important;
- }
-
-}
-
-.prefs {
- height: 100%;
- margin: 0;
-}
-
-.prefs > div {
- height: 100%;
- margin: 0;
-}
-
-.slideout-body .prefs {
- overflow: hidden;
- margin: 0;
-}
-
-.slideout-body .prefs .tabbable {
- position: relative;
- height: 100%;
- margin: 0;
-}
-
-.pref-slideout > div > div > div {
- height: 100%;
- margin: 0;
-}
-
-.pref-slideout .slideout-body {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0px;
- right: 0;
- overflow: none !important;
- margin: 0 !important;
-}
-
-.slideout-body .prefs .nav.nav-tabs {
- top: 5px;
- bottom: 5px;
- left: 0;
- width: 130px;
- position: absolute;
- margin: 0;
- overflow-y: auto;
-}
-
-.slideout-body .prefs .nav.nav-tabs:after,
-.slideout-body .prefs .nav.nav-tabs:before {
- display: none;
-}
-
-.slideout-body .prefs .nav.nav-tabs li {
- display: block;
- float: none;
-}
-
-.slideout-body .prefs .tab-content {
- position: absolute;
- overflow: auto;
- top: 5px;
- left: 140px;
- right: 15px;
- bottom: 5px;
- margin: 0;
-}
-
-.help-header .without-text,
-.about-header .without-text {
- position: relative;
- top: -4px;
- vertical-align: middle;
- height: 48px;
-}
-
-.help-header .with-text,
-.about-header .with-text {
- position: relative;
- top: -4px;
- vertical-align: middle;
- height: 48px;
-}
-
-.service-list > li {
- list-style-type: none;
- display: inline-block;
- margin-left: 3px;
- margin-right: 3px;
- vertical-align: middle;
-}
-
-.container-type {
- width: 16px;
-}
-
-.container-status > i:before,
-.container-type i:before,
-.container-type img {
- vertical-align: middle;
- font-size: 16px;
- height: 16px;
- width: auto;
- line-height: 16px;
-}
-
-.container-type img.girthy {
- height: auto;
- width: 16px;
-}
-
-.app-logo {
- width: 64px;
- margin-right: 10px;
-}
-
-.app-logo img,
-.app-logo i {
- vertical-align: middle;
- font-size: 64px;
- height: 64px;
- width: auto;
- line-height: 64px;
-}
-
-.app-logo img.girthy {
- height: auto;
- width: 64px;
-}
-
-.service-list i:before,
-.service-list img {
- height: 16px;
- width: auto;
- font-size: 16px;
- vertical-align: middle;
-}
-
-.service-list img.girthy {
- height: auto;
- width: 16px;
-}
-
-.perspective-selector img {
- width: auto;
- height: 16px;
- vertical-align: top;
-}
-
-.operation-row {
- position: relative;
- height: 30px;
- vertical-align: middle;
-}
-
-.operation-row.can-invoke {
- cursor: pointer;
-}
-
-.operation-row.cant-invoke {
- cursor: not-allowed;
-}
-
-.operation-row > * {
- display: inline-block;
- height: 100%;
- line-height: 30px;
-}
-
-.operation-actions {
- position: absolute;
- right: 6px;
- top: 4px;
-}
-
-.help-block:empty {
- margin-top: 10px;
-}
-
-ul.dynatree-container {
- overflow: visible;
-}
-
-.pane {
- position: absolute;
- bottom: 0;
- top: 70px;
- height: auto;
- width: 300px;
-}
-
-.pane > .pane-wrapper {
- position: relative;
- height: 100%;
- width: 100%;
- overflow: hidden;
-}
-
-.pane-viewport {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- overflow: auto;
- margin-right: 10px;
-}
-
-.pane-content {
- width: auto;
- height: auto;
-}
-
-.pane-bar {
- position: absolute;
- top: 0;
- right: 0;
- width: 5px;
- cursor: ew-resize;
- height: 100%;
-}
-
-.pane-content {
- float: none;
- position: static;
-}
-
-.pane.left {
- /*left: 0; */
- z-index: 39;
-}
-
-.pane.left .pane-viewport {
- margin-left: 10px;
- right: 5px;
- margin-right: 0;
-}
-
-.pane.left .pane-bar {
- right: 0;
-}
-
-.pane.right {
- right: 0;
-}
-
-.pane.right .pane-viewport {
- margin-left: 10px;
- margin-right: 5px;
- right: 5px;
-}
-
-.pane.right .pane-bar {
- left: 0;
-}
-
-.pane-header-wrapper {
- margin-left: 10px;
- margin-right: 10px;
-}
-
-.tree-header {
- position: relative;
- height: 26px;
-}
-
-.fabric-app-view-header {
- height: auto;
-}
-
-.fabric-app-view-header > * {
- line-height: 12px;
-}
-
-.fabric-app-view-header .alert {
- margin-bottom: 0;
-}
-
-.fabric-app-view-header .row-fluid:last-child {
- padding-bottom: 8px;
-}
-
-.tree-header > .left,
-.tree-header > .right {
- position: absolute;
- top: 3px;
- bottom: 6px;
- vertical-align: middle;
- line-height: 10px;
-}
-
-.tree-header > .left {
- left: 0;
-}
-
-.tree-header > .right {
- right: 10px;
-}
-
-.camel.tree-header {
- height: 42px;
-}
-
-.camel.tree-header > .left {
- right: 94px;
-}
-
-.camel.tree-header > .left,
-.camel.tree-header > .right {
- top: 6px;
- line-height: 30px;
-}
-
-
-.camel.tree-header > .left > .section-filter {
- width: 100%;
-}
-
-.camel.tree-header > .left > .section-filter > .search-query {
- width: 100%;
- margin-bottom: 10px;
-}
-
-.camel.tree-header > .left > .section-filter > .icon-remove {
- right: -16px;
-}
-
-.attributes-wrapper {
- width: 100%;
- overflow: auto;
-}
-
-.separator {
- padding-top: 4px;
- display: inline-block;
-}
-
-.grid-block,
-.health-display {
- border: 1px solid #00f;
-}
-
-.widget-title {
- border-bottom: 1px solid #00f;
-}
-
-.container-group-header {
- vertical-align: middle;
- line-height: 18px;
- font-weight: bold;
- padding: 4px;
- margin-top: 10px;
-}
-
-.search-query.has-text {
- background: #55ddff;
- color: #333333;
-}
-
-.dataTables_filter input {
- border-radius: 15px
-}
-
-.config-admin-form .form-horizontal .control-label {
- width: 260px;
-}
-.config-admin-form .form-horizontal .controls {
- margin-left: 280px;
-}
-
-.new-config-name-form {
- margin-top: 30px;
-}
-
-.td-fixed-width-150 {
- white-space: normal;
- width: 150px;
-}
-
-.pod-label {
- margin-right: 1em;
-}
-
-td > ul {
- margin-bottom: 0px;
-}
-
-td > .zebra-list > li {
- padding: 2px;
-}
-
-ul.nav select {
- margin-bottom: 0px;
- height: 25px;
-}
-
-/* ENTESB-2249: fixing bootstrap forms with tooltips */
-.form-horizontal input + div + .help-block,
-.form-horizontal select + div + .help-block,
-.form-horizontal textarea + div + .help-block {
- margin-top: 10px;
-}
-
-div#main div ul.nav {
- border-radius: 0 0 4px 4px;
- border: 1px solid #d4d4d4;
- border-top: 1px transparent;
- background-color: #FAFAFA;
- background-image: linear-gradient(to bottom, #ffffff, #f2f2f2);
- background-repeat: repeat-x;
- box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1);
-}
-
-ul.dynatree-container {
- background: inherit;
-}
-ul.dynatree-container li {
- background: inherit;
-}
-
-i.expandable-indicator {
- color: #666;
-}
-
-span.dynatree-expander {
- color: #728271;
-}
-
-span.dynatree-icon {
- color: #EECA7C;
-}
-span:not(.dynatree-has-children) .dynatree-icon:before {
- color: gray;
-}
-
-span.dynatree-empty,
-span.dynatree-vline,
-span.dynatree-connector,
-span.dynatree-expander,
-span.dynatree-icon,
-span.dynatree-checkbox,
-span.dynatree-radio,
-span.dynatree-drag-helper-img,
-#dynatree-drop-marker
-{
- font-family: FontAwesome;
- font-weight: normal;
- font-style: normal;
- display: inline-block;
- text-decoration: inherit;
- background-image: none;
- vertical-align: middle;
-}
-
-.dynatree-checkbox {
- color: #888888
-}
-
-/* Dynatree checkbox */
-span.dynatree-checkbox:before
-{
- margin-top: 1px;
- background-position: 0 0;
- cursor: pointer;
- content: "";
-}
-
-span.dynatree-checkbox:before:hover
-{
- background-position: 0 0;
- content: "";
-}
-
-.dynatree-selected span.dynatree-checkbox:before
-{
- margin-top: 1px;
- background-position: 0 0;
- cursor: pointer;
- content: "\f00c";
-}
-
-.dynatree-selected span.dynatree-checkbox:before:hover
-{
- background-position: 0 0;
- content: "\f00c";
-}
-
-
-.dynatree-expander {
- color: #888888
-}
-
-/* Dynatree expander */
-span.dynatree-expander:before
-{
- margin-top: 1px;
- background-position: 0 0;
- cursor: pointer;
- content: "\f054";
-}
-
-span.dynatree-expander:before:hover
-{
- background-position: 0 0;
- content: "\f054";
-}
-
-.dynatree-exp-e span.dynatree-expander:before, /* Expanded, not delayed, not last sibling */
-.dynatree-exp-ed span.dynatree-expander:before, /* Expanded, delayed, not last sibling */
-.dynatree-exp-el span.dynatree-expander:before, /* Expanded, not delayed, last sibling */
-.dynatree-exp-edl span.dynatree-expander:before /* Expanded, delayed, last sibling */
-{
- background-position: 0 0;
- content: "\f078";
-}
-.dynatree-exp-e span.dynatree-expander:before:hover, /* Expanded, not delayed, not last sibling */
-.dynatree-exp-ed span.dynatree-expander:before:hover, /* Expanded, delayed, not last sibling */
-.dynatree-exp-el span.dynatree-expander:before:hover, /* Expanded, not delayed, last sibling */
-.dynatree-exp-edl span.dynatree-expander:before:hover /* Expanded, delayed, last sibling */
-{
- background-position: 0 0;
- content: "\f0da";
-}
-
-/* closed folder */
-.dynatree-ico-cf span.dynatree-icon:before {
- background-position: 0 0;
- content: "\f07b";
-}
-
-/* open folder */
-.dynatree-ico-ef span.dynatree-icon:before {
- background-position: 0 0;
- content: "\f07c";
-}
-
-span.dynatree-icon:before {
- background-position: 0px 0px;
- font-family: FontAwesome;
- content: "\f013";
-}
-
-span.dynatree-folder a {
- font-weight: normal;
-}
-
-div.treeContainer ul.dynatree-container {
- border: 0px;
-}
-
-.pane>.pane-wrapper {
- position: relative;
- height: 100%;
- width: 100%;
- overflow: hidden;
-}
-
-.pane.left .pane-viewport {
- margin-left: 10px;
- right: 5px;
- margin-right: 0;
-}
-
-.pane-viewport {
- border-top: 1px solid #d4d4d4;
-}
-.pane-viewport {
- position: absolute;
- top: 24px;
- bottom: 0;
- left: 0;
- overflow: auto;
- margin-right: 10px;
-}
-
-.pane-content {
- float: none;
- position: static;
-}
-.pane-content {
- width: auto;
- height: auto;
-}
-
-.pane.left .pane-bar {
- border-right: 1px solid #d4d4d4;
-}
-.pane.left .pane-bar, .pane.right {
- right: 0;
-}
-.pane-bar {
- background: white;
-}
-.pane-bar {
- position: absolute;
- top: 0;
- right: 0;
- width: 5px;
- cursor: ew-resize;
- height: 100%;
-}
-
-div#overview-controller, div#list-controller {
- padding-left: 300px;
-}
-
-.ngViewport.ng-scope{
- height: auto !important;
- width: auto !important;
- overflow-y: hidden;
-}
-
-.ngTopPanel.ng-scope, .ngHeaderContainer{
- width: auto !important;
-}
-
-.qdr-overview.pane.left, .qdr-attributes.pane.left, .qdr-topology.pane.left {
- top: 70px;
-}
-
-div.chartContainer {
- width: auto;
-}
-
-div.chartOptions div.duration {
- width: 30em !important;
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/plugin/html/qdrConnect.html
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/html/qdrConnect.html b/console/stand-alone/plugin/html/qdrConnect.html
index 4559655..1d04042 100644
--- a/console/stand-alone/plugin/html/qdrConnect.html
+++ b/console/stand-alone/plugin/html/qdrConnect.html
@@ -72,7 +72,7 @@ under the License.
<i class="icon-spin icon-spinner icon-4x"></i>
<p>Please wait, connecting now...</p>
</div>
- <div class="centered" ng-show="connectionError">
+ <div class="centered error" ng-show="connectionError">
<p>There was a connection error: {{connectionErrorText}}</p>
</div>
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/plugin/html/qdrLayout.html
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/html/qdrLayout.html b/console/stand-alone/plugin/html/qdrLayout.html
deleted file mode 100644
index 6c1115a..0000000
--- a/console/stand-alone/plugin/html/qdrLayout.html
+++ /dev/null
@@ -1,35 +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.
--->
-<ul class="nav nav-tabs connected dispatch-view" ng-controller="QDR.NavBarController">
- <li ng-repeat="link in breadcrumbs" title="{{link.title}}" ng-show="isValid(link)" ng-class='{active : isActive(link.href), "pull-right" : isRight(link), haschart: hasChart(link)}'>
- <a ng-href="{{link.href}}{{hash}}" ng-bind-html="link.content"></a>
- </li>
-</ul>
-<div class="container-fluid">
- <div class="row">
- <div class="col-md-12">
- <ol class="breadcrumb">
- <li><a href="#">Home</a></li>
- <li>Typography</li>
- </ol>
- <h1>Application Heading h1</h1>
- <div ng-view></div>
- </div>
- </div>
-</div>
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/plugin/html/qdrList.html
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/html/qdrList.html b/console/stand-alone/plugin/html/qdrList.html
index 8b7800f..d32a27a 100644
--- a/console/stand-alone/plugin/html/qdrList.html
+++ b/console/stand-alone/plugin/html/qdrList.html
@@ -27,7 +27,9 @@ under the License.
<h4>{{selectedRecordName}}</h4>
<div ng-show="currentMode.id === 'attributes'" class="selectedItems">
<div ng-show="selectedRecordName === selectedEntity" class="no-content">There are no {{selectedEntity | safePlural}}</div>
- <div ng-hide="selectedRecordName === selectedEntity" ng-grid="details"></div>
+ <div ng-hide="selectedRecordName === selectedEntity" ui-grid="details" ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state
+ ng-style="getTableHeight()">
+ </div>
</div>
<div ng-show="currentMode.id === 'delete'">
<div class="delete" ng-show="selectedRecordName !== selectedEntity">
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/plugin/html/qdrOverview.html
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/html/qdrOverview.html b/console/stand-alone/plugin/html/qdrOverview.html
index 4535d2c..3173fff 100644
--- a/console/stand-alone/plugin/html/qdrOverview.html
+++ b/console/stand-alone/plugin/html/qdrOverview.html
@@ -26,14 +26,14 @@ under the License.
<div class="row-fluid">
<h3>Routers</h3>
<div class="overview">
- <div class="gridStyle" ng-grid="allRouters"></div>
+ <div class="grid" ui-grid="allRouters" ui-grid-selection ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state></div>
</div>
</div>
</script>
<script type="text/ng-template" id="router.html">
<div class="row-fluid">
- <h3>Router {{router.data.title}} attributes</h3>
- <div class="gridStyle noHighlight" ng-grid="routerGrid"></div>
+ <h3>Router {{router.title}} attributes</h3>
+ <div class="grid noHighlight" ui-grid="routerGrid" ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state></div>
</div>
</script>
@@ -41,7 +41,7 @@ under the License.
<div class="row-fluid">
<h3>Addresses</h3>
<div class="overview">
- <div class="gridStyle" ng-grid="addressesGrid"></div>
+ <div class="grid" ui-grid="addressesGrid" ui-grid-selection ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state></div>
</div>
</div>
</script>
@@ -51,12 +51,12 @@ under the License.
<li ng-repeat="mode in gridModes" ng-click="selectMode(mode,'Address')" ng-class="{active : isModeSelected(mode,'Address')}" title="{{mode.title}}" ng-bind-html="mode.content"> </li>
</ul>
<div ng-if="isModeVisible('Address','attributes')" class="selectedItems">
- <h3>Address {{address.data.title}}</h3>
- <div class="gridStyle noHighlight" ng-grid="addressGrid"></div>
+ <h3>Address {{address.title}}</h3>
+ <div class="grid noHighlight" ui-grid="addressGrid" ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state></div>
</div>
<div ng-if="isModeVisible('Address','links')" class="selectedItems">
- <h3>Links for address {{address.data.title}}</h3>
- <div class="gridStyle" ng-grid="linksGrid"></div>
+ <h3>Links for address {{address.title}}</h3>
+ <div class="grid" ui-grid="linksGrid" ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state></div>
</div>
</div>
</script>
@@ -73,13 +73,13 @@ under the License.
<div class="formLine"><label for="endpointOnly">Endpoints only</label><input name="linkTypes" id="endpointOnly" type="radio" ng-model="filter.endpointsOnly" value="true"/>
<label for="allLinks">All link types</label><input name="linkTypes" id="allLinks" type="radio" ng-model="filter.endpointsOnly" value="false"/></div>
</div>
- <div class="gridStyle" ng-grid="linksGrid"></div>
+ <div class="grid" ui-grid="linksGrid" ui-grid-selection ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state></div>
</div>
</script>
<script type="text/ng-template" id="link.html">
<div class="row-fluid">
- <h3>Link {{link.data.title}}</h3>
- <div class="gridStyle noHighlight" ng-grid="linkGrid"></div>
+ <h3>Link {{link.title}}</h3>
+ <div class="grid noHighlight" ui-grid="linkGrid" ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state></div>
</div>
</script>
@@ -87,7 +87,7 @@ under the License.
<div class="row-fluid">
<h3>Connections</h3>
<div class="overview">
- <div class="gridStyle" ng-grid="allConnectionGrid"></div>
+ <div class="grid" ui-grid="allConnectionGrid" ui-grid-selection ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state></div>
</div>
</div>
</script>
@@ -97,12 +97,12 @@ under the License.
<li ng-repeat="mode in gridModes" ng-click="selectMode(mode,'Connection')" ng-class="{active : isModeSelected(mode,'Connection')}" title="{{mode.title}}" ng-bind-html="mode.content"> </li>
</ul>
<div ng-if="isModeVisible('Connection','attributes')" class="selectedItems">
- <h3>Connection {{connection.data.title}}</h3>
- <div class="gridStyle noHighlight" ng-grid="connectionGrid"></div>
+ <h3>Connection {{connection.title}}</h3>
+ <div class="grid noHighlight" ui-grid="connectionGrid" ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state></div>
</div>
<div ng-if="isModeVisible('Connection','links')" class="selectedItems">
- <h3>Links for connection {{connection.data.title}}</h3>
- <div class="gridStyle" ng-grid="linksGrid"></div>
+ <h3>Links for connection {{connection.title}}</h3>
+ <div class="grid" ui-grid="linksGrid" ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state></div>
</div>
</div>
</script>
@@ -122,7 +122,7 @@ under the License.
<div class="row-fluid">
<h3>Recent log events</h3>
<div class="overview">
- <div class="gridStyle" ng-grid="allLogGrid"></div>
+ <div class="grid" ui-grid="allLogGrid" ui-grid-selection ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state></div>
</div>
</div>
</script>
@@ -130,13 +130,13 @@ under the License.
<div class="row-fluid">
<h3>{{logModule.module}} events</h3>
<div class="overview-cell">
- <div class="gridStyle" ng-grid="logModuleGrid"></div>
+ <div class="grid" ui-grid="logModuleGrid" ui-grid-auto-resize ui-grid-resize-columns ui-grid-save-state></div>
</div>
</div>
</script>
<script type="text/ng-template" id="log.html">
<div class="row-fluid">
- <h3>{{log.data.title}}</h3>
+ <h3>{{log.title}}</h3>
<div ng-if="logFields.length > 0">
<table class="log-entry" ng-repeat="entry in logFields track by $index">
<tr>
@@ -153,15 +153,14 @@ under the License.
</tr>
</table>
</div>
- <div ng-if="logFields.length == 0">No log entries for {{log.data.title}}</div>
+ <div ng-if="logFields.length == 0">No log entries for {{log.title}}</div>
</div>
</script>
<script type="text/ng-template" id="linkRowTemplate.html">
- <div ng-class="{linkDirIn: row.getProperty('linkDir') == 'in', linkDirOut: row.getProperty('linkDir') == 'out'}">
- <div ng-style="{ 'cursor': row.cursor }" ng-repeat="col in renderedColumns" ng-class="col.colIndex()" class="ngCell {{col.cellClass}}">
- <div class="ngVerticalBar" ng-style="{height: rowHeight}" ng-class="{ ngVerticalBarVisible: !$last }"> </div>
- <div ng-cell></div>
+ <div ng-class="{'linkDirIn': row.entity.linkDir == 'in', 'linkDirOut': row.entity.linkDir == 'out' }">
+ <div ng-repeat="(colRenderIndex, col) in colContainer.renderedColumns track by col.colDef.name"
+ class="ui-grid-cell" ng-class="{ 'ui-grid-row-header-cell': col.isRowHeader }" ui-grid-cell>
</div>
</div>
</script>
@@ -207,3 +206,4 @@ under the License.
<button class="btn btn-primary" type="button" ng-click="ok()">Close</button>
</div>
</script>
+
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[2/8] qpid-dispatch git commit: DISPATCH-801 Updated 3rd party UI
components to latest available via npm
Posted by ea...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/plugin/js/qdrTopology.js
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/js/qdrTopology.js b/console/stand-alone/plugin/js/qdrTopology.js
index 71516b5..a54540d 100644
--- a/console/stand-alone/plugin/js/qdrTopology.js
+++ b/console/stand-alone/plugin/js/qdrTopology.js
@@ -24,8 +24,9 @@ var QDR = (function(QDR) {
QDR.module.controller('QDR.TopologyFormController', function($scope, $rootScope, $timeout, QDRService) {
$scope.attributes = []
- var nameTemplate = '<div title="{{row.entity.description}}" class="ngCellText {{row.entity.cls}}"><span>{{row.entity.attributeName}}</span></div>';
- var valueTemplate = '<div title="{{row.entity.attributeValue}}" class="ngCellText {{row.entity.cls}}"><span>{{row.entity.attributeValue}}</span></div>';
+ var nameTemplate = '<div title="{{row.entity.description}}" class="ui-grid-cell-contents {{row.entity.cls}}">{{COL_FIELD CUSTOM_FILTERS | pretty}}</div>';
+ var valueTemplate = '<div title="{{row.entity.attributeValue}}" class="ui-grid-cell-contents {{row.entity.cls}}">{{COL_FIELD CUSTOM_FILTERS | pretty}}</div>';
+
$scope.topoGridOptions = {
data: 'attributes',
enableColumnResize: false,
@@ -43,8 +44,9 @@ var QDR = (function(QDR) {
};
$scope.form = 'router'
$scope.$on('showEntityForm', function(event, args) {
+console.log("showEntityForm " + args.entity)
var attributes = args.attributes;
- var entityTypes = QDRService.schema.entityTypes[args.entity].attributes;
+ var entityTypes = QDRService.management.schema().entityTypes[args.entity].attributes;
attributes.forEach(function(attr) {
attr.cls = ''
if (attr.attributeName === 'Listening on')
@@ -57,19 +59,24 @@ var QDR = (function(QDR) {
$scope.attributes = attributes;
$scope.form = args.entity;
})
+ $scope.infoStyle = function () {
+ return {
+ height: ($scope.attributes.length * 30 + 40) + "px"
+ }
+ }
})
/**
* @method TopologyController
*
* Controller that handles the QDR topology page
*/
- QDR.module.controller("QDR.TopologyController", ['$scope', '$rootScope', 'QDRService', '$location', '$timeout', '$uibModal',
- function($scope, $rootScope, QDRService, $location, $timeout, $uibModal) {
+ QDR.module.controller("QDR.TopologyController", ['$scope', '$rootScope', 'QDRService', '$location', '$timeout', '$uibModal', '$sce',
+ function($scope, $rootScope, QDRService, $location, $timeout, $uibModal, $sce) {
$scope.multiData = []
- $scope.selectedClient = [];
$scope.quiesceState = {}
var dontHide = false;
+ $scope.crosshtml = $sce.trustAsHtml("")
$scope.panelVisible = true // show/hide the panel on the left
$scope.hideLeftPane = function () {
@@ -130,22 +137,30 @@ var QDR = (function(QDR) {
return stateClassMap[$scope.quiesceState[row.entity.connectionId].state];
}
+ // This is the grid that shows each connection when a client node that represents multiple connections is clicked
$scope.multiData = []
$scope.multiDetails = {
data: 'multiData',
- selectedItems: $scope.selectedClient,
- multiSelect: false,
+ enableColumnResize: true,
jqueryUIDraggable: true,
- afterSelectionChange: function(obj) {
- if (obj.selected && obj.orig) {
- var detailsDiv = d3.select('#link_details')
- var isVis = detailsDiv.style('display') === 'block';
- if (!dontHide && isVis && $scope.connectionId === obj.entity.connectionId) {
- hideLinkDetails();
- return;
- }
- dontHide = false;
- $scope.multiDetails.showLinksList(obj)
+ enablePaging: false,
+ multiSelect: false,
+ enableSelectAll: false,
+ enableSelectionBatchEvent: false,
+ enableRowHeaderSelection: false,
+ noUnselect: true,
+ onRegisterApi: function (gridApi) {
+ if (gridApi.selection) {
+ gridApi.selection.on.rowSelectionChanged($scope, function(row){
+ var detailsDiv = d3.select('#link_details')
+ var isVis = detailsDiv.style('display') === 'block';
+ if (!dontHide && isVis && $scope.connectionId === row.entity.connectionId) {
+ hideLinkDetails();
+ return;
+ }
+ dontHide = false;
+ $scope.multiDetails.showLinksList(row)
+ })
}
},
showLinksList: function(obj) {
@@ -153,7 +168,7 @@ var QDR = (function(QDR) {
$scope.connectionId = obj.entity.connectionId;
var visibleLen = Math.min(obj.entity.linkData.length, 10)
//QDR.log.debug("visibleLen is " + visibleLen)
- var left = parseInt(d3.select('#multiple_details').style("left"))
+ var left = parseInt(d3.select('#multiple_details').style("left"), 10)
var offset = jQuery('#topology').offset();
var detailsDiv = d3.select('#link_details')
detailsDiv
@@ -207,17 +222,17 @@ var QDR = (function(QDR) {
columnDefs: [{
field: 'host',
cellTemplate: "titleCellTemplate.html",
- headerCellTemplate: 'titleHeaderCellTemplate.html',
+ //headerCellTemplate: 'titleHeaderCellTemplate.html',
displayName: 'Connection host'
}, {
field: 'user',
cellTemplate: "titleCellTemplate.html",
- headerCellTemplate: 'titleHeaderCellTemplate.html',
+ //headerCellTemplate: 'titleHeaderCellTemplate.html',
displayName: 'User'
}, {
field: 'properties',
cellTemplate: "titleCellTemplate.html",
- headerCellTemplate: 'titleHeaderCellTemplate.html',
+ //headerCellTemplate: 'titleHeaderCellTemplate.html',
displayName: 'Properties'
}
/*,
@@ -235,7 +250,14 @@ var QDR = (function(QDR) {
return stateClassMap[row.entity.adminStatus]
}
$scope.quiesceLink = function(row) {
- QDRService.quiesceLink(row.entity.nodeId, row.entity.name);
+ QDRService.management.topology.quiesceLink(row.entity.nodeId, row.entity.name)
+ .then( function (results, context) {
+ var statusCode = context.message.application_properties.statusCode;
+ if (statusCode < 200 || statusCode >= 300) {
+ Core.notification('error', context.message.statusDescription);
+ QDR.log.info('Error ' + context.message.statusDescription)
+ }
+ })
}
$scope.quiesceLinkDisabled = function(row) {
return (row.entity.operStatus !== 'up' && row.entity.operStatus !== 'down')
@@ -287,20 +309,6 @@ var QDR = (function(QDR) {
]
}
- if (!QDRService.connected) {
- // we are not connected. we probably got here from a bookmark or manual page reload
- QDRService.redirectWhenConnected("topology");
- return;
- }
- // we are currently connected. setup a handler to get notified if we are ever disconnected
- var onDisconnect = function () {
- //QDR.log.info("we were just disconnected while on the topology page. Setting org to redirect back once we are connected again")
- $timeout(function () {
- QDRService.redirectWhenConnected("topology")
- })
- }
- QDRService.addDisconnectAction( onDisconnect )
-
var urlPrefix = $location.absUrl();
urlPrefix = urlPrefix.split("#")[0]
QDR.log.debug("started QDR.TopologyController with urlPrefix: " + urlPrefix);
@@ -345,7 +353,7 @@ var QDR = (function(QDR) {
var mouseX, mouseY;
var relativeMouse = function () {
- var offset = jQuery('#topology').offset();
+ var offset = $('#main_container').offset();
return {left: (mouseX + $(document).scrollLeft()) - 1,
top: (mouseY + $(document).scrollTop()) - 1,
offset: offset
@@ -463,7 +471,7 @@ var QDR = (function(QDR) {
return nodes[i]
}
}
- var routerId = QDRService.nameFromId(id)
+ var routerId = QDRService.management.topology.nameFromId(id)
return {
key: id,
name: name,
@@ -505,13 +513,13 @@ var QDR = (function(QDR) {
}
var getLinkDir = function (id, connection, onode) {
- var links = onode[".router.link"]
+ var links = onode["router.link"]
if (!links) {
return "unknown"
}
var inCount = 0, outCount = 0
links.results.forEach( function (linkResult) {
- var link = QDRService.flatten(links.attributeNames, linkResult)
+ var link = QDRService.utilities.flatten(links.attributeNames, linkResult)
if (link.linkType === "endpoint" && link.connectionId === connection.identity)
if (link.linkDir === "in")
++inCount
@@ -542,7 +550,7 @@ var QDR = (function(QDR) {
var yInit = 50;
nodes = []
for (var id in nodeInfo) {
- var name = QDRService.nameFromId(id);
+ var name = QDRService.management.topology.nameFromId(id);
// if we have any new nodes, animate the force graph to position them
var position = angular.fromJson(localStorage[name]);
if (!angular.isDefined(position)) {
@@ -568,15 +576,15 @@ var QDR = (function(QDR) {
var client = 1.0;
for (var id in nodeInfo) {
var onode = nodeInfo[id];
- if (!onode['.connection'])
+ if (!onode['connection'])
continue
- var conns = onode['.connection'].results;
- var attrs = onode['.connection'].attributeNames;
+ var conns = onode['connection'].results;
+ var attrs = onode['connection'].attributeNames;
//QDR.log.debug("external client parent is " + parent);
var normalsParent = {}; // 1st normal node for this parent
for (var j = 0; j < conns.length; j++) {
- var connection = QDRService.flatten(attrs, conns[j])
+ var connection = QDRService.utilities.flatten(attrs, conns[j])
var role = connection.role
var properties = connection.properties || {};
var dir = connection.dir
@@ -588,7 +596,7 @@ var QDR = (function(QDR) {
}
} else if (role == "normal" || role == "on-demand" || role === "route-container") {
// not an connection between routers, but an external connection
- var name = QDRService.nameFromId(id) + "." + connection.identity;
+ var name = QDRService.management.topology.nameFromId(id) + "." + connection.identity;
// if we have any new clients, animate the force graph to position them
var position = angular.fromJson(localStorage[name]);
@@ -607,7 +615,7 @@ var QDR = (function(QDR) {
var existingNodeIndex = nodeExists(connection.container)
var normalInfo = normalExists(connection.container)
var node = aNode(id, name, role, nodeInfo, nodes.length, position.x, position.y, connection.container, j, position.fixed, properties)
- var nodeType = QDRService.isAConsole(properties, connection.identity, role, node.key) ? "console" : "client"
+ var nodeType = QDRService.utilities.isAConsole(properties, connection.identity, role, node.key) ? "console" : "client"
var cdir = getLinkDir(id, connection, onode)
if (existingNodeIndex >= 0) {
// make a link between the current router (source) and the existing node
@@ -691,7 +699,7 @@ var QDR = (function(QDR) {
var initForceGraph = function() {
nodes = [];
links = [];
- var nodeInfo = QDRService.topology.nodeInfo();
+ var nodeInfo = QDRService.management.topology.nodeInfo();
var nodeCount = Object.keys(nodeInfo).length
var oldSelectedNode = selected_node
@@ -738,7 +746,7 @@ var QDR = (function(QDR) {
// initialize the list of links
var unknowns = []
initializeLinks(nodeInfo, unknowns)
- $scope.schema = QDRService.schema;
+ $scope.schema = QDRService.management.schema();
// init D3 force layout
force = d3.layout.force()
.nodes(nodes)
@@ -805,7 +813,7 @@ var QDR = (function(QDR) {
d3.selectAll('circle.inter-router').each(function (d) {
if (d.key === oldMouseoverNode.key) {
mouseover_node = d
- QDRService.ensureAllEntities([{entity: ".router.node", attrs: ["id","nextHop"]}], function () {
+ QDRService.management.topology.ensureAllEntities([{entity: "router.node", attrs: ["id","nextHop"]}], function () {
nextHop(selected_node, d);
restart();
})
@@ -813,7 +821,7 @@ var QDR = (function(QDR) {
})
}
setTimeout(function () {
- updateForm(Object.keys(QDRService.topology.nodeInfo())[0], 'router', 0);
+ updateForm(Object.keys(QDRService.management.topology.nodeInfo())[0], 'router', 0);
})
// if any clients don't yet have link directions, get the links for those nodes and restart the graph
@@ -838,7 +846,8 @@ var QDR = (function(QDR) {
}
unknownNodes = Object.keys(unknownNodes)
//QDR.log.info("-- resolveUnknowns: ensuring .connection and .router.link are present for each node")
- QDRService.ensureEntities(unknownNodes, [{entity: ".connection", force: true}, {entity: ".router.link", attrs: ["linkType","connectionId","linkDir"], force: true}], function () {
+ QDRService.management.topology.ensureEntities(unknownNodes, [{entity: "connection", force: true}, {entity: "router.link", attrs: ["linkType","connectionId","linkDir"], force: true}], function () {
+ nodeInfo = QDRService.management.topology.nodeInfo()
initializeLinks(nodeInfo, [])
// collapse any router-container nodes that are duplicates
animate = true;
@@ -848,14 +857,23 @@ var QDR = (function(QDR) {
}
function updateForm(key, entity, resultIndex) {
- var nodeInfo = QDRService.topology.nodeInfo();
- if (key in nodeInfo) {
- QDRService.ensureEntities(key, [
- {entity: '.'+entity},
- {entity: '.listener', attrs: ["role", "port"]}], function () {
+ if (!angular.isDefined(resultIndex))
+ return;
+ var nodeList = QDRService.management.topology.nodeIdList()
+ if (nodeList.indexOf(key) > -1) {
+ QDRService.management.topology.ensureEntities(key, [
+ {entity: entity},
+ {entity: 'listener', attrs: ["role", "port"]}], function () {
+ nodeInfo = QDRService.management.topology.nodeInfo();
var onode = nodeInfo[key]
- var nodeResults = onode['.' + entity].results[resultIndex]
- var nodeAttributes = onode['.' + entity].attributeNames
+ if (!onode[entity]) {
+ console.log("requested " + entity + " but didn't get it")
+ console.dump(nodeInfo)
+ return
+ }
+
+ var nodeResults = onode[entity].results[resultIndex]
+ var nodeAttributes = onode[entity].attributeNames
var attributes = nodeResults.map(function(row, i) {
return {
attributeName: nodeAttributes[i],
@@ -876,14 +894,14 @@ var QDR = (function(QDR) {
// get the list of ports this router is listening on
if (entity === 'router') {
- var listeners = onode['.listener'].results;
- var listenerAttributes = onode['.listener'].attributeNames;
+ var listeners = onode['listener'].results;
+ var listenerAttributes = onode['listener'].attributeNames;
var normals = listeners.filter(function(listener) {
- return QDRService.valFor(listenerAttributes, listener, 'role') === 'normal';
+ return QDRService.utilities.valFor(listenerAttributes, listener, 'role') === 'normal';
})
var ports = []
normals.forEach(function(normalListener) {
- ports.push(QDRService.valFor(listenerAttributes, normalListener, 'port'))
+ ports.push(QDRService.utilities.valFor(listenerAttributes, normalListener, 'port'))
})
// add as 2nd row
if (ports.length) {
@@ -906,7 +924,7 @@ var QDR = (function(QDR) {
function getContainerIndex(_id, nodeInfo) {
var nodeIndex = 0;
for (var id in nodeInfo) {
- if (QDRService.nameFromId(id) === _id)
+ if (QDRService.management.topology.nameFromId(id) === _id)
return nodeIndex;
++nodeIndex;
}
@@ -1025,7 +1043,7 @@ var QDR = (function(QDR) {
return selected_node;
//QDR.log.debug("finding nextHop from: " + from.name + " to " + d.name);
- var sInfo = QDRService.topology.nodeInfo()[from.key];
+ var sInfo = QDRService.management.topology.nodeInfo()[from.key];
if (!sInfo) {
QDR.log.warn("unable to find topology node info for " + from.key);
@@ -1033,15 +1051,15 @@ var QDR = (function(QDR) {
}
// find the hovered name in the selected name's .router.node results
- if (!sInfo['.router.node'])
+ if (!sInfo['router.node'])
return null;
- var aAr = sInfo['.router.node'].attributeNames;
- var vAr = sInfo['.router.node'].results;
+ var aAr = sInfo['router.node'].attributeNames;
+ var vAr = sInfo['router.node'].results;
for (var hIdx = 0; hIdx < vAr.length; ++hIdx) {
- var addrT = QDRService.valFor(aAr, vAr[hIdx], "id");
+ var addrT = QDRService.utilities.valFor(aAr, vAr[hIdx], "id");
if (addrT == d.name) {
//QDR.log.debug("found " + d.name + " at " + hIdx);
- var nextHop = QDRService.valFor(aAr, vAr[hIdx], "nextHop");
+ var nextHop = QDRService.utilities.valFor(aAr, vAr[hIdx], "nextHop");
//QDR.log.debug("nextHop was " + nextHop);
return (nextHop == null) ? nodeFor(addrT) : nodeFor(nextHop);
}
@@ -1082,10 +1100,6 @@ var QDR = (function(QDR) {
}
function removeCrosssection() {
- setTimeout(function() {
- d3.select("[id^=tooltipsy]").remove()
- $('.hastip').empty();
- }, 1010);
d3.select("#crosssection svg g").transition()
.duration(1000)
.attr("transform", "scale(0)")
@@ -1165,33 +1179,32 @@ var QDR = (function(QDR) {
return d.cls == 'small';
})
.on('mouseover', function(d) { // mouse over a path
- //QDR.log.debug("showing connections form");
+ QDR.log.info("mouseover a path");
var resultIndex = 0; // the connection to use
var left = d.left ? d.target : d.source;
// right is the node that the arrow points to, left is the other node
var right = d.left ? d.source : d.target;
- var onode = QDRService.topology.nodeInfo()[left.key];
+ var onode = QDRService.management.topology.nodeInfo()[left.key];
// loop through all the connections for left, and find the one for right
- if (!onode || !onode['.connection'])
+ if (!onode || !onode['connection'])
return;
// update the info dialog for the link the mouse is over
if (!selected_node && !selected_link) {
- for (resultIndex = 0; resultIndex < onode['.connection'].results.length; ++resultIndex) {
- var conn = onode['.connection'].results[resultIndex];
+ for (resultIndex = 0; resultIndex < onode['connection'].results.length; ++resultIndex) {
+ var conn = onode['connection'].results[resultIndex];
/// find the connection whose container is the right's name
- var name = QDRService.valFor(onode['.connection'].attributeNames, conn, "container");
+ var name = QDRService.utilities.valFor(onode['connection'].attributeNames, conn, "container");
if (name == right.routerId) {
break;
}
}
// did not find connection. this is a connection to a non-interrouter node
- if (resultIndex === onode['.connection'].results.length) {
+ if (resultIndex === onode['connection'].results.length) {
// use the non-interrouter node's connection info
left = d.target;
resultIndex = left.resultIndex;
}
- if (resultIndex)
- updateForm(left.key, 'connection', resultIndex);
+ updateForm(left.key, 'connection', resultIndex);
}
mousedown_link = d;
@@ -1217,6 +1230,7 @@ var QDR = (function(QDR) {
.value(function(d) { return d.size; });
d3.select("#crosssection svg").remove();
+ //var svg = d3.select(document.createElement('div'))
var svg = d3.select("#crosssection").append("svg")
.attr("width", diameter)
.attr("height", diameter)
@@ -1227,8 +1241,8 @@ var QDR = (function(QDR) {
name: " Links between " + d.source.name + " and " + d.target.name,
children: []
}
- var nodeInfo = QDRService.topology.nodeInfo();
- var connections = nodeInfo[d.source.key]['.connection'];
+ var nodeInfo = QDRService.management.topology.nodeInfo();
+ var connections = nodeInfo[d.source.key]['connection'];
var containerIndex = connections.attributeNames.indexOf('container');
connections.results.some ( function (connection) {
if (connection[containerIndex] == d.target.routerId) {
@@ -1241,7 +1255,7 @@ var QDR = (function(QDR) {
})
// find router.links where link.remoteContainer is d.source.name
- var links = nodeInfo[d.source.key]['.router.link'];
+ var links = nodeInfo[d.source.key]['router.link'];
var identityIndex = connections.attributeNames.indexOf('identity')
var roleIndex = connections.attributeNames.indexOf('role')
var connectionIdIndex = links.attributeNames.indexOf('connectionId');
@@ -1269,28 +1283,37 @@ var QDR = (function(QDR) {
.enter().append("g")
.attr("class", function(d) { return d.children ? "parent node hastip" : "leaf node hastip"; })
.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")" + (!d.children ? "scale(0.9)" : ""); })
- .attr("title", function (d) {
- var title = "<h4>" + d.desc + "</h4><table class='tiptable'><tbody>";
- if (d.attributeNames)
- d.attributeNames.forEach( function (n, i) {
- title += "<tr><td>" + n + "</td><td>";
- title += d.obj[i] != null ? d.obj[i] : '';
- title += '</td></tr>';
- })
- title += "</tbody></table>"
- return title
- })
node.append("circle")
- .attr("r", function(d) { return d.r; });
+ .attr("r", function(d) { return d.r; })
+
+ node.on('mouseenter', function (d) {
+ var title = "<h4>" + d.desc + "</h4><table class='tiptable'><tbody>";
+ if (d.attributeNames)
+ d.attributeNames.forEach( function (n, i) {
+ title += "<tr><td>" + n + "</td><td>";
+ title += d.obj[i] != null ? d.obj[i] : '';
+ title += '</td></tr>';
+ })
+ title += "</tbody></table>"
+ $timeout( (function () {
+ $scope.crosshtml = $sce.trustAsHtml(title)
+ $('#crosshtml').show()
+ var parent = $("#crosssection")
+ var ppos = parent.position()
+ var mleft = ppos.left + parent.width()
+ $('#crosshtml').css({left: mleft, top: ppos.top})
+ }).bind(this))
+ })
+ node.on('mouseout', function (d) {
+ $('#crosshtml').hide()
+ })
- // node.filter(function(d) { return !d.children; }).append("text")
node.append("text")
.attr("dy", function (d) { return d.children ? "-10em" : ".5em"})
.style("text-anchor", "middle")
.text(function(d) {
return d.name.substring(0, d.r / 3);
});
- $('.hastip').tooltipsy({ alignTo: 'cursor'});
svgg.attr("transform", "translate(2,2) scale(0.01)")
var bounds = $("#topology").position()
@@ -1305,7 +1328,7 @@ var QDR = (function(QDR) {
d3.selectAll("#crosssection g.leaf text").attr("dy", ".3em")
})
}
- QDRService.ensureEntities(d.source.key, {entity: '.router.link', force: true}, showCrossSection)
+ QDRService.management.topology.ensureEntities(d.source.key, {entity: 'router.link', force: true}, showCrossSection)
})
// remove old links
path.exit().remove();
@@ -1343,7 +1366,7 @@ var QDR = (function(QDR) {
return radii[d.nodeType]
})
.attr('fill', function (d) {
- if (d.cdir === 'both' && !QDRService.isConsole(d)) {
+ if (d.cdir === 'both' && !QDRService.utilities.isConsole(d)) {
return 'url(' + urlPrefix + '#half-circle)'
}
return null;
@@ -1352,7 +1375,7 @@ var QDR = (function(QDR) {
return d.fixed & 1
})
.classed('normal', function(d) {
- return d.nodeType == 'normal' || QDRService.isConsole(d)
+ return d.nodeType == 'normal' || QDRService.utilities.isConsole(d)
})
.classed('in', function(d) {
return d.cdir == 'in'
@@ -1370,16 +1393,16 @@ var QDR = (function(QDR) {
return d.nodeType == 'on-demand'
})
.classed('console', function(d) {
- return QDRService.isConsole(d)
+ return QDRService.utilities.isConsole(d)
})
.classed('artemis', function(d) {
- return QDRService.isArtemis(d)
+ return QDRService.utilities.isArtemis(d)
})
.classed('qpid-cpp', function(d) {
- return QDRService.isQpid(d)
+ return QDRService.utilities.isQpid(d)
})
.classed('route-container', function (d) {
- return (!QDRService.isArtemis(d) && !QDRService.isQpid(d) && d.nodeType === 'route-container')
+ return (!QDRService.utilities.isArtemis(d) && !QDRService.utilities.isQpid(d) && d.nodeType === 'route-container')
})
.classed('client', function(d) {
return d.nodeType === 'normal' && !d.properties.console_identifier
@@ -1411,7 +1434,7 @@ var QDR = (function(QDR) {
}
clerAllHighlights()
// we need .router.node info to highlight hops
- QDRService.ensureAllEntities([{entity: ".router.node", attrs: ["id","nextHop"]}], function () {
+ QDRService.management.topology.ensureAllEntities([{entity: "router.node", attrs: ["id","nextHop"]}], function () {
mouseover_node = d // save this node in case the topology changes so we can restore the highlights
nextHop(selected_node, d);
restart();
@@ -1475,7 +1498,7 @@ var QDR = (function(QDR) {
restart() // redraw the node without a dashed line
force.start(); // let the nodes move to a new position
}
- if (QDRService.nameFromId(d.key) == '__internal__') {
+ if (QDRService.management.topology.nameFromId(d.key) == '__internal__') {
editNode();
if (!$scope.$$phase) $scope.$apply()
}
@@ -1483,13 +1506,16 @@ var QDR = (function(QDR) {
.on("contextmenu", function(d) { // circle
$(document).click();
d3.event.preventDefault();
- $scope.contextNode = d
var rm = relativeMouse()
d3.select('#node_context_menu')
- .style('left', rm.left + "px")
- .style('top', (rm.top - rm.offset.top) + "px")
- .style('display', 'block');
- if (!$scope.$$phase) $scope.$apply()
+ .style({
+ display: 'block',
+ left: rm.left + "px",
+ top: (rm.top - rm.offset.top) + "px"
+ })
+ $timeout( function () {
+ $scope.contextNode = d
+ })
})
.on("click", function(d) { // circle
if (!mouseup_node)
@@ -1498,7 +1524,7 @@ var QDR = (function(QDR) {
clearPopups();
if (!d.normals) {
// circle was a router or a broker
- if (QDRService.isArtemis(d)) {
+ if (QDRService.utilities.isArtemis(d)) {
var artemisPath = '/jmx/attributes?tab=artemis&con=Artemis'
if (QDR.isStandalone)
window.location = $location.protocol() + '://localhost:8161/hawtio' + artemisPath
@@ -1520,9 +1546,9 @@ var QDR = (function(QDR) {
.attr('x', 0)
.attr('y', function(d) {
var y = 7;
- if (QDRService.isArtemis(d))
+ if (QDRService.utilities.isArtemis(d))
y = 8;
- else if (QDRService.isQpid(d))
+ else if (QDRService.utilities.isQpid(d))
y = 9;
else if (d.nodeType === 'inter-router')
y = 4;
@@ -1532,7 +1558,7 @@ var QDR = (function(QDR) {
})
.attr('class', 'id')
.classed('console', function(d) {
- return QDRService.isConsole(d)
+ return QDRService.utilities.isConsole(d)
})
.classed('normal', function(d) {
return d.nodeType === 'normal'
@@ -1541,17 +1567,17 @@ var QDR = (function(QDR) {
return d.nodeType === 'on-demand'
})
.classed('artemis', function(d) {
- return QDRService.isArtemis(d)
+ return QDRService.utilities.isArtemis(d)
})
.classed('qpid-cpp', function(d) {
- return QDRService.isQpid(d)
+ return QDRService.utilities.isQpid(d)
})
.text(function(d) {
- if (QDRService.isConsole(d)) {
+ if (QDRService.utilities.isConsole(d)) {
return '\uf108'; // icon-desktop for this console
- } else if (QDRService.isArtemis(d)) {
+ } else if (QDRService.utilities.isArtemis(d)) {
return '\ue900'
- } else if (QDRService.isQpid(d)) {
+ } else if (QDRService.utilities.isQpid(d)) {
return '\ue901';
} else if (d.nodeType === 'route-container') {
return d.properties.product ? d.properties.product[0].toUpperCase() : 'S'
@@ -1568,9 +1594,9 @@ var QDR = (function(QDR) {
var x = '';
if (d.normals && d.normals.length > 1)
x = " x " + d.normals.length;
- if (QDRService.isConsole(d)) {
+ if (QDRService.utilities.isConsole(d)) {
return 'Dispatch console' + x
- } else if (QDRService.isArtemis(d)) {
+ } else if (QDRService.utilities.isArtemis(d)) {
return 'Broker - Artemis' + x
} else if (d.properties.product == 'qpid-cpp') {
return 'Broker - qpid-cpp' + x
@@ -1701,7 +1727,7 @@ var QDR = (function(QDR) {
// called after each topology update
var extendConnections = function() {
// force a fetch of the links for this node
- QDRService.ensureEntities(d.key, {entity: ".router.link", force: true}, function () {
+ QDRService.management.topology.ensureEntities(d.key, {entity: "router.link", force: true}, function () {
// the links for this node are now available
$scope.multiData = []
var normals = d.normals;
@@ -1714,15 +1740,15 @@ var QDR = (function(QDR) {
});
if (normals) {
normals.forEach(function(n) {
- var nodeInfo = QDRService.topology.nodeInfo();
- var links = nodeInfo[n.key]['.router.link'];
+ var nodeInfo = QDRService.management.topology.nodeInfo();
+ var links = nodeInfo[n.key]['router.link'];
var linkTypeIndex = links.attributeNames.indexOf('linkType');
var connectionIdIndex = links.attributeNames.indexOf('connectionId');
n.linkData = [];
links.results.forEach(function(link) {
if (link[linkTypeIndex] === 'endpoint' && link[connectionIdIndex] === n.connectionId) {
var l = {};
- var ll = QDRService.flatten(links.attributeNames, link)
+ var ll = QDRService.utilities.flatten(links.attributeNames, link)
l.owningAddr = ll.owningAddr
l.dir = ll.linkDir
if (l.owningAddr && l.owningAddr.length > 2)
@@ -1732,7 +1758,7 @@ var QDR = (function(QDR) {
l.owningAddr = l.owningAddr.substr(1)
l.deliveryCount = ll.deliveryCount
- l.uncounts = QDRService.pretty(ll.undeliveredCount + ll.unsettledCount)
+ l.uncounts = QDRService.utilities.pretty(ll.undeliveredCount + ll.unsettledCount)
l.adminStatus = ll.adminStatus;
l.operStatus = ll.operStatus;
l.identity = ll.identity
@@ -1786,8 +1812,18 @@ var QDR = (function(QDR) {
})
})
}
+ $scope.connectionsStyle = function () {
+ return {
+ height: ($scope.multiData.length * 30 + 40) + "px"
+ }
+ }
+ $scope.linksStyle = function () {
+ return {
+ height: ($scope.linkData.length * 30 + 40) + "px"
+ }
+ }
// register a notification function for when the topology is updated
- QDRService.addUpdatedAction("normalsStats", extendConnections)
+ QDRService.management.topology.addUpdatedAction("normalsStats", extendConnections)
// call the function that gets the links right now
extendConnections();
clearPopups();
@@ -1804,11 +1840,11 @@ var QDR = (function(QDR) {
display: display,
opacity: 1,
left: rm.left + "px",
- top: rm.top + "px"
+ top: (rm.top - rm.offset.top) + "px"
})
if (d.normals.length === 1) {
// simulate a click on the connection to popup the link details
- QDRService.ensureEntities(d.key, {entity: ".router.link", force: true}, function () {
+ QDRService.management.topology.ensureEntities(d.key, {entity: "router.link", force: true}, function () {
$scope.multiDetails.showLinksList({
entity: d
})
@@ -1816,7 +1852,7 @@ var QDR = (function(QDR) {
}
}
var stopUpdateConnectionsGrid = function() {
- QDRService.delUpdatedAction("normalsStats");
+ QDRService.management.topology.delUpdatedAction("normalsStats");
}
var initConnState = function(id) {
@@ -1868,16 +1904,32 @@ var QDR = (function(QDR) {
function hasChanged() {
// Don't update the underlying topology diagram if we are adding a new node.
// Once adding is completed, the topology will update automatically if it has changed
- var nodeInfo = QDRService.topology.nodeInfo();
- if (Object.keys(nodeInfo).length != Object.keys(savedKeys).length)
- return Object.keys(nodeInfo).length > Object.keys(savedKeys).length ? 1 : -1;
+ var nodeInfo = QDRService.management.topology.nodeInfo();
+ // don't count the nodes without connection info
+ var cnodes = Object.keys(nodeInfo).filter ( function (node) {
+ return (nodeInfo[node]['connection'])
+ })
+ var routers = nodes.filter( function (node) {
+ return node.nodeType === 'inter-router'
+ })
+ if (routers.length > cnodes.length) {
+ return -1
+ }
+
+
+ if (cnodes.length != Object.keys(savedKeys).length) {
+ return cnodes.length > Object.keys(savedKeys).length ? 1 : -1;
+ }
// we may have dropped a node and added a different node in the same update cycle
- for (var key in nodeInfo) {
+ for (var i=0; i<cnodes.length; i++) {
+ var key = cnodes[i]
// if this node isn't in the saved node list
if (!savedKeys.hasOwnProperty(key))
return 1;
// if the number of connections for this node chaanged
- if (nodeInfo[key]['.connection'].results.length != savedKeys[key]) {
+ if (!nodeInfo[key]['connection'])
+ return -1
+ if (nodeInfo[key]['connection'].results.length != savedKeys[key]) {
return -1;
}
}
@@ -1886,14 +1938,12 @@ var QDR = (function(QDR) {
function saveChanged() {
savedKeys = {};
- var nodeInfo = QDRService.topology.nodeInfo();
+ var nodeInfo = QDRService.management.topology.nodeInfo();
// save the number of connections per node
for (var key in nodeInfo) {
- if (nodeInfo[key]['.connection'])
- savedKeys[key] = nodeInfo[key]['.connection'].results.length;
+ if (nodeInfo[key]['connection'])
+ savedKeys[key] = nodeInfo[key]['connection'].results.length;
}
- //QDR.log.debug("saving current keys");
- //console.dump(savedKeys);
};
// we are about to leave the page, save the node positions
$rootScope.$on('$locationChangeStart', function(event, newUrl, oldUrl) {
@@ -1906,11 +1956,10 @@ var QDR = (function(QDR) {
$scope.$on("$destroy", function(event) {
//QDR.log.debug("scope on destroy");
savePositions();
- QDRService.setUpdateEntities([])
- QDRService.stopUpdating();
- QDRService.delUpdatedAction("normalsStats");
- QDRService.delUpdatedAction("topology");
- QDRService.delDisconnectAction( onDisconnect )
+ QDRService.management.topology.setUpdateEntities([])
+ QDRService.management.topology.stopUpdating();
+ QDRService.management.topology.delUpdatedAction("normalsStats");
+ QDRService.management.topology.delUpdatedAction("topology");
d3.select("#SVG_ID").remove();
window.removeEventListener('resize', resize);
@@ -1918,25 +1967,26 @@ var QDR = (function(QDR) {
function handleInitialUpdate() {
// we only need to update connections during steady-state
- QDRService.setUpdateEntities([".connection"])
+ QDRService.management.topology.setUpdateEntities(["connection"])
// we currently have all entities available on all routers
saveChanged();
- animate = true;
initForceGraph();
// after the graph is displayed fetch all .router.node info. This is done so highlighting between nodes
// doesn't incur a delay
- QDRService.ensureAllEntities([{entity: ".router.node", attrs: ["id","nextHop"]}], function () {})
+ QDRService.management.topology.addUpdateEntities({entity: "router.node", attrs: ["id","nextHop"]})
// call this function every time a background update is done
- QDRService.addUpdatedAction("topology", function() {
+ QDRService.management.topology.addUpdatedAction("topology", function() {
var changed = hasChanged()
// there is a new node, we need to get all of it's entities before drawing the graph
if (changed > 0) {
- QDRService.delUpdatedAction("topology")
+ QDRService.management.topology.delUpdatedAction("topology")
+ animate = true;
setupInitialUpdate()
} else if (changed === -1) {
// we lost a node (or a client), we can draw the new svg immediately
+ animate = false;
saveChanged();
- var nodeInfo = QDRService.topology.nodeInfo();
+ var nodeInfo = QDRService.management.topology.nodeInfo();
initializeNodes(nodeInfo)
var unknowns = []
@@ -1946,7 +1996,6 @@ var QDR = (function(QDR) {
}
else {
force.nodes(nodes).links(links).start();
- animate = true;
restart();
}
@@ -1960,14 +2009,21 @@ var QDR = (function(QDR) {
function setupInitialUpdate() {
// make sure all router nodes have .connection info. if not then fetch any missing info
- QDRService.ensureAllEntities(
+ QDRService.management.topology.ensureAllEntities(
// [{entity: ".connection"}, {entity: ".router.lin.router.link", attrs: ["linkType","connectionId","linkDir"]}],
- [{entity: ".connection"}],
+ [{entity: "connection"}],
//[{entity: ".connection"}],
handleInitialUpdate)
}
+ if (!QDRService.management.connection.is_connected()) {
+ // we are not connected. we probably got here from a bookmark or manual page reload
+ QDR.redirectWhenConnected($location, "topology");
+ return;
+ }
+
+ animate = true;
setupInitialUpdate();
- QDRService.startUpdating();
+ QDRService.management.topology.startUpdating(false);
}
]);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[5/8] qpid-dispatch git commit: DISPATCH-801 Updated 3rd party UI
components to latest available via npm
Posted by ea...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/plugin/html/qdrTopology.html
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/html/qdrTopology.html b/console/stand-alone/plugin/html/qdrTopology.html
index 851c724..472ad9c 100644
--- a/console/stand-alone/plugin/html/qdrTopology.html
+++ b/console/stand-alone/plugin/html/qdrTopology.html
@@ -20,12 +20,16 @@ under the License.
<div class="qdr-topology pane left" ng-controller="QDR.TopologyFormController">
<div id="topologyForm" ng-class="{selected : isSelected()}">
<div ng-if="form == 'router'">
- <h4>Router Info</h4>
- <div class="gridStyle" ng-grid="topoGridOptions"></div>
+ <h4 uib-popover="This is popover text"
+ popover-title="The title"
+ popover-trigger="'mouseenter'"
+ popover-append-to-body="true">
+ Router Info</h4>
+ <div class="grid" ui-grid="topoGridOptions" ui-grid-auto-resize ng-style="infoStyle()"></div>
</div>
<div ng-if="form == 'connection'">
<h4>Connection Info</h4>
- <div class="gridStyle" ng-grid="topoGridOptions"></div>
+ <div class="grid" ui-grid="topoGridOptions" ui-grid-auto-resize ng-style="infoStyle()"></div>
</div>
</div>
<button ng-if="panelVisible" ng-click="hideLeftPane()" class="hideLeft" title="Hide"><i class="icon-step-backward"></i></button>
@@ -33,7 +37,8 @@ under the License.
</div>
<div class="panel-adjacent">
<div id="topology"><!-- d3 toplogy here --></div>
- <div id="crosssection"><!-- d3 pack here --></div>
+ <div id="crosssection"></div><div id="crosshtml" ng-bind-html="crosshtml"></div>
+
<div id="node_context_menu" class="contextMenu">
<ul>
<li class="na" ng-class="{'force-display': !isFixed()}" ng-click="setFixed(true)">Freeze in place</li>
@@ -43,11 +48,11 @@ under the License.
<div id="svg_legend"></div>
<div id="multiple_details">
<h4 class="grid-title">Connections</h4>
- <div class="gridStyle" ng-grid="multiDetails"></div>
+ <div class="grid" ui-grid="multiDetails" ui-grid-selection ui-grid-auto-resize ng-style="connectionsStyle()"></div>
</div>
<div id="link_details">
<h4 class="grid-title">Links</h4>
- <div class="gridStyle" ng-grid="linkDetails"></div>
+ <div class="grid" ui-grid="linkDetails" ui-grid-auto-resize ng-style="linksStyle()"></div>
</div>
</div>
</div>
@@ -61,5 +66,5 @@ under the License.
</div>
</script>
<script type="text/ng-template" id="titleCellTemplate.html">
- <div title="{{row.entity[col.field]}}" class="ngCellText">{{row.entity[col.field]}}</div>
+ <div title="{{row.entity.attributeValue}}" class="ui-grid-cell-contents">{{COL_FIELD CUSTOM_FILTERS | pretty}}</div>
</script>
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/plugin/html/tmplListTree.html
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/html/tmplListTree.html b/console/stand-alone/plugin/html/tmplListTree.html
index f00ea19..64797fa 100644
--- a/console/stand-alone/plugin/html/tmplListTree.html
+++ b/console/stand-alone/plugin/html/tmplListTree.html
@@ -17,10 +17,10 @@
under the License
-->
-<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2" style="min-height: 990px;">
+<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ng-include src="'listGrid.html'"></ng-include>
</div>
-<div class="col-sm-3 col-md-2 col-sm-pull-9 col-md-pull-10 sidebar-pf sidebar-pf-left" style="min-height: 990px;">
+<div class="qdr-attributes col-sm-3 col-md-2 col-sm-pull-9 col-md-pull-10 sidebar-pf sidebar-pf-left">
<div class="pane-wrapper">
<div class="pane-header-wrapper">
<div class="tree-header"><select ng-options="node as node.name for node in nodes" ng-model="currentNode" ng-change="selectNode(currentNode)"></select></div>
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/plugin/html/tmplOverviewTree.html
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/html/tmplOverviewTree.html b/console/stand-alone/plugin/html/tmplOverviewTree.html
index 35e8b7b..8bc9a13 100644
--- a/console/stand-alone/plugin/html/tmplOverviewTree.html
+++ b/console/stand-alone/plugin/html/tmplOverviewTree.html
@@ -17,11 +17,11 @@
under the License
-->
-<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2" style="min-height: 990px;">
+<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ng-include src="'overviewGrid.html'"></ng-include>
</div>
-<div class="col-sm-3 col-md-2 col-sm-pull-9 col-md-pull-10 sidebar-pf sidebar-pf-left" style="min-height: 990px;">
+<div class="overview-tree col-sm-3 col-md-2 col-sm-pull-9 col-md-pull-10 sidebar-pf sidebar-pf-left">
<div class="pane-wrapper">
<div class="pane-header-wrapper">
<div ng-hide="largeNetwork" class="expand-collapse">
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/plugin/js/dispatchPlugin.js
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/js/dispatchPlugin.js b/console/stand-alone/plugin/js/dispatchPlugin.js
index 19b65b7..4a07e78 100644
--- a/console/stand-alone/plugin/js/dispatchPlugin.js
+++ b/console/stand-alone/plugin/js/dispatchPlugin.js
@@ -60,14 +60,19 @@ var QDR = (function(QDR) {
QDR.SETTINGS_KEY = 'QDRSettings';
QDR.LAST_LOCATION = "QDRLastLocation";
+ QDR.redirectWhenConnected = function ($location, org) {
+ $location.path(QDR.pluginRoot + "/connect")
+ $location.search('org', org);
+ }
+
/**
* @property module
* @type {object}
*
* This plugin's angularjs module instance
*/
- QDR.module = angular.module(QDR.pluginName, ['ngRoute', 'ngSanitize', 'ngResource', 'ui.bootstrap', 'ngGrid', 'ui.slider']);
-// QDR.module = angular.module(QDR.pluginName, ['ngResource', 'ngGrid', 'ui.bootstrap', 'ui.slider'/*, 'minicolors' */]);
+ QDR.module = angular.module(QDR.pluginName, ['ngRoute', 'ngSanitize', 'ngResource', 'ui.bootstrap',
+ 'ui.grid', 'ui.grid.selection', 'ui.grid.autoResize', 'ui.grid.resizeColumns', 'ui.grid.saveState', 'ui.slider']);
Core = {
notification: function (severity, msg) {
@@ -81,48 +86,24 @@ var QDR = (function(QDR) {
.when('/', {
templateUrl: QDR.templatePath + 'qdrOverview.html'
})
- .when('/QDR/overview', {
- templateUrl: QDR.templatePath + 'qdrOverview.html'
- })
.when('/overview', {
templateUrl: QDR.templatePath + 'qdrOverview.html'
})
- .when('/QDR/topology', {
- templateUrl: QDR.templatePath + 'qdrTopology.html'
- })
.when('/topology', {
templateUrl: QDR.templatePath + 'qdrTopology.html'
})
- .when('/QDR/list', {
- templateUrl: QDR.templatePath + 'qdrList.html'
- })
.when('/list', {
templateUrl: QDR.templatePath + 'qdrList.html'
})
- .when('#/list', {
- templateUrl: QDR.templatePath + 'qdrList.html'
- })
- .when('/#/list', {
- templateUrl: QDR.templatePath + 'qdrList.html'
- })
- .when('/QDR/schema', {
- templateUrl: QDR.templatePath + 'qdrSchema.html'
- })
.when('/schema', {
templateUrl: QDR.templatePath + 'qdrSchema.html'
})
- .when('/QDR/charts', {
- templateUrl: QDR.templatePath + 'qdrCharts.html'
- })
.when('/charts', {
templateUrl: QDR.templatePath + 'qdrCharts.html'
})
.when('/connect', {
templateUrl: QDR.templatePath + 'qdrConnect.html'
})
- .otherwise({
- templateUrl: QDR.templatePath + 'qdrConnect.html'
- })
});
QDR.module.config(function ($compileProvider) {
@@ -142,7 +123,7 @@ var QDR = (function(QDR) {
QDR.module.filter('humanify', function (QDRService) {
return function (input) {
- return QDRService.humanify(input);
+ return QDRService.utilities.humanify(input);
};
});
@@ -195,23 +176,20 @@ var QDR = (function(QDR) {
QDR.log = new QDR.logger($log);
QDR.log.info("*************creating Dispatch Console************");
var curPath = $location.path()
-QDR.log.info("curPath = " + curPath)
var org = curPath.substr(1)
if (org && org.length > 0 && org !== "connect") {
-QDR.log.info("setting location.search to org=" + org)
$location.search('org', org)
} else {
-QDR.log.info("setting location.search to org=null")
$location.search('org', null)
}
QDR.queue = d3.queue;
- QDRService.addUpdatedAction("initChartService", function() {
- QDRService.delUpdatedAction("initChartService")
+ QDRService.management.topology.addUpdatedAction("initChartService", function() {
+ QDRService.management.topology.delUpdatedAction("initChartService")
QDRChartService.init(); // initialize charting service after we are connected
});
var settings = angular.fromJson(localStorage[QDR.SETTINGS_KEY]) || {autostart: false, address: 'localhost', port: 5673}
- if (!QDRService.connected) {
+ if (!QDRService.management.connection.is_connected()) {
// attempt to connect to the host:port that served this page
var protocol = $location.protocol()
var host = $location.host()
@@ -219,50 +197,51 @@ QDR.log.info("setting location.search to org=null")
var search = $location.search()
if (search.org) {
if (search.org === 'connect')
-QDR.log.info("was not connected. setting org to overview")
$location.search("org", "overview")
}
var connectOptions = {address: host, port: port}
- QDRService.testConnect(connectOptions, 10000, function (e) {
+ QDRService.management.connection.testConnect(connectOptions, function (e) {
if (e.error) {
- QDR.log.info("failed to auto-connect to " + host + ":" + port)
+ QDR.log.debug("failed to auto-connect to " + host + ":" + port)
+ QDR.log.debug("redirecting to connect page")
// the connect page should rneder
$timeout(function () {
$location.path('/connect')
$location.search('org', org)
})
} else {
-QDR.log.info("testConnect succeeded using address:port of browser")
- QDRService.getSchema(function () {
- QDR.log.debug("got schema after connection")
- QDRService.addUpdatedAction("initialized", function () {
- QDRService.delUpdatedAction("initialized")
- QDR.log.debug("got initial topology")
- $timeout(function() {
- QDR.log.info("after initialization org was " + org + " and location.path() was " + $location.path())
- if (org === '' || org === 'connect') {
- org = localStorage[QDR.LAST_LOCATION] || "/overview"
- if (org === '/')
- org = "/overview"
- QDR.log.info("after initialization org was loaded from localStorage and is now " + org)
- } else {
- if (org && $location.path() !== '/connect') {
- org = $location.path().substr(1)
+ QDR.log.info("Connect succeeded. Using address:port of browser")
+ // register an onConnect event handler
+ QDRService.management.connection.addConnectAction( function () {
+ QDRService.management.getSchema(function () {
+ QDR.log.debug("got schema after connection")
+ QDRService.management.topology.addUpdatedAction("initialized", function () {
+ QDRService.management.topology.delUpdatedAction("initialized")
+ QDR.log.debug("got initial topology")
+ $timeout(function() {
+ if (org === '' || org === 'connect') {
+ org = localStorage[QDR.LAST_LOCATION] || "/overview"
+ if (org === '/')
+ org = "/overview"
+ } else {
+ if (org && $location.path() !== '/connect') {
+ org = $location.path().substr(1)
+ }
}
- }
- QDR.log.info("after initialization going to " + org)
- $location.path(org)
- $location.search('org', null)
- $location.replace()
+ $location.path(org)
+ $location.search('org', null)
+ $location.replace()
+ })
})
+ QDR.log.info("requesting a topology")
+ QDRService.management.topology.setUpdateEntities([])
+ QDRService.management.topology.get() // gets the list of routers
})
- QDR.log.info("requesting a topology")
- QDRService.setUpdateEntities([])
- QDRService.topology.get()
})
$timeout( function () {
- QDR.log.info("calling connect")
- QDRService.connect(e)
+ // complete the connection (create the sender/receiver)
+ connectOptions.reconnect = true
+ QDRService.management.connection.connect(connectOptions)
})
}
})
@@ -270,7 +249,6 @@ QDR.log.info("testConnect succeeded using address:port of browser")
$rootScope.$on('$routeChangeSuccess', function(event, next, current) {
var path = $location.path();
-QDR.log.info("routeChangeSuccess: path is now " + path)
if (path !== "/connect") {
localStorage[QDR.LAST_LOCATION] = path;
}
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/plugin/js/navbar.js
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/js/navbar.js b/console/stand-alone/plugin/js/navbar.js
index 0d7baf9..e562a7e 100644
--- a/console/stand-alone/plugin/js/navbar.js
+++ b/console/stand-alone/plugin/js/navbar.js
@@ -21,55 +21,47 @@ under the License.
*/
var QDR = (function (QDR) {
- /**
- * @property breadcrumbs
- * @type {{content: string, title: string, isValid: isValid, href: string}[]}
- *
- * Data structure that defines the sub-level tabs for
- * our plugin, used by the navbar controller to show
- * or hide tabs based on some criteria
- */
QDR.breadcrumbs = [
{
content: '<i class="icon-cogs"></i> Connect',
title: "Connect to a router",
isValid: function () { return true; },
- href: "#!" + QDR.pluginRoot + "/connect",
+ href: "#/connect",
name: "Connect"
},
{
content: '<i class="pficon-home"></i> Overview',
title: "View router overview",
- isValid: function (QDRService) { return QDRService.isConnected(); },
- href: "#!" + QDR.pluginRoot + "/overview",
+ isValid: function (QDRService) {return QDRService.management.connection.is_connected() },
+ href: "#/overview",
name: "Overview"
},
{
content: '<i class="icon-list "></i> Entities',
title: "View the attributes of the router entities",
- isValid: function (QDRService) { return QDRService.isConnected(); },
- href: "#!" + QDR.pluginRoot + "/list",
+ isValid: function (QDRService) { return QDRService.management.connection.is_connected() },
+ href: "#/list",
name: "Entities"
},
{
content: '<i class="icon-star-empty"></i> Topology',
title: "View router network topology",
- isValid: function (QDRService) { return QDRService.isConnected(); },
- href: "#!" + QDR.pluginRoot + "/topology",
+ isValid: function (QDRService) { return QDRService.management.connection.is_connected() },
+ href: "#/topology",
name: "Topology"
},
{
content: '<i class="icon-bar-chart"></i> Charts',
title: "View charts",
- isValid: function (QDRService, $location) { return QDRService.isConnected() && QDR.isStandalone; },
- href: "#!/charts",
+ isValid: function (QDRService, $location) { return QDRService.management.connection.is_connected() },
+ href: "#/charts",
name: "Charts"
},
{
content: '<i class="icon-align-left"></i> Schema',
title: "View dispatch schema",
- isValid: function (QDRService) { return QDRService.isConnected(); },
- href: "#!" + QDR.pluginRoot + "/schema",
+ isValid: function (QDRService) { return QDRService.management.connection.is_connected() },
+ href: "#/schema",
right: true,
name: "Schema"
}
@@ -86,19 +78,11 @@ var QDR = (function (QDR) {
QDR.module.controller("QDR.NavBarController", ['$rootScope', '$scope', 'QDRService', 'QDRChartService', '$routeParams', '$location', function($rootScope, $scope, QDRService, QDRChartService, $routeParams, $location) {
$scope.breadcrumbs = QDR.breadcrumbs;
$scope.isValid = function(link) {
- if ($scope.isActive(link.href))
- $rootScope.$broadcast("setCrumb", {name: link.name, title: link.content})
return link.isValid(QDRService, $location);
};
$scope.isActive = function(href) {
-//QDR.log.info("isActive(" + href + ") location.path() is " + $location.path())
- // highlight the connect tab if we are on the root page
- if (($location.path() === QDR.pluginRoot) && (href.split("#")[1] === QDR.pluginRoot + "/connect")) {
-//QDR.log.info("isActive is returning true for connect page")
- return true
- }
- return href.split("#")[1] === '!' + $location.path();
+ return href.split("#")[1] === $location.path();
};
$scope.isRight = function (link) {
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/plugin/js/qdrChartService.js
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/js/qdrChartService.js b/console/stand-alone/plugin/js/qdrChartService.js
index cc64981..418b597 100644
--- a/console/stand-alone/plugin/js/qdrChartService.js
+++ b/console/stand-alone/plugin/js/qdrChartService.js
@@ -81,7 +81,7 @@ var QDR = (function(QDR) {
var nameparts = name.split('/');
if (nameparts.length == 2)
name = nameparts[1];
- var key = QDRService.nameFromId(this.request().nodeId) + this.request().entity + name + this.attr() + "_" + this.instance + "_" + (this.request().aggregate ? "1" : "0");
+ var key = QDRService.management.topology.nameFromId(this.request().nodeId) + this.request().entity + name + this.attr() + "_" + this.instance + "_" + (this.request().aggregate ? "1" : "0");
// remove all characters except letters,numbers, and _
return key.replace(/[^\w]/gi, '')
}
@@ -142,9 +142,9 @@ var QDR = (function(QDR) {
return this;
}
this.title = function(_) {
- var name = this.request().aggregate ? 'Aggregate' : QDRService.nameFromId(this.nodeId());
+ var name = this.request().aggregate ? 'Aggregate' : QDRService.management.topology.nameFromId(this.nodeId());
var computed = name +
- " " + QDRService.humanify(this.attr()) +
+ " " + QDRService.utilities.humanify(this.attr()) +
" - " + this.name()
if (!arguments.length) return this.userTitle || computed;
@@ -266,11 +266,11 @@ var QDR = (function(QDR) {
init: function() {
self.loadCharts();
- QDRService.addDisconnectAction(function() {
+ QDRService.management.connection.addDisconnectAction(function() {
self.charts.forEach(function(chart) {
self.unRegisterChart(chart, true)
})
- QDRService.addConnectAction(self.init);
+ QDRService.management.connection.addConnectAction(self.init);
})
},
@@ -461,10 +461,10 @@ var QDR = (function(QDR) {
}
}
if (request.aggregate) {
- var nodeList = QDRService.nodeIdList()
- QDRService.getMultipleNodeInfo(nodeList, request.entity, attrs, saveResponse, request.nodeId);
+ var nodeList = QDRService.management.topology.nodeIdList()
+ QDRService.management.topology.getMultipleNodeInfo(nodeList, request.entity, attrs, saveResponse, request.nodeId);
} else {
- QDRService.fetchEntity(request.nodeId, request.entity, attrs, saveResponse);
+ QDRService.management.topology.fetchEntity(request.nodeId, request.entity, attrs, saveResponse);
}
// it is now safe to schedule another request
if (once)
@@ -527,7 +527,7 @@ var QDR = (function(QDR) {
var charts = angular.fromJson(localStorage["QDRCharts"]);
if (charts) {
// get array of known ids
- var nodeList = QDRService.nodeList().map(function(node) {
+ var nodeList = QDRService.management.topology.nodeList().map(function(node) {
return node.id;
})
charts.forEach(function(chart) {
@@ -587,7 +587,7 @@ var QDR = (function(QDR) {
var now = new Date();
var visibleDate = new Date(now.getTime() - chart.visibleDuration * 60 * 1000);
var data = chart.data();
- var nodeList = QDRService.nodeIdList();
+ var nodeList = QDRService.management.topology.nodeIdList();
if (chart.type == "rate") {
var rateData = [];
@@ -608,7 +608,7 @@ var QDR = (function(QDR) {
nodeList.forEach(function(node, nodeIndex) {
if (d1[2][nodeIndex] && d[2][nodeIndex])
detail.push({
- node: QDRService.nameFromId(node),
+ node: QDRService.management.topology.nameFromId(node),
val: (d1[2][nodeIndex].val - d[2][nodeIndex].val) / elapsed
})
})
@@ -696,9 +696,9 @@ var QDR = (function(QDR) {
}
// create and initialize the chart
this.svgchart = self.timeSeriesStackedChart(id, width, height,
- QDRService.humanify(this.chart.attr()),
+ QDRService.utilities.humanify(this.chart.attr()),
this.chart.name(),
- QDRService.nameFromId(this.chart.nodeId()),
+ QDRService.management.topology.nameFromId(this.chart.nodeId()),
this.chart.entity(),
stacked,
this.chart.visibleDuration)
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/plugin/js/qdrCharts.js
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/js/qdrCharts.js b/console/stand-alone/plugin/js/qdrCharts.js
index 2cb9e42..7766457 100644
--- a/console/stand-alone/plugin/js/qdrCharts.js
+++ b/console/stand-alone/plugin/js/qdrCharts.js
@@ -28,55 +28,54 @@ var QDR = (function (QDR) {
*/
QDR.module.controller("QDR.ChartsController", function($scope, QDRService, QDRChartService, $uibModal, $location, $routeParams) {
- var updateTimer = null;
-
- if (!QDRService.connected) {
- // we are not connected. we probably got here from a bookmark or manual page reload
- QDRService.redirectWhenConnected("charts");
- return;
- }
- // we are currently connected. setup a handler to get notified if we are ever disconnected
- QDRService.addDisconnectAction( function () {
- QDRService.redirectWhenConnected("charts")
- $scope.$apply();
- })
-
-
- $scope.svgCharts = [];
- // create an svg object for each chart
- QDRChartService.charts.filter(function (chart) {return chart.dashboard}).forEach(function (chart) {
- var svgChart = new QDRChartService.AreaChart(chart)
- svgChart.zoomed = false;
- $scope.svgCharts.push(svgChart);
- })
+ var updateTimer = null;
+
+ if (!QDRService.management.connection.is_connected()) {
+ // we are not connected. we probably got here from a bookmark or manual page reload
+ QDR.redirectWhenConnected($locaion, "charts");
+ return;
+ }
+ // we are currently connected. setup a handler to get notified if we are ever disconnected
+ QDRService.management.connection.addDisconnectAction( function () {
+ QDR.redirectWhenConnected($locaion, "charts")
+ $scope.$apply();
+ })
+
+ $scope.svgCharts = [];
+ // create an svg object for each chart
+ QDRChartService.charts.filter(function (chart) {return chart.dashboard}).forEach(function (chart) {
+ var svgChart = new QDRChartService.AreaChart(chart)
+ svgChart.zoomed = false;
+ $scope.svgCharts.push(svgChart);
+ })
// redraw the chart every update period
- // this is a $scope function because it is called from the dialog
+ // this is a $scope function because it is called from the dialog
var updateCharts = function () {
- $scope.svgCharts.forEach(function (svgChart) {
- svgChart.tick(svgChart.chart.id()); // on this page we are using the chart.id() as the div id in which to render the chart
- })
- var updateRate = localStorage['updateRate'] ? localStorage['updateRate'] : 5000;
- if (updateTimer) {
- clearTimeout(updateTimer)
- }
- updateTimer = setTimeout(updateCharts, updateRate);
+ $scope.svgCharts.forEach(function (svgChart) {
+ svgChart.tick(svgChart.chart.id()); // on this page we are using the chart.id() as the div id in which to render the chart
+ })
+ var updateRate = localStorage['updateRate'] ? localStorage['updateRate'] : 5000;
+ if (updateTimer) {
+ clearTimeout(updateTimer)
+ }
+ updateTimer = setTimeout(updateCharts, updateRate);
}
// called by ng-init in the html when the page is loaded
- $scope.chartsLoaded = function () {
- $scope.svgCharts.forEach(function (svgChart) {
+ $scope.chartsLoaded = function () {
+ $scope.svgCharts.forEach(function (svgChart) {
QDRChartService.sendChartRequest(svgChart.chart.request(), true);
})
if (updateTimer)
clearTimeout(updateTimer)
- setTimeout(updateCharts, 0);
- }
+ setTimeout(updateCharts, 0);
+ }
- $scope.zoomChart = function (chart) {
- chart.zoomed = !chart.zoomed;
- chart.zoom(chart.chart.id(), chart.zoomed);
- }
+ $scope.zoomChart = function (chart) {
+ chart.zoomed = !chart.zoomed;
+ chart.zoom(chart.chart.id(), chart.zoomed);
+ }
$scope.showListPage = function () {
$location.path("/list");
};
@@ -102,7 +101,7 @@ var QDR = (function (QDR) {
// called from dialog when we want to clone the dialog chart
// the chart argument here is a QDRChartService chart
$scope.addChart = function (chart) {
- $scope.svgCharts.push(new QDRChartService.AreaChart(chart));
+ $scope.svgCharts.push(new QDRChartService.AreaChart(chart));
};
$scope.$on("$destroy", function( event ) {
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/plugin/js/qdrList.js
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/js/qdrList.js b/console/stand-alone/plugin/js/qdrList.js
index 2be64ed..4ff7b1e 100644
--- a/console/stand-alone/plugin/js/qdrList.js
+++ b/console/stand-alone/plugin/js/qdrList.js
@@ -22,22 +22,24 @@ under the License.
var QDR = (function(QDR) {
/**
- * @method ListController
- * @param $scope
- * @param QDRService
- *
* Controller for the main interface
*/
QDR.module.controller("QDR.ListController", ['$scope', '$location', '$uibModal', '$filter', '$timeout', 'QDRService', 'QDRChartService',
function ($scope, $location, $uibModal, $filter, $timeout, QDRService, QDRChartService) {
+ QDR.log.debug("QDR.ListControll started with location of " + $location.path() + " and connection of " + QDRService.management.connection.is_connected());
var updateIntervalHandle = undefined;
var updateInterval = 5000;
var ListExpandedKey = "QDRListExpanded";
+ var SelectedEntityKey = "QDRSelectedEntity"
+ var ActivatedKey = "QDRActivatedKey"
$scope.details = {};
$scope.tmplListTree = QDR.templatePath + 'tmplListTree.html';
- $scope.selectedEntity = localStorage['QDRSelectedEntity'] || "address";
+ $scope.selectedEntity = localStorage[SelectedEntityKey] || "address";
+ $scope.ActivatedKey = localStorage[ActivatedKey] || null;
+ if ($scope.selectedEntity == "undefined")
+ $scope.selectedEntity = undefined
$scope.selectedNode = localStorage['QDRSelectedNode'];
$scope.selectedNodeId = localStorage['QDRSelectedNodeId'];
$scope.selectedRecordName = localStorage['QDRSelectedRecordName'];
@@ -57,8 +59,6 @@ var QDR = (function(QDR) {
op: 'UPDATE',
title: "Update this attribute",
isValid: function () {
- //QDR.log.debug("isValid UPDAATE? " + this.op)
- //console.dump($scope.operations)
return $scope.operations.indexOf(this.op) > -1
}
},
@@ -96,28 +96,30 @@ var QDR = (function(QDR) {
$scope.logResults = [];
$scope.fetchingLog = true;
var entity; // undefined since it is not supported in the GET-LOG call
- QDRService.sendMethod($scope.currentNode.id, entity, {}, $scope.currentMode.op, {}, function (nodeName, entity, response, context) {
- $scope.fetchingLog = false;
- var statusCode = context.message.application_properties.statusCode;
+ QDRService.management.connection.sendMethod($scope.currentNode.id, entity, {}, $scope.currentMode.op)
+ .then( function (response) {
+ var statusCode = response.context.message.application_properties.statusCode;
if (statusCode < 200 || statusCode >= 300) {
- Core.notification('error', context.message.statusDescription);
- QDR.log.info('Error ' + context.message.statusDescription)
+ Core.notification('error', response.context.message.statusDescription);
+ QDR.log.error('Error ' + response.context.message.statusDescription)
return;
}
- $scope.logResults = response.filter( function (entry) {
- return entry[0] === $scope.detailsObject.module
- }).sort( function (a, b) {
- return b[5] - a[5]
- }).map( function (entry) {
- return {
- type: entry[1],
- message: entry[2],
- source: entry[3],
- line: entry[4],
- time: Date(entry[5]).toString()
- }
+ $timeout( function () {
+ $scope.fetchingLog = false;
+ $scope.logResults = response.response.filter( function (entry) {
+ return entry[0] === $scope.detailsObject.module
+ }).sort( function (a, b) {
+ return b[5] - a[5]
+ }).map( function (entry) {
+ return {
+ type: entry[1],
+ message: entry[2],
+ source: entry[3],
+ line: entry[4],
+ time: Date(entry[5]).toString()
+ }
+ })
})
- $scope.$apply();
})
}
}
@@ -126,47 +128,40 @@ var QDR = (function(QDR) {
}
$scope.expandAll = function () {
- $("#entityTree").dynatree("getRoot").visit(function(node){
- node.expand(true);
- });
+ $("#entityTree").fancytree("getTree").visit(function(node){
+ node.setExpanded(true);
+ });
}
$scope.contractAll = function () {
- $("#entityTree").dynatree("getRoot").visit(function(node){
- node.expand(false);
- });
+ $("#entityTree").fancytree("getTree").visit(function(node){
+ node.setExpanded(false);
+ });
}
- if (!QDRService.connected) {
+ if (!QDRService.management.connection.is_connected()) {
// we are not connected. we probably got here from a bookmark or manual page reload
- QDRService.redirectWhenConnected("list");
+ QDR.redirectWhenConnected($location, "list")
return;
}
- var onDisconnect = function () {
-QDR.log.info("we were just disconnected while on the list page. Setting org to redirect back once we are connected again")
- $timeout( function () {
- QDRService.redirectWhenConnected("list")
- })
- }
- // we are currently connected. setup a handler to get notified if we are ever disconnected
- QDRService.addDisconnectAction( onDisconnect )
$scope.nodes = []
var excludedEntities = ["management", "org.amqp.management", "operationalEntity", "entity", "configurationEntity", "dummy", "console"];
var aggregateEntities = ["router.address"];
var classOverrides = {
"connection": function (row, nodeId) {
- var isConsole = QDRService.isAConsole (row.properties.value, row.identity.value, row.role.value, nodeId)
+ var isConsole = QDRService.utilities.isAConsole (row.properties.value, row.identity.value, row.role.value, nodeId)
return isConsole ? "console" : row.role.value === "inter-router" ? "inter-router" : "external";
},
"router.link": function (row, nodeId) {
var link = {nodeId: nodeId, connectionId: row.connectionId.value}
- var isConsole = QDRService.isConsoleLink(link)
+
+ var isConsole = QDRService.utilities.isConsole(QDRService.management.topology.getConnForLink(link))
return isConsole ? "console" : row.linkType.value;
},
"router.address": function (row) {
- var identity = QDRService.identity_clean(row.identity.value)
- var address = QDRService.addr_text(identity)
- var cls = QDRService.addr_class(identity)
+ var identity = QDRService.utilities.identity_clean(row.identity.value)
+ var address = QDRService.utilities.addr_text(identity)
+ var cls = QDRService.utilities.addr_class(identity)
if (address === "$management")
cls = "internal " + cls
return cls
@@ -174,29 +169,51 @@ QDR.log.info("we were just disconnected while on the list page. Setting org to r
}
var lookupOperations = function () {
- var ops = QDRService.schema.entityTypes[$scope.selectedEntity].operations.filter( function (op) { return op !== 'READ'});
+ var ops = QDRService.management.schema().entityTypes[$scope.selectedEntity].operations.filter( function (op) { return op !== 'READ'});
$scope.operation = ops.length ? ops[0] : "";
return ops;
}
-
var entityTreeChildren = [];
var expandedList = angular.fromJson(localStorage[ListExpandedKey]) || [];
- var onTreeNodeExpanded = function (expanded, node) {
+ var saveExpanded = function () {
// save the list of entities that are expanded
- var tree = $("#entityTree").dynatree("getTree");
- var list = [];
+ var tree = $("#entityTree").fancytree("getTree");
+ var list = []
tree.visit( function (tnode) {
if (tnode.isExpanded()) {
- list.push(tnode.data.key)
+ list.push(tnode.key)
}
})
localStorage[ListExpandedKey] = JSON.stringify(list)
+ }
- if (expanded)
- onTreeSelected(node);
+ var onTreeNodeBeforeActivate = function (event, data) {
+ // if node is toplevel entity
+ if (data.node.data.typeName === "entity") {
+ // if the current active node is not this one and not one of its children
+ var active = data.tree.getActiveNode()
+ if (active && !data.node.isActive() && data.node.isExpanded()) { // there is an active node and it's not this one
+ var any = false
+ var children = data.node.getChildren()
+ if (children) {
+ any = children.some( function (child) {
+ return child.key === active.key
+ })
+ }
+ if (!any) // none of the clicked on node's children was active
+ return false // don't activate, just collapse this top level node
+ }
+ }
+ return true
+ }
+ var onTreeNodeExpanded = function (event, data) {
+ saveExpanded()
+ updateExpandedEntities()
}
// a tree node was selected
- var onTreeSelected = function (selectedNode) {
+ var onTreeNodeActivated = function (event, data) {
+ $scope.ActivatedKey = data.node.key
+ var selectedNode = data.node
$timeout( function () {
if ($scope.currentMode.id === 'operations')
$scope.currentMode = $scope.modes[0];
@@ -207,25 +224,29 @@ QDR.log.info("we were just disconnected while on the list page. Setting org to r
$scope.currentMode = $scope.modes[0];
}
if (selectedNode.data.typeName === "entity") {
- $scope.selectedEntity = selectedNode.data.key;
+ $scope.selectedEntity = selectedNode.key;
$scope.operations = lookupOperations()
} else if (selectedNode.data.typeName === 'attribute') {
- $scope.selectedEntity = selectedNode.parent.data.key;
+ $scope.selectedEntity = selectedNode.parent.key;
$scope.operations = lookupOperations()
- $scope.selectedRecordName = selectedNode.data.key;
+ $scope.selectedRecordName = selectedNode.key;
updateDetails(selectedNode.data.details); // update the table on the right
- $("#entityTree").dynatree("getRoot").visit(function(node){
- node.select(false);
- });
- selectedNode.select();
}
})
}
-
+ var getExpanded = function (tree) {
+ var list = []
+ tree.visit( function (tnode) {
+ if (tnode.isExpanded()) {
+ list.push(tnode)
+ }
+ })
+ return list
+ }
// fill in an empty results recoord based on the entities schema
var fromSchema = function (entityName) {
var row = {}
- var schemaEntity = QDRService.schema.entityTypes[entityName]
+ var schemaEntity = QDRService.management.schema().entityTypes[entityName]
for (attr in schemaEntity.attributes) {
var entity = schemaEntity.attributes[attr]
var value = ""
@@ -248,77 +269,98 @@ QDR.log.info("we were just disconnected while on the list page. Setting org to r
return row;
}
$scope.hasCreate = function () {
- var schemaEntity = QDRService.schema.entityTypes[$scope.selectedEntity]
+ var schemaEntity = QDRService.management.schema().entityTypes[$scope.selectedEntity]
return (schemaEntity.operations.indexOf("CREATE") > -1)
}
- var stopUpdating = function () {
- if (angular.isDefined(updateIntervalHandle)) {
- clearInterval(updateIntervalHandle);
- }
- updateIntervalHandle = undefined;
+ var getActiveChild = function (node) {
+ var active = node.children.filter(function (child) {
+ return child.isActive()
+ })
+ if (active.length > 0)
+ return active[0].key
+ return null
}
-
// the data for the selected entity is available, populate the tree
- var updateEntityChildren = function (entity, tableRows, expand) {
- var tree = $("#entityTree").dynatree("getTree");
- if (!tree.getNodeByKey) {
- return stopUpdating()
+ var updateTreeChildren = function (entity, tableRows, expand) {
+ var tree = $("#entityTree").fancytree("getTree"), node;
+ if (tree) {
+ node = tree.getNodeByKey(entity)
+ }
+ if (!tree || !node) {
+ return
}
- var node = tree.getNodeByKey(entity)
+ var wasActive = node.isActive()
+ var wasExpanded = node.isExpanded()
+ var activeChildKey = getActiveChild(node)
+ node.removeChildren()
var updatedDetails = false;
- var scrollTreeDiv = $('.qdr-attributes.pane.left .pane-viewport')
- var scrollTop = scrollTreeDiv.scrollTop();
- node.removeChildren();
if (tableRows.length == 0) {
- node.addChild({
+ var newNode = {
addClass: "no-data",
- typeName: "none",
- title: "no data",
- key: node.data.key + ".1"
- })
- if (expand) {
- updateDetails(fromSchema(entity));
- $scope.selectedRecordName = entity;
+ typeName: "none",
+ title: "no data",
+ key: node.key + ".1"
+ }
+ node.addNode(newNode)
+ if (expand) {
+ updateDetails(fromSchema(entity));
+ $scope.selectedRecordName = entity;
}
} else {
- tableRows.forEach( function (row) {
+ var children = tableRows.map( function (row) {
var addClass = entity;
if (classOverrides[entity]) {
addClass += " " + classOverrides[entity](row, $scope.currentNode.id);
}
var child = {
- typeName: "attribute",
- addClass: addClass,
- tooltip: addClass,
- key: row.name.value,
- title: row.name.value,
- details: row
- }
- if (row.name.value === $scope.selectedRecordName) {
- if (expand)
- updateDetails(row); // update the table on the right
- child.select = true;
- updatedDetails = true;
+ typeName: "attribute",
+ extraClasses: addClass,
+ tooltip: addClass,
+ key: row.name.value,
+ title: row.name.value,
+ details: row
}
- node.addChild(child)
+ return child
})
+ node.addNode(children)
}
- // if the selectedRecordName was not found, select the 1st one
- if (expand && !updatedDetails && tableRows.length > 0) {
- var row = tableRows[0];
- $scope.selectedRecordName = row.name.value;
- var node = tree.getNodeByKey($scope.selectedRecordName);
- node.select(true);
- updateDetails(row) // update the table on the right
+ // top level node was expanded
+ if (wasExpanded)
+ node.setExpanded(true, {noAnimation: true, noEvents: true})
+ // if the parent node was active, but none of the children were active, active the 1st child
+ if (wasActive) {
+ if (!activeChildKey) {
+ activeChildKey = node.children[0].key
+ }
}
- scrollTreeDiv.scrollTop(scrollTop)
+ if (!tree.getActiveNode())
+ activeChildKey = $scope.ActivatedKey
+ // re-active the previously active child node
+ if (activeChildKey) {
+ var newNode = tree.getNodeByKey(activeChildKey)
+ // the node may not be there after the update
+ if (newNode)
+ newNode.setActive(true) // fires the onTreeNodeActivated event for this node
+ }
+ resizer()
+ }
+
+
+ var resizer = function () {
+ // this forces the tree and the grid to be the size of the browser window.
+ // the effect is that the tree and the grid will have vertical scroll bars if needed.
+ // the alternative is to let the tree and grid determine the size of the page and have
+ // the scroll bar on the window
+ var viewport = $('#list-controller .pane-viewport')
+ viewport.height( window.innerHeight - viewport.offset().top)
}
+ $(window).resize(resizer);
var schemaProps = function (entityName, key, currentNode) {
var typeMap = {integer: 'number', string: 'text', path: 'text', boolean: 'boolean', map: 'textarea'};
- var entity = QDRService.schema.entityTypes[entityName]
+ var entity = QDRService.management.schema().entityTypes[entityName]
var value = entity.attributes[key]
// skip identity and depricated fields
if (!value)
@@ -334,7 +376,7 @@ QDR.log.info("we were just disconnected while on the list page. Setting org to r
// turn input into a select. the values will be populated later
value.type = []
// find all the connector names and populate the select
- QDRService.fetchEntity(currentNode.id, '.connector', ['name'], function (nodeName, dotentity, response) {
+ QDRService.management.topology.fetchEntity(currentNode.id, 'connector', ['name'], function (nodeName, dotentity, response) {
$scope.detailFields.some( function (field) {
if (field.name === 'connector') {
field.rawtype = response.results.map (function (result) {return result[0]})
@@ -344,7 +386,7 @@ QDR.log.info("we were just disconnected while on the list page. Setting org to r
});
}
return { name: key,
- humanName: QDRService.humanify(key),
+ humanName: QDRService.utilities.humanify(key),
description:value.description,
type: disabled ? 'disabled' : typeMap[value.type],
rawtype: value.type,
@@ -376,14 +418,14 @@ QDR.log.info("we were just disconnected while on the list page. Setting org to r
})
var schemaEntity = schemaProps($scope.selectedEntity, attr, $scope.currentNode)
details.push( {
- attributeName: QDRService.humanify(attr),
- attributeValue: attr === 'port' ? row[attr].value : QDRService.pretty(row[attr].value),
+ attributeName: QDRService.utilities.humanify(attr),
+ attributeValue: attr === 'port' ? row[attr].value : QDRService.utilities.pretty(row[attr].value),
name: attr,
changed: changed.length,
rawValue: row[attr].value,
graph: row[attr].graph,
title: row[attr].title,
- aggregateValue: QDRService.pretty(row[attr].aggregate),
+ aggregateValue: QDRService.utilities.pretty(row[attr].aggregate),
aggregateTip: row[attr].aggregateTip,
input: schemaEntity.input,
@@ -401,28 +443,35 @@ QDR.log.info("we were just disconnected while on the list page. Setting org to r
}
var applyDetails = function (details) {
- $scope.detailFields = details;
- aggregateColumn();
- $scope.$apply();
- // ng-grid bug? the entire table doesn't always draw unless a reflow is triggered;
- $(window).trigger('resize');
+ $timeout( function () {
+ $scope.detailFields = details;
+ aggregateColumn();
+ })
}
- var restartUpdate = function () {
- stopUpdating();
- updateTableData($scope.selectedEntity, true);
- updateIntervalHandle = setInterval(updateExpandedEntities, updateInterval);
+ // called from html ng-style="getTableHeight()"
+ $scope.getTableHeight = function () {
+ return {
+ height: ($scope.detailFields.length * 30 + 40) + 'px'
+ }
}
+
var updateExpandedEntities = function () {
- var tree = $("#entityTree").dynatree("getTree");
- if (tree.visit) {
- tree.visit( function (node) {
- if (node.isExpanded()) {
- updateTableData(node.data.key, node.data.key === $scope.selectedEntity)
- }
+ clearTimeout(updateIntervalHandle)
+ var tree = $("#entityTree").fancytree("getTree");
+ if (tree) {
+ var q = d3.queue(10)
+ var expanded = getExpanded(tree)
+ expanded.forEach( function (node) {
+ q.defer(q_updateTableData, node.key, node.key === $scope.selectedEntity)
+ })
+
+ q.await(function (error) {
+ if (error)
+ QDR.log.error(error.message)
+ // once all expanded tree nodes have been update, schedule another update
+ updateIntervalHandle = setTimeout(updateExpandedEntities, updateInterval)
})
- } else {
- stopUpdating();
}
}
@@ -430,12 +479,15 @@ QDR.log.info("we were just disconnected while on the list page. Setting org to r
$scope.selectedNode = node.name;
$scope.selectedNodeId = node.id;
setCurrentNode();
- restartUpdate();
};
+ $scope.$watch('ActivatedKey', function(newValue, oldValue) {
+ if (newValue !== oldValue) {
+ localStorage[ActivatedKey] = $scope.ActivatedKey;
+ }
+ })
$scope.$watch('selectedEntity', function(newValue, oldValue) {
if (newValue !== oldValue) {
localStorage['QDRSelectedEntity'] = $scope.selectedEntity;
- restartUpdate();
$scope.operations = lookupOperations()
}
})
@@ -452,15 +504,10 @@ QDR.log.info("we were just disconnected while on the list page. Setting org to r
})
/* Called periodically to refresh the data on the page */
- var updateTableData = function (entity, expand) {
- if (!QDRService.connected) {
- // we are no longer connected. bail back to the connect page
- $location.path("/" + QDR.pluginName + "/connect")
- $location.search('org', "list");
- return;
- }
- // don't update the data when on the operations tab
- if ($scope.currentMode.id === 'operations') {
+ var q_updateTableData = function (entity, expand, callback) {
+ // don't update the data when on the operations tabs
+ if ($scope.currentMode.id !== 'attributes') {
+ callback(null)
return;
}
@@ -473,7 +520,7 @@ QDR.log.info("we were just disconnected while on the list page. Setting org to r
if (attributeNames) {
var nameIndex = attributeNames.indexOf("name");
var identityIndex = attributeNames.indexOf("identity");
- var ent = QDRService.schema.entityTypes[entity];
+ var ent = QDRService.management.schema().entityTypes[entity];
for (var i=0; i<records.length; ++i) {
var record = records[i];
var aggregate = aggregates ? aggregates[i] : undefined;
@@ -486,8 +533,10 @@ QDR.log.info("we were just disconnected while on the list page. Setting org to r
}
}
if (!rowName) {
- QDR.log.error("response attributeNames did not contain a name field");
+ var msg = "response attributeNames did not contain a name field"
+ QDR.log.error(msg);
console.dump(response.attributeNames);
+ callback(Error(msg))
return;
}
for (var j=0; j<attributeNames.length; ++j) {
@@ -515,23 +564,23 @@ QDR.log.info("we were just disconnected while on the list page. Setting org to r
}
tableRows.push(row);
}
+ tableRows.sort( function (a, b) { return a.name.value.localeCompare(b.name.value) })
+ setTimeout(selectRow, 0, {entity: dotentity, rows: tableRows, expand: expand});
}
-
- tableRows.sort( function (a, b) { return a.name.value.localeCompare(b.name.value) })
- setTimeout(selectRow, 0, {entity: dotentity, rows: tableRows, expand: expand});
+ callback(null) // let queue handler know we are done
}
// if this entity should show an aggregate column, send the request to get the info for this entity from all the nedes
if (aggregateEntities.indexOf(entity) > -1) {
- var nodeInfo = QDRService.topology.nodeInfo();
- QDRService.getMultipleNodeInfo(Object.keys(nodeInfo), entity, [], gotNodeInfo, $scope.selectedNodeId);
+ var nodeInfo = QDRService.management.topology.nodeInfo();
+ QDRService.management.topology.getMultipleNodeInfo(Object.keys(nodeInfo), entity, [], gotNodeInfo, $scope.selectedNodeId);
} else {
- QDRService.fetchEntity($scope.selectedNodeId, entity, [], gotNodeInfo);
+ QDRService.management.topology.fetchEntity($scope.selectedNodeId, entity, [], gotNodeInfo);
}
};
- // tableRows are the records that were returned, this populates the left hand table on the page
+ // tableRows are the records that were returned, this populates the left hand tree on the page
var selectRow = function (info) {
- updateEntityChildren(info.entity, info.rows, info.expand);
+ updateTreeChildren(info.entity, info.rows, info.expand);
fixTooltips();
}
@@ -541,7 +590,7 @@ QDR.log.info("we were just disconnected while on the list page. Setting org to r
var table = "<table class='tiptable'><tbody>";
data.forEach (function (row) {
table += "<tr>";
- table += "<td>" + row.node + "</td><td align='right'>" + QDRService.pretty(row.val) + "</td>";
+ table += "<td>" + row.node + "</td><td align='right'>" + QDRService.utilities.pretty(row.val) + "</td>";
table += "</tr>"
})
table += "</tbody></table>"
@@ -574,7 +623,7 @@ QDR.log.info("we were just disconnected while on the list page. Setting org to r
$scope.addToGraph = function(rowEntity) {
var chart = QDRChartService.registerChart(
{nodeId: $scope.selectedNodeId,
- entity: "." + $scope.selectedEntity,
+ entity: $scope.selectedEntity,
name: $scope.selectedRecordName,
attr: rowEntity.name,
forceCreate: true});
@@ -595,7 +644,6 @@ QDR.log.info("we were just disconnected while on the list page. Setting org to r
doDialog('tmplListChart.html', chart);
}
- $scope.detailCols = [];
var aggregateColumn = function () {
if ((aggregateEntities.indexOf($scope.selectedEntity) > -1 && $scope.detailCols.length != 3) ||
(aggregateEntities.indexOf($scope.selectedEntity) == -1 && $scope.detailCols.length != 2)) {
@@ -604,12 +652,14 @@ QDR.log.info("we were just disconnected while on the list page. Setting org to r
{
field: 'attributeName',
displayName: 'Attribute',
- cellTemplate: '<div title="{{row.entity.title}}" class="listAttrName">{{row.entity[col.field]}}<i ng-if="row.entity.graph" ng-click="addToGraph(row.entity)" ng-class="{\'icon-bar-chart\': row.entity.graph == true }"></i></div>'
+ cellTemplate: '<div title="{{row.entity.title}}" class="listAttrName ui-grid-cell-contents">{{COL_FIELD CUSTOM_FILTERS | pretty}}<i ng-if="row.entity.graph" ng-click="grid.appScope.addToGraph(row.entity)" ng-class="{\'icon-bar-chart\': row.entity.graph == true }"></i></div>'
+
+ //'<div title="{{row.entity.title}}" class="listAttrName">{{row.entity[col.field]}}<i ng-if="row.entity.graph" ng-click="addToGraph(row.entity)" ng-class="{\'icon-bar-chart\': row.entity.graph == true }"></i></div>'
},
{
field: 'attributeValue',
displayName: 'Value',
- cellTemplate: '<div class="ngCellText" ng-class="{\'changed\': row.entity.changed == 1}"><span>{{row.getProperty(col.field)}}</span></div>'
+ cellTemplate: '<div class="ui-grid-cell-contents" ng-class="{\'changed\': row.entity.changed == 1}"><span>{{COL_FIELD CUSTOM_FILTERS | pretty}}</span></div>'
}
]
if (aggregateEntities.indexOf($scope.selectedEntity) > -1) {
@@ -618,7 +668,7 @@ QDR.log.info("we were just disconnected while on the list page. Setting org to r
width: '10%',
field: 'aggregateValue',
displayName: 'Aggregate',
- cellTemplate: '<div class="hastip" alt="{{row.entity.aggregateTip}}"><span ng-class="{\'changed\': row.entity.changed == 1}">{{row.entity[col.field]}}</span><i ng-if="row.entity.graph" ng-click="addAllToGraph(row.entity)" ng-class="{\'icon-bar-chart\': row.entity.graph == true }"></i></div>',
+ cellTemplate: '<div class="hastip ui-grid-cell-contents" alt="{{row.entity.aggregateTip}}"><span ng-class="{\'changed\': row.entity.changed == 1}">{{COL_FIELD CUSTOM_FILTERS}}</span><i ng-if="row.entity.graph" ng-click="grid.appScope.addAllToGraph(row.entity)" ng-class="{\'icon-bar-chart\': row.entity.graph == true }"></i></div>',
cellClass: 'aggregate'
}
)
@@ -629,33 +679,43 @@ QDR.log.info("we were just disconnected while on the list page. Setting org to r
}
// the table on the right of the page contains a row for each field in the selected record in the table on the left
+ $scope.desiredTableHeight = 340;
+ $scope.detailCols = [];
$scope.details = {
data: 'detailFields',
- columnDefs: "detailCols",
+ columnDefs: [
+ {
+ field: 'attributeName',
+ displayName: 'Attribute',
+ cellTemplate: '<div title="{{row.entity.title}}" class="listAttrName ui-grid-cell-contents">{{COL_FIELD CUSTOM_FILTERS | pretty}}<i ng-if="row.entity.graph" ng-click="grid.appScope.addToGraph(row.entity)" ng-class="{\'icon-bar-chart\': row.entity.graph == true }"></i></div>'
+ //'<div title="{{row.entity.title}}" class="listAttrName">{{row.entity[col.field]}}<i ng-if="row.entity.graph" ng-click="addToGraph(row.entity)" ng-class="{\'icon-bar-chart\': row.entity.graph == true }"></i></div>'
+ },
+ {
+ field: 'attributeValue',
+ displayName: 'Value',
+ cellTemplate: '<div class="ui-grid-cell-contents" ng-class="{\'changed\': row.entity.changed == 1}"><span>{{COL_FIELD CUSTOM_FILTERS | pretty}}</span></div>'
+ }
+ ],
enableColumnResize: true,
multiSelect: false,
- jqueryUIDraggable: true,
- beforeSelectionChange: function() {
- return false;
- }
+ jqueryUIDraggable: true
};
+
$scope.$on("$destroy", function( event ) {
- //QDR.log.debug("scope destroyed for qdrList");
- stopUpdating();
- QDRService.delDisconnectAction( onDisconnect )
+ clearTimeout(updateIntervalHandle)
+ $(window).off("resize", resizer);
});
- function gotMethodResponse (nodeName, entity, response, context) {
+ function gotMethodResponse (entity, context) {
var statusCode = context.message.application_properties.statusCode;
if (statusCode < 200 || statusCode >= 300) {
Core.notification('error', context.message.statusDescription);
- QDR.log.info('Error ' + context.message.statusDescription)
+ QDR.log.error('Error ' + context.message.statusDescription)
} else {
var note = entity + " " + $filter('Pascalcase')($scope.currentMode.op) + "d"
Core.notification('success', note);
- QDR.log.info('Success ' + note)
+ QDR.log.debug('Success ' + note)
$scope.selectMode($scope.modes[0]);
- restartUpdate();
}
}
$scope.ok = function () {
@@ -678,11 +738,13 @@ QDR.log.info("we were just disconnected while on the list page. Setting org to r
attributes[field.name] = value
}
})
- QDRService.sendMethod($scope.currentNode.id, $scope.selectedEntity, attributes, $scope.currentMode.op, undefined, gotMethodResponse)
+ QDRService.management.connection.sendMethod($scope.currentNode.id, $scope.selectedEntity, attributes, $scope.currentMode.op)
+ .then(function (response) {gotMethodResponse($scope.selectedEntity, response.context)})
}
$scope.remove = function () {
var attributes = {type: $scope.selectedEntity, name: $scope.selectedRecordName}
- QDRService.sendMethod($scope.currentNode.id, $scope.selectedEntity, attributes, $scope.currentMode.op, undefined, gotMethodResponse)
+ QDRService.management.connection.sendMethod($scope.currentNode.id, $scope.selectedEntity, attributes, $scope.currentMode.op)
+ .then(function (response) {gotMethodResponse($scope.selectedEntity, response.context)})
}
function doDialog(tmpl, chart) {
@@ -702,7 +764,7 @@ QDR.log.info("we were just disconnected while on the list page. Setting org to r
}
});
- d.result.then(function(result) { console.log("d.open().then"); });
+ d.result.then(function(result) { QDR.log.debug("d.open().then"); });
};
@@ -717,13 +779,13 @@ QDR.log.info("we were just disconnected while on the list page. Setting org to r
var treeReady = false;
var serviceReady = false;
- $scope.largeNetwork = QDRService.isLargeNetwork()
+ $scope.largeNetwork = QDRService.management.topology.isLargeNetwork()
// called after we know for sure the schema is fetched and the routers are all ready
- QDRService.addUpdatedAction("initList", function () {
- QDRService.stopUpdating();
- QDRService.delUpdatedAction("initList")
+ QDRService.management.topology.addUpdatedAction("initList", function () {
+ QDRService.management.topology.stopUpdating();
+ QDRService.management.topology.delUpdatedAction("initList")
- $scope.nodes = QDRService.nodeList().sort(function (a, b) { return a.name.toLowerCase() > b.name.toLowerCase()});
+ $scope.nodes = QDRService.management.topology.nodeList().sort(function (a, b) { return a.name.toLowerCase() > b.name.toLowerCase()});
// unable to get node list? Bail.
if ($scope.nodes.length == 0) {
$location.path("/" + QDR.pluginName + "/connect")
@@ -745,7 +807,7 @@ QDR.log.info("we were just disconnected while on the list page. Setting org to r
$scope.currentNode = $scope.nodes[0];
}
}
- var sortedEntities = Object.keys(QDRService.schema.entityTypes).sort();
+ var sortedEntities = Object.keys(QDRService.management.schema().entityTypes).sort();
sortedEntities.forEach( function (entity) {
if (excludedEntities.indexOf(entity) == -1) {
if (!angular.isDefined($scope.selectedEntity))
@@ -754,9 +816,8 @@ QDR.log.info("we were just disconnected while on the list page. Setting org to r
var e = new Folder(entity)
e.typeName = "entity"
e.key = entity
- e.isFolder = true
- e.expand = (expandedList.indexOf(entity) > -1)
- var placeHolder = new Folder("loading...")
+ e.expanded = (expandedList.indexOf(entity) > -1)
+ var placeHolder = new Leaf("loading...")
placeHolder.addClass = "loading"
e.children = [placeHolder]
entityTreeChildren.push(e)
@@ -765,33 +826,46 @@ QDR.log.info("we were just disconnected while on the list page. Setting org to r
serviceReady = true;
initTree();
})
+ // called by ng-init="treeReady()" in tmplListTree.html
$scope.treeReady = function () {
treeReady = true;
initTree();
}
+ // this gets called once tree is initialized
+ var onTreeInitialized = function (event, data) {
+ if ($scope.ActivatedKey) {
+ var node = data.tree.getNodeByKey($scope.ActivatedKey)
+ if (node) {
+ node.setActive(true, {noEvents: true})
+ }
+ }
+ updateExpandedEntities();
+ }
+
var initTree = function () {
if (!treeReady || !serviceReady)
return;
- $('#entityTree').dynatree({
- onActivate: onTreeSelected,
- onExpand: onTreeNodeExpanded,
+ $('#entityTree').fancytree({
+ activate: onTreeNodeActivated,
+ expand: onTreeNodeExpanded,
+ beforeActivate: onTreeNodeBeforeActivate,
+ init: onTreeInitialized,
selectMode: 1,
autoCollapse: $scope.largeNetwork,
activeVisible: !$scope.largeNetwork,
+ clickFolderMode: 3,
debugLevel: 0,
- classNames: {
+ extraClasses: {
expander: 'fa-angle',
- connector: 'dynatree-no-connector'
+ connector: 'fancytree-no-connector'
},
- children: entityTreeChildren
+ source: entityTreeChildren
})
- restartUpdate()
- updateExpandedEntities();
};
- QDRService.ensureAllEntities({entity: ".connection"}, function () {
- QDRService.setUpdateEntities([".connection"])
- QDRService.startUpdating();
+ QDRService.management.topology.ensureAllEntities({entity: "connection"}, function () {
+ QDRService.management.topology.setUpdateEntities(["connection"])
+ QDRService.management.topology.startUpdating(true);
})
}]);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[3/8] qpid-dispatch git commit: DISPATCH-801 Updated 3rd party UI
components to latest available via npm
Posted by ea...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/plugin/js/qdrService.js
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/js/qdrService.js b/console/stand-alone/plugin/js/qdrService.js
index 62938d2..a2dd335 100644
--- a/console/stand-alone/plugin/js/qdrService.js
+++ b/console/stand-alone/plugin/js/qdrService.js
@@ -21,1086 +21,28 @@ Licensed to the Apache Software Foundation (ASF) under one
*/
var QDR = (function(QDR) {
- // The QDR service handles the connection to
- // the server in the background
- QDR.module.factory("QDRService", ['$rootScope', '$http', '$timeout', '$resource', '$location', function($rootScope, $http, $timeout, $resource, $location) {
+ // The QDR service handles the connection to the router
+ QDR.module.factory("QDRService", ['$timeout', '$location', function($timeout, $location) {
+ var dm = require("dispatch-management")
var self = {
-
- rhea: require("rhea"),
- timeout: 10, // seconds to wait before assuming a request has failed
- updateInterval: 2000, // milliseconds between background updates
- connectActions: [],
- disconnectActions: [],
- updatedActions: {},
- updating: false, // are we updating the node list in the background
- maxCorrelatorDepth: 10, // max number of outstanding requests to allow
-
- /*
- * @property message
- * The proton message that is used to send commands
- * and receive responses
- */
- sender: undefined,
- receiver: undefined,
- version: undefined,
- sendable: false,
-
- schema: undefined,
-
- connected: false,
- gotTopology: false,
- errorText: undefined,
- connectionError: undefined,
-
- addConnectAction: function(action) {
- if (angular.isFunction(action)) {
- self.connectActions.push(action);
- }
- },
- addDisconnectAction: function(action) {
- if (angular.isFunction(action)) {
- self.disconnectActions.push(action);
- }
- },
- delDisconnectAction: function(action) {
- if (angular.isFunction(action)) {
- var index = self.disconnectActions.indexOf(action)
- if (index >= 0)
- self.disconnectActions.splice(index, 1)
- }
- },
- addUpdatedAction: function(key, action) {
- if (angular.isFunction(action)) {
- self.updatedActions[key] = action;
- }
- },
- delUpdatedAction: function(key) {
- if (key in self.updatedActions)
- delete self.updatedActions[key];
- },
-
- executeConnectActions: function() {
- self.connectActions.forEach(function(action) {
- try {
- action.apply();
- } catch (e) {
- // in case the page that registered the handler has been unloaded
- QDR.log.info(e.message)
- }
- });
- self.connectActions = [];
- },
- executeDisconnectActions: function() {
- self.disconnectActions.forEach(function(action) {
- try {
- action.apply();
- } catch (e) {
- // in case the page that registered the handler has been unloaded
- }
- });
- self.disconnectActions = [];
- },
- executeUpdatedActions: function() {
- for (action in self.updatedActions) {
-// try {
- self.updatedActions[action].apply();
-/* } catch (e) {
-QDR.log.debug("caught error executing updated actions")
-console.dump(e)
- delete self.updatedActions[action]
- }
- */
- }
- },
- redirectWhenConnected: function(org) {
- $location.path(QDR.pluginRoot + "/connect")
- $location.search('org', org);
- },
-
- notifyTopologyDone: function() {
- if (!self.gotTopology) {
- QDR.log.debug("topology was just initialized");
- //console.dump(self.topology._nodeInfo)
- self.gotTopology = true;
- //$rootScope.$apply();
- } else {
- //QDR.log.debug("topology model was just updated");
- }
- self.executeUpdatedActions();
-
- },
-
- isConnected: function() {
- return self.connected;
- },
-
- versionCheck: function (minVer) {
- var verparts = self.version.split('.')
- var minparts = minVer.split('.')
- try {
- for (var i=0; i<minparts.length; ++i) {
- if (parseInt(minVer[i] > parseInt(verparts[i])))
- return false
- }
- } catch (e) {
- QDR.log.debug("error doing version check between: " + self.version + " and " + minVer + " " + e.message)
- return false
- }
- return true
- },
-
- correlator: {
- _objects: {},
- _correlationID: 0,
-
- corr: function() {
- var id = ++this._correlationID + "";
- this._objects[id] = {
- resolver: null
- }
- return id;
- },
- request: function() {
- //QDR.log.debug("correlator:request");
- return this;
- },
- then: function(id, resolver, error) {
- //QDR.log.debug("registered then resolver for correlationID: " + id);
- if (error) {
- //QDR.log.debug("then received an error. deleting correlator")
- delete this._objects[id];
- return;
- }
- this._objects[id].resolver = resolver;
- },
- // called by receiver's on('message') handler when a response arrives
- resolve: function(context) {
- var correlationID = context.message.correlation_id;
- this._objects[correlationID].resolver(context.message.body, context);
- delete this._objects[correlationID];
- },
- depth: function () {
- return Object.keys(this._objects).length
- }
- },
-
- onSubscription: function() {
- self.executeConnectActions();
- var org = $location.search()
- if (org)
- org = org.org
- if (org && org.length > 0 && org !== "connect") {
- self.getSchema(function () {
- self.setUpdateEntities([])
- self.topology.get()
- self.addUpdatedAction('onSub', function () {
- self.delUpdatedAction('onSub')
- $timeout( function () {
- $location.path(QDR.pluginRoot + '/' + org)
- $location.search('org', null)
- $location.replace()
- })
- })
- });
- }
- },
-
- startUpdating: function() {
- self.stopUpdating(true);
- QDR.log.info("startUpdating called")
- self.updating = true;
- self.topology.get();
- },
- stopUpdating: function(silent) {
- self.updating = false;
- if (self.topology._getTimer) {
- clearTimeout(self.topology._getTimer)
- self.topology._getTimer = null;
- }
- if (self.topology._waitTimer) {
- clearTimeout(self.topology._waitTimer)
- self.topology._waitTimer = null;
- }
- if (self.topology._gettingTopo) {
- if (self.topology.q)
- self.topology.q.abort()
- }
- if (!silent)
- QDR.log.info("stopUpdating called")
- },
-
- cleanUp: function() {},
- error: function(line) {
- if (line.num) {
- QDR.log.debug("error - num: ", line.num, " message: ", line.message);
- } else {
- QDR.log.debug("error - message: ", line.message);
- }
- },
- disconnected: function(line) {
- QDR.log.debug("Disconnected from QDR server");
- self.executeDisconnectActions();
- },
-
- nameFromId: function(id) {
- return id.split('/')[3];
- },
-
- humanify: function(s) {
- if (!s || s.length === 0)
- return s;
- var t = s.charAt(0).toUpperCase() + s.substr(1).replace(/[A-Z]/g, ' $&');
- return t.replace(".", " ");
- },
- pretty: function(v) {
- var formatComma = d3.format(",");
- if (!isNaN(parseFloat(v)) && isFinite(v))
- return formatComma(v);
- return v;
- },
-
- nodeNameList: function() {
- var nl = [];
- for (var id in self.topology._nodeInfo) {
- nl.push(self.nameFromId(id));
- }
- return nl.sort();
- },
-
- nodeIdList: function() {
- var nl = [];
- for (var id in self.topology._nodeInfo) {
- nl.push(id);
- }
- return nl.sort();
- },
-
- nodeList: function() {
- var nl = [];
- for (var id in self.topology._nodeInfo) {
- nl.push({
- name: self.nameFromId(id),
- id: id
- });
- }
- return nl;
- },
-
- isLargeNetwork: function () {
- return Object.keys(self.topology._nodeInfo).length >= 12
- },
- isMSIE: function () {
- return (document.documentMode || /Edge/.test(navigator.userAgent))
- },
-
- // given an attribute name array, find the value at the same index in the values array
- valFor: function(aAr, vAr, key) {
- var idx = aAr.indexOf(key);
- if ((idx > -1) && (idx < vAr.length)) {
- return vAr[idx];
- }
- return null;
- },
-
- isArtemis: function(d) {
- return (d.nodeType === 'route-container' || d.nodeType === 'on-demand') && (d.properties && d.properties.product === 'apache-activemq-artemis');
- },
-
- isQpid: function(d) {
- return (d.nodeType === 'route-container' || d.nodeType === 'on-demand') && (d.properties && d.properties.product === 'qpid-cpp');
- },
-
- isAConsole: function(properties, connectionId, nodeType, key) {
- return self.isConsole({
- properties: properties,
- connectionId: connectionId,
- nodeType: nodeType,
- key: key
- })
- },
- isConsole: function(d) {
- // use connection properties if available
- return (d && d['properties'] && d['properties']['console_identifier'] === 'Dispatch console')
- },
-
- flatten: function(attributes, result) {
- var flat = {}
- attributes.forEach(function(attr, i) {
- if (result && result.length > i)
- flat[attr] = result[i]
- })
- return flat;
- },
- isConsoleLink: function(link) {
- // find the connection for this link
- var conns = self.topology.nodeInfo()[link.nodeId]['.connection']
- var connIndex = conns.attributeNames.indexOf("identity")
- var linkCons = conns.results.filter(function(conn) {
- return conn[connIndex] === link.connectionId;
- })
- var conn = self.flatten(conns.attributeNames, linkCons[0]);
-
- return self.isConsole(conn)
- },
-
- quiesceLink: function(nodeId, name) {
- function gotMethodResponse(nodeName, entity, response, context) {
- var statusCode = context.message.application_properties.statusCode;
- if (statusCode < 200 || statusCode >= 300) {
- Core.notification('error', context.message.statusDescription);
- QDR.log.info('Error ' + context.message.statusDescription)
- }
- }
- var attributes = {
- adminStatus: 'disabled',
- name: name
- };
- self.sendMethod(nodeId, "router.link", attributes, "UPDATE", undefined, gotMethodResponse)
- },
- addr_text: function(addr) {
- if (!addr)
- return "-"
- if (addr[0] == 'M')
- return addr.substring(2)
- else
- return addr.substring(1)
- },
- addr_class: function(addr) {
- if (!addr) return "-"
- if (addr[0] == 'M') return "mobile"
- if (addr[0] == 'R') return "router"
- if (addr[0] == 'A') return "area"
- if (addr[0] == 'L') return "local"
- if (addr[0] == 'C') return "link-incoming"
- if (addr[0] == 'E') return "link-incoming"
- if (addr[0] == 'D') return "link-outgoing"
- if (addr[0] == 'F') return "link-outgoing"
- if (addr[0] == 'T') return "topo"
- return "unknown: " + addr[0]
- },
- identity_clean: function(identity) {
- if (!identity)
- return "-"
- var pos = identity.indexOf('/')
- if (pos >= 0)
- return identity.substring(pos + 1)
- return identity
- },
-
- queueDepth: function () {
- var qdepth = self.maxCorrelatorDepth - self.correlator.depth()
- if (qdepth <= 0)
- qdepth = 1;
-//QDR.log.debug("queueDepth requested " + qdepth + "(" + self.correlator.depth() + ")")
- return qdepth;
- },
- // check if all nodes have this entity. if not, get them
- initEntity: function (entity, callback) {
- var callNeeded = Object.keys(self.topology._nodeInfo).some( function (node) {
- return !angular.isDefined(self.topology._nodeInfo[node][entity])
- })
- if (callNeeded) {
- self.loadEntity(entity, callback)
- } else
- callback()
- },
-
- // get/refresh entities for all nodes
- loadEntity: function (entities, callback) {
- if (Object.prototype.toString.call(entities) !== '[object Array]') {
- entities = [entities]
- }
- var q = QDR.queue(self.queueDepth())
- for (node in self.topology._nodeInfo) {
- for (var i=0; i<entities.length; ++i) {
- var entity = entities[i]
- q.defer(self.ensureNodeInfo, node, entity, [], q)
- }
- }
- q.await(function (error) {
- clearTimeout(self.topology._waitTimer)
- callback();
- })
- },
-
- // enusre all the topology nones have all these entities
- ensureAllEntities: function (entityAttribs, callback, extra) {
- self.ensureEntities(Object.keys(self.topology._nodeInfo), entityAttribs, callback, extra)
- },
-
- // ensure these nodes have all these entities. don't fetch unless forced to
- ensureEntities: function (nodes, entityAttribs, callback, extra) {
- if (Object.prototype.toString.call(entityAttribs) !== '[object Array]') {
- entityAttribs = [entityAttribs]
- }
- if (Object.prototype.toString.call(nodes) !== '[object Array]') {
- nodes = [nodes]
- }
- var q = QDR.queue(self.queueDepth())
- for (var n=0; n<nodes.length; ++n) {
- for (var i=0; i<entityAttribs.length; ++i) {
- var ea = entityAttribs[i]
- // if we don'e already have the entity or we want to force a refresh
- if (!self.topology._nodeInfo[nodes[n]][ea.entity] || ea.force)
- q.defer(self.ensureNodeInfo, nodes[n], ea.entity, ea.attrs || [], q)
- }
- }
- q.await(function (error) {
- clearTimeout(self.topology._waitTimer)
- callback(extra);
- })
- },
-
- // queue up a request to get certain attributes for one entity for a node and return the results
- fetchEntity: function (node, entity, attrs, callback) {
- var results = {}
- var gotResponse = function (nodeName, dotentity, response) {
- results = response
- }
- var q = QDR.queue(self.queueDepth())
- q.defer(self.fetchNodeInfo, node, entity, attrs, q, gotResponse)
- q.await(function (error) {
- callback(node, entity, results)
- })
- },
-
- // get/refreshes entities for all topology.nodes
- // call doneCallback when all data is available
- // optionally supply a resultCallBack that will be called as each result is avaialble
- // if a resultCallBack is supplied, the calling function is responsible for accumulating the responses
- // otherwise the responses will be returned to the doneCallback as an object
- fetchAllEntities: function (entityAttribs, doneCallback, resultCallback) {
- var q = QDR.queue(self.queueDepth())
- var results = {}
- if (!resultCallback) {
- resultCallback = function (nodeName, dotentity, response) {
- if (!results[nodeName])
- results[nodeName] = {}
- results[nodeName][dotentity] = angular.copy(response);
- }
- }
- var gotAResponse = function (nodeName, dotentity, response) {
- resultCallback(nodeName, dotentity, response)
- }
- if (Object.prototype.toString.call(entityAttribs) !== '[object Array]') {
- entityAttribs = [entityAttribs]
- }
- var nodes = Object.keys(self.topology._nodeInfo)
- for (var n=0; n<nodes.length; ++n) {
- for (var i=0; i<entityAttribs.length; ++i) {
- var ea = entityAttribs[i]
- q.defer(self.fetchNodeInfo, nodes[n], ea.entity, ea.attrs || [], q, gotAResponse)
- }
- }
- q.await(function (error) {
- doneCallback(results);
- })
- },
-
- setUpdateEntities: function (entities) {
- self.topology._autoUpdatedEntities = entities
- },
- addUpdateEntity: function (entity) {
- if (self.topology._autoUpdatedEntities.indexOf(entity) == -1)
- self.topology._autoUpdatedEntities.push(entity)
- },
- delUpdateEntity: function (entity) {
- var index = self.topology._autoUpdatedEntities.indexOf(entity)
- if (index != -1)
- self.topology._autoUpdatedEntities.splice(index, 1)
- },
-
- /*
- * send the management messages that build up the topology
- *
- *
- */
- topology: {
- _gettingTopo: false,
- _nodeInfo: {},
- _lastNodeInfo: {},
- _waitTimer: null,
- _getTimer: null,
- _autoUpdatedEntities: [],
- q: null,
-
- nodeInfo: function() {
- return self.topology._nodeInfo
- },
-
- get: function() {
- if (self.topology._gettingTopo) {
- QDR.log.debug("asked to get topology but was already getting it")
- if (self.topology.q)
- self.topology.q.abort()
- }
- self.topology.q = null
- if (!self.connected) {
- QDR.log.debug("topology get failed because !self.connected")
- return;
- }
- if (self.topology._getTimer) {
- clearTimeout(self.topology._getTimer)
- self.topology._getTimer = null
- }
-
- //QDR.log.info("starting get topology with correlator.depth of " + self.correlator.depth())
- self.topology._gettingTopo = true;
- self.errorText = undefined;
-
- // get the list of nodes to query.
- // once this completes, we will get the info for each node returned
- self.getRemoteNodeInfo(function(response, context) {
- if (Object.prototype.toString.call(response) === '[object Array]') {
- // remove dropped nodes
- var keys = Object.keys(self.topology._nodeInfo)
- for (var i=0; i<keys.length; ++i) {
- if (response.indexOf(keys[i]) < 0) {
- delete self.topology._nodeInfo[keys[i]]
- }
- }
- // add any new nodes
- // if there is only one node, it will not be returned
- if (response.length === 0) {
- var parts = self.receiver.remote.attach.source.address.split('/')
- parts[4] = '$management'
- response.push(parts.join('/'))
- //QDR.log.info("GET-MGMT-NODES returned an empty list. Using ")
- //console.dump(response)
- }
- for (var i=0; i<response.length; ++i) {
- if (!angular.isDefined(self.topology._nodeInfo[response[i]])) {
- self.topology._nodeInfo[angular.copy(response[i])] = {};
- }
- }
- // also refresh any entities that were requested
- self.topology.q = QDR.queue(self.queueDepth())
- for (var i=0; i<self.topology._autoUpdatedEntities.length; ++i) {
- var entity = self.topology._autoUpdatedEntities[i]
- //QDR.log.debug("queuing requests for all nodes for " + entity)
- for (node in self.topology._nodeInfo) {
- self.topology.q.defer(self.ensureNodeInfo, node, entity, [], self.topology.q)
- }
- }
- self.topology.q.await(function (error) {
- self.topology._gettingTopo = false;
- self.topology.q = null
- self.topology.ondone(error)
- })
- };
- });
- },
-
- cleanUp: function(obj) {
- if (obj)
- delete obj;
- },
- timedOut: function(q) {
- // a node dropped out. this happens when the get-mgmt-nodex
- // results contains more nodes than actually respond within
- // the timeout
- QDR.log.debug("timed out waiting for management responses");
- // note: can't use 'this' in a timeout handler
- self.topology.miniDump("state at timeout");
- q.abort()
- //self.topology.onerror(Error("management responses are not consistent"));
- },
-
- addNodeInfo: function(id, entity, values, q) {
- clearTimeout(self.topology._waitTimer)
- // save the results in the nodeInfo object
- if (id) {
- if (!(id in self.topology._nodeInfo)) {
- self.topology._nodeInfo[id] = {};
- }
- // copy the values to allow garbage collector to reclaim their memory
- self.topology._nodeInfo[id][entity] = angular.copy(values)
- }
- self.topology.cleanUp(values);
- },
- ondone: function(waserror) {
- clearTimeout(self.topology._getTimer);
- clearTimeout(self.topology._waitTimer);
- self.topology._waitTimer = null;
- if (self.updating)
- self.topology._getTimer = setTimeout(self.topology.get, self.updateInterval);
- //if (!waserror)
- self.notifyTopologyDone();
- },
- dump: function(prefix) {
- if (prefix)
- QDR.log.info(prefix);
- QDR.log.info("---");
- for (var key in self.topology._nodeInfo) {
- QDR.log.info(key);
- console.dump(self.topology._nodeInfo[key]);
- QDR.log.info("---");
- }
- },
- miniDump: function(prefix) {
- if (prefix)
- QDR.log.info(prefix);
- QDR.log.info("---");
- console.dump(Object.keys(self.topology._nodeInfo));
- QDR.log.info("---");
- },
- onerror: function(err) {
- self.topology._gettingTopo = false;
- QDR.log.debug("Err:" + err);
- //self.executeDisconnectActions();
- }
-
- },
- getRemoteNodeInfo: function(callback) {
- //QDR.log.debug("getRemoteNodeInfo called");
-
- setTimeout(function () {
- var ret;
- // first get the list of remote node names
- self.correlator.request(
- ret = self.sendMgmtQuery('GET-MGMT-NODES')
- ).then(ret.id, function(response, context) {
- callback(response, context);
- self.topology.cleanUp(response);
- }, ret.error);
- }, 1)
- },
-
- // sends a request and updates the topology.nodeInfo object with the response
- // should only be called from a q.defer() statement
- ensureNodeInfo: function (nodeId, entity, attrs, q, callback) {
- //QDR.log.debug("queuing request for " + nodeId + " " + entity)
- self.getNodeInfo(nodeId, entity, attrs, q, function (nodeName, dotentity, response) {
- //QDR.log.debug("got response for " + nodeId + " " + entity)
- self.topology.addNodeInfo(nodeName, dotentity, response, q)
- callback(null)
- })
- return {
- abort: function() {
- delete self.topology._nodeInfo[nodeId]
- //self.topology._nodeInfo[nodeId][entity] = {attributeNames: [], results: [[]]};
- }
- }
- },
-
- // sends request and returns the response
- // should only be called from a q.defer() statement
- fetchNodeInfo: function (nodeId, entity, attrs, q, heartbeat, callback) {
- self.getNodeInfo(nodeId, entity, attrs, q, function (nodeName, dotentity, response) {
- heartbeat(nodeName, dotentity, response)
- callback(null)
- })
- },
-
- getMultipleNodeInfo: function(nodeNames, entity, attrs, callback, selectedNodeId, aggregate) {
- if (!angular.isDefined(aggregate))
- aggregate = true;
- var responses = {};
- var gotNodesResult = function(nodeName, dotentity, response) {
- responses[nodeName] = response;
- }
-
- var q = QDR.queue(self.queueDepth())
- nodeNames.forEach(function(id) {
- q.defer(self.fetchNodeInfo, id, '.' + entity, attrs, q, gotNodesResult)
- })
- q.await(function (error) {
- if (aggregate)
- self.aggregateNodeInfo(nodeNames, entity, selectedNodeId, responses, callback);
- else {
- callback(nodeNames, entity, responses)
- }
- })
- },
-
- aggregateNodeInfo: function(nodeNames, entity, selectedNodeId, responses, callback) {
- //QDR.log.debug("got all results for " + entity);
- // aggregate the responses
- var newResponse = {};
- var thisNode = responses[selectedNodeId];
- newResponse['attributeNames'] = thisNode.attributeNames;
- newResponse['results'] = thisNode.results;
- newResponse['aggregates'] = [];
- for (var i = 0; i < thisNode.results.length; ++i) {
- var result = thisNode.results[i];
- var vals = [];
- result.forEach(function(val) {
- vals.push({
- sum: val,
- detail: []
- })
- })
- newResponse.aggregates.push(vals);
- }
- var nameIndex = thisNode.attributeNames.indexOf("name");
- var ent = self.schema.entityTypes[entity];
- var ids = Object.keys(responses);
- ids.sort();
- ids.forEach(function(id) {
- var response = responses[id];
- var results = response.results;
- results.forEach(function(result) {
- // find the matching result in the aggregates
- var found = newResponse.aggregates.some(function(aggregate, j) {
- if (aggregate[nameIndex].sum === result[nameIndex]) {
- // result and aggregate are now the same record, add the graphable values
- newResponse.attributeNames.forEach(function(key, i) {
- if (ent.attributes[key] && ent.attributes[key].graph) {
- if (id != selectedNodeId)
- aggregate[i].sum += result[i];
- }
- aggregate[i].detail.push({
- node: self.nameFromId(id) + ':',
- val: result[i]
- })
- })
- return true; // stop looping
- }
- return false; // continute looking for the aggregate record
- })
- if (!found) {
- // this attribute was not found in the aggregates yet
- // because it was not in the selectedNodeId's results
- var vals = [];
- result.forEach(function(val) {
- vals.push({
- sum: val,
- detail: [{
- node: self.nameFromId(id),
- val: val
- }]
- })
- })
- newResponse.aggregates.push(vals)
- }
- })
- })
- callback(nodeNames, entity, newResponse);
- },
-
-
- getSchema: function(callback) {
- //QDR.log.info("getting schema");
- var ret;
- self.correlator.request(
- ret = self.sendMgmtQuery('GET-SCHEMA')
- ).then(ret.id, function(response) {
- //QDR.log.info("Got schema response");
- // remove deprecated
- for (var entityName in response.entityTypes) {
- var entity = response.entityTypes[entityName]
- if (entity.deprecated) {
- // deprecated entity
- delete response.entityTypes[entityName]
- } else {
- for (var attributeName in entity.attributes) {
- var attribute = entity.attributes[attributeName]
- if (attribute.deprecated) {
- // deprecated attribute
- delete response.entityTypes[entityName].attributes[attributeName]
- }
- }
- }
- }
- self.schema = response;
- callback()
- }, ret.error);
- },
-
- getNodeInfo: function(nodeName, entity, attrs, q, callback) {
- //QDR.log.debug("getNodeInfo called with nodeName: " + nodeName + " and entity " + entity);
- var timedOut = function (q) {
- q.abort()
- }
- var atimer = setTimeout(timedOut, self.timeout * 1000, q);
- var ret;
- self.correlator.request(
- ret = self.sendQuery(nodeName, entity, attrs)
- ).then(ret.id, function(response) {
- clearTimeout(atimer)
- callback(nodeName, entity, response);
- }, ret.error);
- },
-
- sendMethod: function(nodeId, entity, attrs, operation, props, callback) {
- setTimeout(function () {
- var ret;
- self.correlator.request(
- ret = self._sendMethod(nodeId, entity, attrs, operation, props)
- ).then(ret.id, function(response, context) {
- callback(nodeId, entity, response, context);
- }, ret.error);
- }, 1)
- },
-
- _fullAddr: function(toAddr) {
- var toAddrParts = toAddr.split('/');
- if (toAddrParts.shift() != "amqp:") {
- self.topology.error(Error("unexpected format for router address: " + toAddr));
- return;
- }
- var fullAddr = toAddrParts.join('/');
- return fullAddr;
- },
-
- _sendMethod: function(toAddr, entity, attrs, operation, props) {
- var ret = {
- id: self.correlator.corr()
- };
- var fullAddr = self._fullAddr(toAddr);
- if (!self.sender || !self.sendable) {
- ret.error = "no sender"
- return ret;
- }
- try {
- var application_properties = {
- operation: operation
- }
- if (entity) {
- var ent = self.schema.entityTypes[entity];
- var fullyQualifiedType = ent ? ent.fullyQualifiedType : entity;
- application_properties.type = fullyQualifiedType || entity;
- }
- if (attrs.name)
- application_properties.name = attrs.name;
- if (props) {
- jQuery.extend(application_properties, props);
- }
- var msg = {
- body: attrs,
- to: fullAddr,
- reply_to: self.receiver.remote.attach.source.address,
- correlation_id: ret.id,
- application_properties: application_properties
- }
- self.sender.send(msg);
- //console.dump("------- method called -------")
- //console.dump(msg)
- } catch (e) {
- error = "error sending: " + e;
- QDR.log.error(error)
- ret.error = error;
- }
- return ret;
- },
-
- sendQuery: function(toAddr, entity, attrs, operation) {
- operation = operation || "QUERY"
- var fullAddr = self._fullAddr(toAddr);
-
- var body;
- if (attrs) {
- body = {
- "attributeNames": attrs,
- }
- } else {
- body = {
- "attributeNames": [],
- }
- }
- if (entity[0] === '.')
- entity = entity.substr(1, entity.length - 1)
- var prefix = "org.apache.qpid.dispatch."
- var configs = ["address", "autoLink", "linkRoute"]
- if (configs.indexOf(entity) > -1)
- prefix += "router.config."
- return self._send(body, fullAddr, operation, prefix + entity);
- },
-
- sendMgmtQuery: function(operation) {
- return self._send([], "/$management", operation);
- },
-
- _send: function(body, to, operation, entityType) {
- var ret = {
- id: self.correlator.corr()
- };
- if (!self.sender || !self.sendable) {
- ret.error = "no sender"
- return ret;
- }
- try {
- var application_properties = {
- operation: operation,
- type: "org.amqp.management",
- name: "self"
- };
- if (entityType)
- application_properties.entityType = entityType;
-
- self.sender.send({
- body: body,
- to: to,
- reply_to: self.receiver.remote.attach.source.address,
- correlation_id: ret.id,
- application_properties: application_properties
- })
- } catch (e) {
- error = "error sending: " + e;
- QDR.log.error(error)
- ret.error = error;
- }
- return ret;
- },
-
- disconnect: function() {
- self.connection.close();
- self.connected = false
- self.errorText = "Disconnected."
- },
-
- connectionTimer: null,
-
- testConnect: function (options, timeout, callback) {
- var connection;
- var allowDelete = true;
- var reconnect = angular.isDefined(options.reconnect) ? options.reconnect : false
- var baseAddress = options.address + ':' + options.port;
- var protocol = "ws"
- if ($location.protocol() === "https")
- protocol = "wss"
- QDR.log.info("testConnect called with reconnect " + reconnect + " using " + protocol + " protocol")
- try {
- var ws = self.rhea.websocket_connect(WebSocket);
- connection = self.rhea.connect({
- connection_details: ws(protocol + "://" + baseAddress, ["binary"]),
- reconnect: reconnect,
- properties: {
- console_identifier: 'Dispatch console'
- }
- }
- );
- } catch (e) {
- QDR.log.debug("exception caught on test connect " + e)
- self.errorText = "Connection failed "
- callback({error: e})
- return
- }
- // called when initial connecting fails, and when connection is dropped after connecting
- connection.on('disconnected', function(context) {
- if (allowDelete) {
- delete connection
- connection.options.reconnect = false
- //QDR.log.info("connection.on(disconnected) called")
- callback({error: "failed to connect"})
- }
- })
- connection.on("connection_open", function (context) {
- allowDelete = false;
- callback({connection: connection, context: context})
- })
- },
-
- connect: function(options) {
- var connection;
- self.topologyInitialized = false;
- if (!self.connected) {
- var okay = {
- connection: false,
- sender: false,
- receiver: false
- }
- var sender, receiver
- self.connectionError = undefined;
-
- var stop = function(context) {
- //self.stopUpdating();
- okay.sender = false;
- okay.receiver = false;
- okay.connected = false;
- self.connected = false;
- self.sender = null;
- self.receiver = null;
- self.sendable = false;
- self.gotTopology = false;
- }
- var maybeStart = function() {
- if (okay.connection && okay.sender && okay.receiver && self.sendable && !self.connected) {
- //QDR.log.info("okay to start")
- self.connected = true;
- self.connection = connection;
- self.sender = sender;
- self.receiver = receiver;
- self.gotTopology = false;
- self.onSubscription();
- }
- }
- var onDisconnect = function() {
- //QDR.log.warn("Disconnected");
- self.connectionError = true;
- stop();
- self.executeDisconnectActions();
- }
-
- // called after connection.open event is fired or connection error has happened
- var connectionCallback = function (options) {
- //QDR.log.info('connectionCallback called')
- if (!options.error) {
- //QDR.log.info('there was no error')
- connection = options.connection
- self.version = options.context.connection.properties.version
- QDR.log.debug("connection_opened")
- okay.connection = true;
- okay.receiver = false;
- okay.sender = false;
-
- connection.on('disconnected', function(context) {
- //QDR.log.info("connection.on(disconnected) called")
- self.errorText = "Unable to connect"
- onDisconnect();
- })
- connection.on('connection_close', function(context) {
- //QDR.log.info("connection closed")
- self.errorText = "Disconnected"
- onDisconnect();
- })
-
- sender = connection.open_sender();
- sender.on('sender_open', function(context) {
- //QDR.log.info("sender_opened")
- okay.sender = true
- maybeStart()
- })
- sender.on('sendable', function(context) {
- //QDR.log.debug("sendable")
- self.sendable = true;
- maybeStart();
- })
-
- receiver = connection.open_receiver({
- source: {
- dynamic: true
- }
- });
- receiver.on('receiver_open', function(context) {
- //QDR.log.info("receiver_opened")
- if (receiver.remote && receiver.remote.attach && receiver.remote.attach.source) {
- okay.receiver = true;
- maybeStart()
- }
- })
- receiver.on("message", function(context) {
- self.correlator.resolve(context);
- });
- } else {
- //QDR.log.info("there was an error " + options.error)
- self.errorText = "Unable to connect"
- onDisconnect();
- }
- }
-
- QDR.log.debug("****** calling rhea.connect ********")
- if (!options.connection) {
- QDR.log.debug("rhea.connect was not passed an existing connection")
- options.reconnect = true
- self.testConnect(options, 5000, connectionCallback)
+ management: new dm.Management($location.protocol()),
+ utilities: dm.Utilities,
+
+ onDisconnect: function () {
+ $timeout( function () {
+ $location.path('/connect')
+ var curPath = $location.path()
+ var org = curPath.substr(1)
+ if (org && org.length > 0 && org !== "connect") {
+ $location.search('org', org)
} else {
- QDR.log.debug("rhea.connect WAS passed an existing connection")
- connectionCallback(options)
+ $location.search('org', null)
}
- }
+ })
}
+
}
+
return self;
}]);
@@ -1117,52 +59,6 @@ console.dump(e)
};
})();
-function ngGridFlexibleHeightPlugin (opts) {
- var self = this;
- self.grid = null;
- self.scope = null;
- self.init = function (scope, grid, services) {
- self.domUtilityService = services.DomUtilityService;
- self.grid = grid;
- self.scope = scope;
- var recalcHeightForData = function () { setTimeout(innerRecalcForData, 1); };
- var innerRecalcForData = function () {
- var gridId = self.grid.gridId;
- var footerPanelSel = '.' + gridId + ' .ngFooterPanel';
- if (!self.grid.$topPanel || !self.grid.$canvas)
- return;
- var extraHeight = self.grid.$topPanel.height() + $(footerPanelSel).height();
- var naturalHeight = self.grid.$canvas.height() + 1;
- if (opts != null) {
- if (opts.minHeight != null && (naturalHeight + extraHeight) < opts.minHeight) {
- naturalHeight = opts.minHeight - extraHeight - 2;
- }
- if (opts.maxHeight != null && (naturalHeight + extraHeight) > opts.maxHeight) {
- naturalHeight = opts.maxHeight;
- }
- }
-
- var newViewportHeight = naturalHeight + 3;
- if (!self.scope.baseViewportHeight || self.scope.baseViewportHeight !== newViewportHeight) {
- self.grid.$viewport.css('height', newViewportHeight + 'px');
- self.grid.$root.css('height', (newViewportHeight + extraHeight) + 'px');
- self.scope.baseViewportHeight = newViewportHeight;
- self.domUtilityService.RebuildGrid(self.scope, self.grid);
- }
- };
- self.scope.catHashKeys = function () {
- var hash = '',
- idx;
- for (idx in self.scope.renderedRows) {
- hash += self.scope.renderedRows[idx].$$hashKey;
- }
- return hash;
- };
- self.scope.$watch('catHashKeys()', innerRecalcForData);
- self.scope.$watch(self.grid.config.data, recalcHeightForData);
- };
-}
-
if (!String.prototype.startsWith) {
String.prototype.startsWith = function (searchString, position) {
return this.substr(position || 0, searchString.length) === searchString
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/plugin/js/qdrSettings.js
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/js/qdrSettings.js b/console/stand-alone/plugin/js/qdrSettings.js
index 3f0c109..746e296 100644
--- a/console/stand-alone/plugin/js/qdrSettings.js
+++ b/console/stand-alone/plugin/js/qdrSettings.js
@@ -51,7 +51,7 @@ var QDR = (function(QDR) {
}, true);
$scope.buttonText = function() {
- if (QDRService.isConnected()) {
+ if (QDRService.management.connection.is_connected()) {
return "Disconnect";
} else {
return "Connect";
@@ -59,9 +59,9 @@ var QDR = (function(QDR) {
};
$scope.connect = function() {
- if (QDRService.connected) {
+ if (QDRService.management.connection.is_connected()) {
$timeout( function () {
- QDRService.disconnect();
+ QDRService.management.connection.disconnect();
})
return;
}
@@ -76,53 +76,58 @@ var QDR = (function(QDR) {
}
}
- var doConnect = function(opts) {
+ var doConnect = function() {
+ QDR.log.info("doConnect called on connect page")
if (!$scope.formEntity.address)
$scope.formEntity.address = "localhost"
if (!$scope.formEntity.port)
$scope.formEntity.port = 5673
var failed = function() {
+ QDR.log.info("disconnect action called");
$timeout(function() {
- QDR.log.debug("disconnect action called");
$scope.connecting = false;
- $scope.connectionErrorText = QDRService.errorText;
- $scope.connectionError = true;
+ $scope.connectionErrorText = "Unable to connect to " + $scope.formEntity.address + ":" + $scope.formEntity.port
+ $scope.connectionError = true
})
}
- QDRService.addDisconnectAction(failed);
- QDRService.addConnectAction(function() {
- QDRService.delDisconnectAction(failed)
- QDRService.getSchema(function () {
- QDR.log.info("got schema after connection")
- QDRService.addUpdatedAction("initialized", function () {
- QDRService.delUpdatedAction("initialized")
- QDR.log.info("got initial topology")
- $timeout(function() {
- $scope.connecting = false;
- if ($location.path().startsWith(QDR.pluginRoot)) {
- var searchObject = $location.search();
- var goto = "overview";
- if (searchObject.org && searchObject.org !== "connect") {
- goto = searchObject.org;
+ var options = {address: $scope.formEntity.address, port: $scope.formEntity.port}
+ QDRService.management.connection.testConnect(options, function (e) {
+ if (e.error) {
+ failed()
+ } else {
+ QDR.log.info("test connect from connect page succeeded")
+ QDRService.management.connection.addConnectAction(function() {
+ QDR.log.info("real connect from connect page succeeded")
+ // get notified if at any time the connection fails
+ QDRService.management.connection.addDisconnectAction(QDRService.onDisconnect);
+ QDRService.management.getSchema(function () {
+ QDR.log.info("got schema after connection")
+ QDRService.management.topology.addUpdatedAction("initialized", function () {
+ QDRService.management.topology.delUpdatedAction("initialized")
+ QDR.log.info("got initial topology")
+ $timeout(function() {
+ $scope.connecting = false;
+ if ($location.path().startsWith(QDR.pluginRoot)) {
+ var searchObject = $location.search();
+ var goto = "overview";
+ if (searchObject.org && searchObject.org !== "connect") {
+ goto = searchObject.org;
+ }
+ $location.search('org', null)
+ $location.path(QDR.pluginRoot + "/" + goto);
}
- $location.search('org', null)
- $location.path(QDR.pluginRoot + "/" + goto);
- }
+ })
+ })
+ QDR.log.info("requesting a topology")
+ QDRService.management.topology.setUpdateEntities([])
+ QDRService.management.topology.get()
})
- })
- QDR.log.info("requesting a topology")
- QDRService.setUpdateEntities([])
- QDRService.topology.get()
- })
- });
- var options = {address: $scope.formEntity.address, port: $scope.formEntity.port}
- // if we have already successfully connected (the test connections succeeded)
- if (opts && opts.connection) {
- options.connection = opts.connection
- options.context = opts.context
- }
- QDRService.connect(options);
+ });
+ options.reconnect = true
+ QDRService.management.connection.connect(options)
+ }
+ })
}
}]);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[8/8] qpid-dispatch git commit: DISPATCH-801 3rd party libraries are
now installed via npm
Posted by ea...@apache.org.
DISPATCH-801 3rd party libraries are now installed via npm
Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/58461d73
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/58461d73
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/58461d73
Branch: refs/heads/master
Commit: 58461d73042b274e786f23ff28a06abd25b677b8
Parents: a93825a
Author: Ernest Allen <ea...@redhat.com>
Authored: Sat Nov 11 08:59:54 2017 -0500
Committer: Ernest Allen <ea...@redhat.com>
Committed: Sat Nov 11 08:59:54 2017 -0500
----------------------------------------------------------------------
console/stand-alone/package.json | 44 +++++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/58461d73/console/stand-alone/package.json
----------------------------------------------------------------------
diff --git a/console/stand-alone/package.json b/console/stand-alone/package.json
new file mode 100644
index 0000000..2e8d78e
--- /dev/null
+++ b/console/stand-alone/package.json
@@ -0,0 +1,44 @@
+{
+ "name": "dispatch-console-stand-alone",
+ "version": "1.1.0",
+ "description": "Qpid Dispatch Router stand-alone console",
+ "main": "index.html",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/apache/qpid-dispatch.git"
+ },
+ "keywords": [
+ "qpid",
+ "dispatch",
+ "console"
+ ],
+ "author": "RedHat",
+ "license": "Apache-2.0",
+ "bugs": {
+ "url": "https://github.com/apache/qpid-dispatch/issues"
+ },
+ "homepage": "https://github.com/apache/qpid-dispatch#readme",
+ "dependencies": {
+ "angular": "1.5.11",
+ "angular-animate": "1.5.11",
+ "angular-resource": "1.5.11",
+ "angular-route": "1.5.11",
+ "angular-sanitize": "1.5.11",
+ "angular-ui-bootstrap": "^2.5.6",
+ "angular-ui-grid": "^4.0.8",
+ "angular-ui-slider": "^0.4.0",
+ "d3": "^3.5.14",
+ "d3-queue": "^3.0.7",
+ "dispatch-management": "^0.1.0",
+ "html5shiv": "^3.7.3",
+ "jquery": "^3.2.1",
+ "jquery-ui-dist": "^1.12.1",
+ "jquery.fancytree": "^2.26.0",
+ "jquery.tipsy": "^1.0.3",
+ "notifyjs-browser": "^0.4.2",
+ "patternfly": "^3.30.0"
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[7/8] qpid-dispatch git commit: DISPATCH-801 Updated 3rd party UI
components to latest available via npm
Posted by ea...@apache.org.
DISPATCH-801 Updated 3rd party UI components to latest available via npm
Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/a93825ab
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/a93825ab
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/a93825ab
Branch: refs/heads/master
Commit: a93825abc87ac4648902145198424a06561bb260
Parents: fdb093e
Author: Ernest Allen <ea...@redhat.com>
Authored: Sat Nov 11 08:58:44 2017 -0500
Committer: Ernest Allen <ea...@redhat.com>
Committed: Sat Nov 11 08:58:44 2017 -0500
----------------------------------------------------------------------
console/stand-alone/README.txt | 9 +-
console/stand-alone/index.html | 83 +-
console/stand-alone/plugin/css/dispatch.css | 15 +-
console/stand-alone/plugin/css/dispatchpf.css | 98 +-
console/stand-alone/plugin/css/plugin.css | 96 +-
console/stand-alone/plugin/css/site-base.css | 4721 ------------------
console/stand-alone/plugin/html/qdrConnect.html | 2 +-
console/stand-alone/plugin/html/qdrLayout.html | 35 -
console/stand-alone/plugin/html/qdrList.html | 4 +-
.../stand-alone/plugin/html/qdrOverview.html | 48 +-
.../stand-alone/plugin/html/qdrTopology.html | 19 +-
.../stand-alone/plugin/html/tmplListTree.html | 4 +-
.../plugin/html/tmplOverviewTree.html | 4 +-
console/stand-alone/plugin/js/dispatchPlugin.js | 104 +-
console/stand-alone/plugin/js/navbar.js | 40 +-
.../stand-alone/plugin/js/qdrChartService.js | 26 +-
console/stand-alone/plugin/js/qdrCharts.js | 77 +-
console/stand-alone/plugin/js/qdrList.js | 462 +-
console/stand-alone/plugin/js/qdrOverview.js | 922 ++--
.../plugin/js/qdrOverviewLogsController.js | 7 +-
console/stand-alone/plugin/js/qdrSchema.js | 25 +-
console/stand-alone/plugin/js/qdrService.js | 1138 +----
console/stand-alone/plugin/js/qdrSettings.js | 81 +-
console/stand-alone/plugin/js/qdrTopology.js | 376 +-
24 files changed, 1304 insertions(+), 7092 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/README.txt
----------------------------------------------------------------------
diff --git a/console/stand-alone/README.txt b/console/stand-alone/README.txt
index 45b36a0..e72f840 100644
--- a/console/stand-alone/README.txt
+++ b/console/stand-alone/README.txt
@@ -2,7 +2,12 @@
The stand-alone qpid dispatch console is an html web site that monitors and controls a qpid dispatch router
To install the console:
-- The console files are normally installed under /usr/share/qpid-dispatch/console/stand-alone
+- After a build, the console files are normally installed under /usr/share/qpid-dispatch/console/stand-alone
+- Install 3rd party libraries:
+ - cd /usr/share/qpid-dispatch/console/stand-alone
+ - npm install
+
+Note: An internet connection is required during the npm install to retrieve the 3rd party javascript / css files.
To run the web console:
- Ensure one of the routers in your network is configured with a normal listener with http: true
@@ -19,7 +24,5 @@ listener {
The router will serve the console's html/js/css from the install directory.
The cosole will automatically connect to the router at localhost:5673
-Note: An internet connection is required on the machine that is running the console in order to retrieve the 3rd party javascript / css files.
-
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/index.html
----------------------------------------------------------------------
diff --git a/console/stand-alone/index.html b/console/stand-alone/index.html
index e99c54b..3cf2526 100644
--- a/console/stand-alone/index.html
+++ b/console/stand-alone/index.html
@@ -26,28 +26,25 @@ under the License.
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>Qpid Dispatch Console</title>
- <link href='https://fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet' type='text/css'>
- <link href='https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css' type="text/css">
- <link rel="stylesheet" href="https://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
-
- <!-- PatternFly Styles -->
<link rel="shortcut icon" type="image/png" href="favicon-32x32.png" sizes="32x32" />
- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
- <!-- Optional theme -->
- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
+ <link rel="stylesheet" href="node_modules/jquery-ui-dist/jquery-ui.css">
+
+ <!-- PatternFly Styles -->
+ <link rel="stylesheet" href="node_modules/patternfly/dist/css/patternfly.min.css" >
+ <link rel="stylesheet" href="node_modules/patternfly/dist/css/patternfly-additions.min.css" >
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/patternfly/3.22.1/css/patternfly.min.css" >
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/patternfly/3.22.1/css/patternfly-additions.min.css" >
+ <!-- jquery Styles -->
+ <link rel="stylesheet" href="node_modules/jquery.tipsy/src/jquery.tipsy.css" type="text/css"/>
+ <link rel="stylesheet" href="node_modules/jquery.fancytree/dist/skin-bootstrap-n/ui.fancytree.css" type="text/css"/>
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery.tipsy/1.0.2/jquery.tipsy.css" type="text/css"/>
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ng-grid/2.0.11/ng-grid.min.css" type="text/css"/>
- <link rel="stylesheet" href="https://cdn.rawgit.com/mar10/dynatree/master/dist/skin/ui.dynatree.css" type="text/css">
+ <!-- angular Styles -->
+ <link rel="stylesheet" href="node_modules/angular-ui-grid/ui-grid.css" type="text/css"/>
+ <!-- local Styles -->
<link rel="stylesheet" href="plugin/css/plugin.css" type="text/css"/>
<link rel="stylesheet" href="plugin/css/dispatch.css" type="text/css"/>
<link rel="stylesheet" href="plugin/css/dispatchpf.css" type="text/css"/>
- <link rel="stylesheet" href="https://cdn.rawgit.com/mohsen1/json-formatter/master/dist/json-formatter.min.css" type="text/css"/>
</head>
<body ng-app="QDR" ng-controller="QDR.Core">
@@ -89,47 +86,42 @@ under the License.
<div class="container-fluid">
<div class="row">
- <div class="col-md-12">
+ <div id="main_container" class="col-md-12">
<div ng-view></div>
</div>
</div>
</div>
<!--[if lt IE 9]>
-<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
+<script src="node_modules/html5shiv/dist/html5shiv.min.js"></script>
<![endif]-->
<!-- jQuery -->
-<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
-<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
-<script src="https://cdn.rawgit.com/mar10/dynatree/master/dist/jquery.dynatree.js"></script>
-
-<!-- PatternFly Custom Componets - Sidebar, Popovers and Datatables Customizations -->
-<script src="https://cdnjs.cloudflare.com/ajax/libs/patternfly/3.22.1/js/patternfly.min.js"></script>
+<script src="node_modules/jquery/dist/jquery.js"></script>
+<script src="node_modules/jquery-ui-dist/jquery-ui.js"></script>
+<script src="node_modules/jquery.fancytree/dist/jquery.fancytree-all.js"></script>
<!-- Angular -->
-<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.2/angular.js"></script>
-<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.2/angular-route.min.js"></script>
-<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.2/angular-resource.min.js"></script>
-
-<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.14.3/ui-bootstrap.min.js"></script>
-<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.14.3/ui-bootstrap-tpls.min.js"></script>
-
-<!-- Angular-Sanitize -->
-<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-sanitize/1.5.11/angular-sanitize.min.js"></script>
-
-<script src='https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.14/d3.min.js'></script>
-<script src='https://cdnjs.cloudflare.com/ajax/libs/d3-queue/3.0.3/d3-queue.min.js'></script>
-
-<script src="https://d3js.org/topojson.v0.min.js"></script>
-
-<script src="https://cdn.rawgit.com/jaz303/tipsy/master/src/javascripts/jquery.tipsy.js"></script>
-<script src="https://cdn.rawgit.com/briancray/tooltipsy/master/tooltipsy.min.js"></script>
-<script src="https://cdn.rawgit.com/angular-ui/ui-slider/master/src/slider.js"></script>
-<script src="https://cdnjs.cloudflare.com/ajax/libs/ng-grid/2.0.11/ng-grid.min.js"></script>
-<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
-<script src="https://cdnjs.cloudflare.com/ajax/libs/notify/0.4.2/notify.min.js"></script>
-
+<script src="node_modules/angular/angular.js"></script>
+<script src="node_modules/angular-animate/angular-animate.min.js"></script>
+<script src="node_modules/angular-sanitize/angular-sanitize.min.js"></script>
+<script src="node_modules/angular-route/angular-route.min.js"></script>
+<script src="node_modules/angular-resource/angular-resource.min.js"></script>
+
+<!-- ui-bootstrap -->
+<script src="node_modules/angular-ui-bootstrap/dist/ui-bootstrap.js"></script>
+<script src="node_modules/angular-ui-bootstrap/dist/ui-bootstrap-tpls.js"></script>
+
+<!-- d3 -->
+<script src='node_modules/d3/d3.min.js'></script>
+<script src='node_modules/d3-queue/build/d3-queue.min.js'></script>
+
+<script src="node_modules/jquery.tipsy/src/jquery.tipsy.js"></script>
+<script src="node_modules/angular-ui-slider/src/slider.js"></script>
+<script src="node_modules/angular-ui-grid/ui-grid.js"></script>
+<script src="node_modules/notifyjs-browser/dist/notify.js"></script>
+
+<script type="text/javascript" src="node_modules/dispatch-management/dist/dispatch-management.js"></script>
<script type="text/javascript" src="plugin/js/dispatchPlugin.js"></script>
<script type="text/javascript" src="plugin/js/qdrOverview.js"></script>
<script type="text/javascript" src="plugin/js/qdrOverviewLogsController.js"></script>
@@ -143,9 +135,6 @@ under the License.
<script type="text/javascript" src="plugin/js/qdrTopology.js"></script>
<script type="text/javascript" src="plugin/js/qdrSettings.js"></script>
-<script type="text/javascript" src="plugin/lib/rhea-min.js"></script>
-
-
<script type="text/javascript">
//angular.element(document.getElementsByTagName('head')).append(angular.element('<base href="' + window.location.pathname + '" />'));
</script>
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/plugin/css/dispatch.css
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/css/dispatch.css b/console/stand-alone/plugin/css/dispatch.css
index 5c946bd..6af6b9d 100644
--- a/console/stand-alone/plugin/css/dispatch.css
+++ b/console/stand-alone/plugin/css/dispatch.css
@@ -616,8 +616,8 @@ div.filter-title h6 {
button.btn-filter {
float: right;
}
-span.dynatree-expanded button.btn-filter,
-a.dynatree-title:hover button.btn-filter {
+span.fancytree-expanded button.btn-filter,
+a.fancytree-title:hover button.btn-filter {
visibility: visible;
}
@@ -672,9 +672,9 @@ div.topoGrid .ui-grid-viewport {
}
.pane-viewport {
- top: 24px !important;
+ top: 26px !important;
}
-.dynatree-node.loading {
+.fancytree-node.loading {
position: initial;
}
@@ -723,4 +723,9 @@ select.required, input.required {
content: '(must be unique if supplied)'
}
-.unique-indicator
\ No newline at end of file
+.unique-indicator
+
+.error {
+ color: red;
+ font-weight: bold;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/plugin/css/dispatchpf.css
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/css/dispatchpf.css b/console/stand-alone/plugin/css/dispatchpf.css
index 15dc0a6..fc6c2ac 100644
--- a/console/stand-alone/plugin/css/dispatchpf.css
+++ b/console/stand-alone/plugin/css/dispatchpf.css
@@ -25,52 +25,61 @@ span.logo {
.navbar-pf .navbar-brand {
padding: 2px 0 2px;
}
-/* using dynatree instead of treeview */
-#overtree ul.dynatree-container,
-#entityTree ul.dynatree-container,
-#schema ul.dynatree-container {
+/* using fancytree instead of treeview */
+
+#overtree ul.fancytree-container,
+#entityTree ul.fancytree-container,
+#schema ul.fancytree-container {
background-color: transparent;
border: 0px;
}
-span.dynatree-folder a {
+span.fancytree-folder a {
font-weight: normal;
font-size: 12px;
}
-ul.dynatree-container li,
-span.dynatree-icon {
+ul.fancytree-container li,
+span.fancytree-icon {
background-image: none;
}
-.dynatree-exp-c span.fa-angle, .dynatree-exp-e span.fa-angle,
-.dynatree-exp-cl span.fa-angle, .dynatree-exp-el span.fa-angle {
+.fancytree-exp-c span.fa-angle, .fancytree-exp-e span.fa-angle,
+.fancytree-exp-cl span.fa-angle, .fancytree-exp-el span.fa-angle {
margin-right: 5px;
}
-.dynatree-exp-c span.fa-angle:before, .dynatree-exp-cl span.fa-angle:before {
+.fancytree-exp-c span.fa-angle:before, .fancytree-exp-cl span.fa-angle:before {
+ font-family: FontAwesome;
+ content: "\f105";
+}
+.fancytree-exp-e .fancytree-expander:before, .fancytree-exp-el .fancytree-expander:before {
+ font-family: FontAwesome;
+ content: "\f107";
+}
+.fancytree-exp-c .fancytree-expander:before, .fancytree-exp-cl .fancytree-expander:before {
font-family: FontAwesome;
content: "\f105";
}
-.dynatree-exp-e span.fa-angle:before, .dynatree-exp-el span.fa-angle:before {
+.fancytree-exp-e span.fa-angle:before, .fancytree-exp-el span.fa-angle:before {
font-family: FontAwesome;
content: "\f107";
}
-.dynatree-ico-ef span.dynatree-icon, .dynatree-ico-cf span.dynatree-icon {
+.fancytree-ico-ef span.fancytree-icon, .fancytree-ico-cf span.fancytree-icon {
background-image: initial;
- font-family: FontAwsome;
+ font-family: FontAwesome;
}
-.dynatree-ico-cf span.dynatree-icon:before {
+.fancytree-ico-cf span.fancytree-icon:before {
font-family: FontAwesome;
content: "\f07b";
}
-.dynatree-ico-ef span.dynatree-icon:before {
+.fancytree-ico-ef span.fancytree-icon:before {
font-family: FontAwesome;
content: "\f07c";
}
-ul.dynatree-container a {
+ul.fancytree-container a {
color: #363636;
}
@@ -100,6 +109,8 @@ div#list-controller {
.pane-viewport {
position: relative;
+ /* height: calc(100vh - 20px); */
+ overflow: auto;
}
#list-controller .tree-header, #list-controller .tree-header select {
@@ -184,3 +195,58 @@ div.qdr-topology.pane.left {
width: 400px;
top: 0;
}
+/*
+.treeview .list-group-item.node-selected {
+ color: #FFFFFF !important;
+ background-color: #428bca !important;
+}
+*/
+span.fancytree-expander {
+ display: none;
+}
+
+#overview-controller span.fancytree-expander {
+ display: inline-block;
+}
+
+.fancytree-active .fancytree-title,
+.fancytree-active .fancytree-icon,
+.fancytree-active .fancytree-expander {
+ color: white;
+}
+
+.ui-grid {
+ border: 0px;
+}
+
+.ui-grid-header {
+ border: 1px solid #d4d4d4;
+}
+
+#overview-controller .sidebar-pf-left, #list-controller .sidebar-pf-left {
+ padding-right: 0px;
+}
+
+#crosshtml {
+ position: absolute;
+ display: none;
+ padding: 1em;
+ border: 1px solid grey;
+ background-color: white;
+ border-radius: 4px;
+}
+
+.pane-bar {
+ float: right;
+ height: calc(100vh - 75px);
+ width: 6px;
+ background-color: white;
+ border: 1px solid #e0e0e0;
+ position: absolute;
+ top: 0;
+ right: -6px;
+ cursor: ew-resize;
+
+
+ display: none;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a93825ab/console/stand-alone/plugin/css/plugin.css
----------------------------------------------------------------------
diff --git a/console/stand-alone/plugin/css/plugin.css b/console/stand-alone/plugin/css/plugin.css
index 20fd0fb..f4ac42b 100644
--- a/console/stand-alone/plugin/css/plugin.css
+++ b/console/stand-alone/plugin/css/plugin.css
@@ -26,7 +26,7 @@ ul.qdrListNodes > li > span {
display: block;
}
-.qdrList .gridStyle {
+.qdrList .grid {
width: 20em;
margin-right: 0;
float: left;
@@ -215,6 +215,7 @@ div.d3Chart .title {
div.d3Chart {
padding: 1em 0;
border: 1px solid #C0C0C0;
+ margin-bottom: 2em;
}
div.d3Chart.hDash {
border: 0px;
@@ -288,7 +289,7 @@ div.qdrList li.active, ul.qdrListNodes li.active {
background-color: #e0e0ff;
}
-div.qdr-attributes span.dynatree-selected a {
+div.qdr-attributes span.fancytree-selected a {
background-color: #e0e0ff;
}
div.qdr-attributes.pane, div.qdr-topology.pane {
@@ -309,7 +310,7 @@ div#main.qdr div.qdrList div.selected {
}
#dialogChart, #dialogEditChart {
- height: 200px;
+ height: 220px;
}
.chartOptions .modal-body {
@@ -483,6 +484,9 @@ ul.qdrTopoModes {
left: 10px;
}
+.overview-tree, .qdr-attributes {
+ min-height: calc(100vh - 90px)
+}
.treeContainer {
width: 100%;
float: left;
@@ -501,18 +505,14 @@ ul.qdrTopoModes {
margin-left: 260px;
}
-.gridStyle:not(.noHighlight) .ui-grid-row:hover .ui-grid-cell-contents {
- background-color: #e0e0ff;
+.grid:not(.noHighlight) .ui-grid-row:hover .ui-grid-cell-contents {
+ /*background-color: #e0e0ff; */
+ background-color: #e9f2f9
}
-
.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;
}
@@ -700,132 +700,132 @@ 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 {
+.qdr-overview.pane.left span:not(.fancytree-has-children) .fancytree-icon:before,
+.qdr-attributes.pane.left span:not(.fancytree-has-children) .fancytree-icon:before {
color: green;
}
-span:not(.dynatree-has-children).address .dynatree-icon:before,
-span:not(.dynatree-has-children).router\.address .dynatree-icon:before {
+span:not(.fancytree-has-children).address .fancytree-icon:before,
+span:not(.fancytree-has-children).router\.address .fancytree-icon:before {
font-family: FontAwesome;
content: "\f0ac";
}
-span:not(.dynatree-has-children).address.mobile .dynatree-icon:before,
-span:not(.dynatree-has-children).router\.address.mobile .dynatree-icon:before {
+span:not(.fancytree-has-children).address.mobile .fancytree-icon:before,
+span:not(.fancytree-has-children).router\.address.mobile .fancytree-icon:before {
font-family: FontAwesome;
content: "\f109";
}
-span:not(.dynatree-has-children).address.internal.mobile .dynatree-icon:before,
-span:not(.dynatree-has-children).router\.address.internal.mobile .dynatree-icon:before {
+span:not(.fancytree-has-children).address.internal.mobile .fancytree-icon:before,
+span:not(.fancytree-has-children).router\.address.internal.mobile .fancytree-icon:before {
font-family: FontAwesome;
content: "\f0ac";
}
-span:not(.dynatree-has-children).address.router .dynatree-icon:before,
-span:not(.dynatree-has-children).router\.address.router .dynatree-icon:before {
+span:not(.fancytree-has-children).address.router .fancytree-icon:before,
+span:not(.fancytree-has-children).router\.address.router .fancytree-icon:before {
font-family: FontAwesome;
content: "\f047";
}
-span.address-link .dynatree-icon:before {
+span.address-link .fancytree-icon:before {
font-family: FontAwesome;
content: "\f0ac";
}
-span:not(.dynatree-has-children).connection.external .dynatree-icon:before {
+span:not(.fancytree-has-children).connection.external .fancytree-icon:before {
font-family: FontAwesome;
content: "\f109";
}
-span:not(.dynatree-has-children).connection.normal .dynatree-icon:before {
+span:not(.fancytree-has-children).connection.normal .fancytree-icon:before {
font-family: FontAwesome;
content: "\f08e";
}
-span:not(.dynatree-has-children).connection.external.quiesced .dynatree-icon:before {
+span:not(.fancytree-has-children).connection.external.quiesced .fancytree-icon:before {
font-family: FontAwesome;
content: "\f14c";
color: red;
}
-span:not(.dynatree-has-children).connection.inter-router .dynatree-icon:before {
+span:not(.fancytree-has-children).connection.inter-router .fancytree-icon:before {
font-family: FontAwesome;
content: "\f07e";
}
-span:not(.dynatree-has-children).connection.router-control .dynatree-icon:before {
+span:not(.fancytree-has-children).connection.router-control .fancytree-icon:before {
font-family: FontAwesome;
content: "\f013";
}
-span:not(.dynatree-has-children).no-data .dynatree-icon:before {
+span:not(.fancytree-has-children).no-data .fancytree-icon:before {
font-family: FontAwesome;
content: "\f05e";
color: red !important;
}
-span:not(.dynatree-has-children).loading .dynatree-icon:before {
+span:not(.fancytree-has-children).loading .fancytree-icon:before {
font-family: FontAwesome;
content: "\f254";
}
-span:not(.dynatree-has-children).connector .dynatree-icon:before {
+span:not(.fancytree-has-children).connector .fancytree-icon:before {
font-family: FontAwesome;
content: "\f126";
}
-span:not(.dynatree-has-children).container .dynatree-icon:before {
+span:not(.fancytree-has-children).container .fancytree-icon:before {
font-family: FontAwesome;
content: "\f16c";
}
-span:not(.dynatree-has-children).log .dynatree-icon:before {
+span:not(.fancytree-has-children).log .fancytree-icon:before {
font-family: FontAwesome;
content: "\f0f6";
}
-span:not(.dynatree-has-children).router\.node .dynatree-icon:before {
+span:not(.fancytree-has-children).router\.node .fancytree-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{
+span:not(.fancytree-has-children).link.inter-router .fancytree-icon:before,
+span:not(.fancytree-has-children).router\.link.inter-router .fancytree-icon:before{
font-family: FontAwesome;
content: "\f07e";
}
-span:not(.dynatree-has-children).link.router-control .dynatree-icon:before,
-span:not(.dynatree-has-children).router\.link.router-control .dynatree-icon:before{
+span:not(.fancytree-has-children).link.router-control .fancytree-icon:before,
+span:not(.fancytree-has-children).router\.link.router-control .fancytree-icon:before{
font-family: FontAwesome;
content: "\f013";
}
-span:not(.dynatree-has-children).link.endpoint .dynatree-icon:before,
-span:not(.dynatree-has-children).router\.link.endpoint .dynatree-icon:before{
+span:not(.fancytree-has-children).link.endpoint .fancytree-icon:before,
+span:not(.fancytree-has-children).router\.link.endpoint .fancytree-icon:before{
font-family: FontAwesome;
content: "\f109";
}
-span:not(.dynatree-has-children).link.console .dynatree-icon:before,
-span:not(.dynatree-has-children).router\.link.console .dynatree-icon:before {
+span:not(.fancytree-has-children).link.console .fancytree-icon:before,
+span:not(.fancytree-has-children).router\.link.console .fancytree-icon:before {
font-family: FontAwesome;
content: "\f108";
}
-span:not(.dynatree-has-children).listener .dynatree-icon:before {
+span:not(.fancytree-has-children).listener .fancytree-icon:before {
font-family: FontAwesome;
content: "\f025";
}
-span:not(.dynatree-has-children).connection .dynatree-icon:before {
+span:not(.fancytree-has-children).connection .fancytree-icon:before {
font-family: FontAwesome;
content: "\f07e";
}
-span:not(.dynatree-has-children).connection.console .dynatree-icon:before {
+span:not(.fancytree-has-children).connection.console .fancytree-icon:before {
font-family: FontAwesome;
content: "\f108";
}
-span:not(.dynatree-has-children).waypoint .dynatree-icon:before {
+span:not(.fancytree-has-children).waypoint .fancytree-icon:before {
font-family: FontAwesome;
content: "\f0ec";
}
-span:not(.dynatree-has-children).router .dynatree-icon:before {
+span:not(.fancytree-has-children).router .fancytree-icon:before {
font-family: FontAwesome;
content: "\f047";
}
-span:not(.dynatree-has-children).fixedAddress .dynatree-icon:before {
+span:not(.fancytree-has-children).fixedAddress .fancytree-icon:before {
font-family: FontAwesome;
content: "\f015";
}
-span:not(.dynatree-has-children).linkRoutePattern .dynatree-icon:before {
+span:not(.fancytree-has-children).linkRoutePattern .fancytree-icon:before {
font-family: FontAwesome;
content: "\f039";
}
-span:not(.dynatree-has-children).allocator .dynatree-icon:before {
+span:not(.fancytree-has-children).allocator .fancytree-icon:before {
font-family: FontAwesome;
content: "\f170";
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org