From c37c175dd689e448e816a3e83a525d40ba022490 Mon Sep 17 00:00:00 2001 From: David Kaltschmidt Date: Thu, 16 Jun 2016 11:46:42 +0200 Subject: [PATCH] Network colors from a scale * all colors are unique and separated enough * only 10 colors are available * contains red and green --- .../app/scripts/charts/node-networks-overlay.js | 4 ++-- .../scripts/components/network-selector-item.js | 4 ++-- client/app/scripts/reducers/root.js | 16 ---------------- client/app/scripts/utils/color-utils.js | 5 +++++ 4 files changed, 9 insertions(+), 20 deletions(-) diff --git a/client/app/scripts/charts/node-networks-overlay.js b/client/app/scripts/charts/node-networks-overlay.js index 91f387caa..22a371353 100644 --- a/client/app/scripts/charts/node-networks-overlay.js +++ b/client/app/scripts/charts/node-networks-overlay.js @@ -1,7 +1,7 @@ import React from 'react'; import d3 from 'd3'; import { List as makeList } from 'immutable'; -import { getNodeColor } from '../utils/color-utils'; +import { getNetworkColor } from '../utils/color-utils'; import { isContrastMode } from '../utils/contrast-utils'; @@ -35,7 +35,7 @@ function NodeNetworksOverlay({labelOffsetY, size, stack, networks = makeList()}) ry={ry} className="node-network" style={{ - fill: getNodeColor(n.get('colorKey')) + fill: getNetworkColor(n.get('colorKey', n.get('id'))) }} key={n.get('id')} /> diff --git a/client/app/scripts/components/network-selector-item.js b/client/app/scripts/components/network-selector-item.js index fe69fd676..fbd747c26 100644 --- a/client/app/scripts/components/network-selector-item.js +++ b/client/app/scripts/components/network-selector-item.js @@ -3,7 +3,7 @@ import classNames from 'classnames'; import { connect } from 'react-redux'; import { selectNetwork, pinNetwork, unpinNetwork } from '../actions/app-actions'; -import { getNodeColor } from '../utils/color-utils'; +import { getNetworkColor } from '../utils/color-utils'; class NetworkSelectorItem extends React.Component { @@ -39,7 +39,7 @@ class NetworkSelectorItem extends React.Component { 'network-selector-action-selected': isSelected }); const style = { - borderBottomColor: getNodeColor(network.get('colorKey', id)) + borderBottomColor: getNetworkColor(network.get('colorKey', id)) }; return ( diff --git a/client/app/scripts/reducers/root.js b/client/app/scripts/reducers/root.js index 58d9c0ae6..7fac2d35f 100644 --- a/client/app/scripts/reducers/root.js +++ b/client/app/scripts/reducers/root.js @@ -7,7 +7,6 @@ import ActionTypes from '../constants/action-types'; import { EDGE_ID_SEPARATOR } from '../constants/naming'; import { applyPinnedSearches, updateNodeMatches } from '../utils/search-utils'; import { getNetworkNodes, getAvailableNetworks } from '../utils/network-view-utils'; -import { longestCommonPrefix } from '../utils/string-utils'; import { findTopologyById, getAdjacentNodes, setTopologyUrlsById, updateTopologyIds, filterHiddenTopologies } from '../utils/topology-utils'; @@ -538,21 +537,6 @@ export function rootReducer(state = initialState, action) { state = state.set('networkNodes', getNetworkNodes(state.get('nodes'))); state = state.set('availableNetworks', getAvailableNetworks(state.get('nodes'))); - // optimize color coding for networks - const networkPrefix = longestCommonPrefix(state.get('availableNetworks') - .map(n => n.get('id')).toJS()); - - if (networkPrefix) { - state = state.update('nodes', - nodes => nodes.map(node => node.update('networks', - networks => networks && networks.map(n => n.set('colorKey', - n.get('colorKey').substr(networkPrefix.length)))))); - - state = state.update('availableNetworks', - networks => networks.map(network => network - .set('colorKey', network.get('id').substr(networkPrefix.length)))); - } - state = state.set('availableCanvasMetrics', state.get('nodes') .valueSeq() .flatMap(n => (n.get('metrics') || makeList()).map(m => ( diff --git a/client/app/scripts/utils/color-utils.js b/client/app/scripts/utils/color-utils.js index 27247b5e3..c67821364 100644 --- a/client/app/scripts/utils/color-utils.js +++ b/client/app/scripts/utils/color-utils.js @@ -3,6 +3,7 @@ import d3 from 'd3'; const PSEUDO_COLOR = '#b1b1cb'; const hueRange = [20, 330]; // exclude red const hueScale = d3.scale.linear().range(hueRange); +const networkColorScale = d3.scale.category10(); // map hues to lightness const lightnessScale = d3.scale.linear().domain(hueRange).range([0.5, 0.7]); const startLetterRange = 'A'.charCodeAt(); @@ -69,6 +70,10 @@ export function getNodeColorDark(text = '', secondText = '', isPseudo = false) { return hsl.toString(); } +export function getNetworkColor(text) { + return networkColorScale(text); +} + export function brightenColor(color) { let hsl = d3.rgb(color).hsl(); if (hsl.l > 0.5) {