mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Closes #1179: Adjust topology map text color based on node background
This commit is contained in:
@ -13,6 +13,8 @@ from django.template import Template, Context
|
||||
from django.utils.encoding import python_2_unicode_compatible
|
||||
from django.utils.safestring import mark_safe
|
||||
|
||||
from utilities.utils import foreground_color
|
||||
|
||||
|
||||
CUSTOMFIELD_MODELS = (
|
||||
'site', 'rack', 'devicetype', 'device', # DCIM
|
||||
@ -336,8 +338,9 @@ class TopologyMap(models.Model):
|
||||
for query in device_set.split(';'): # Split regexes on semicolons
|
||||
devices += Device.objects.filter(name__regex=query).select_related('device_role')
|
||||
for d in devices:
|
||||
fillcolor = '#{}'.format(d.device_role.color)
|
||||
subgraph.node(d.name, style='filled', fillcolor=fillcolor)
|
||||
bg_color = '#{}'.format(d.device_role.color)
|
||||
fg_color = '#{}'.format(foreground_color(d.device_role.color))
|
||||
subgraph.node(d.name, style='filled', fillcolor=bg_color, fontcolor=fg_color, fontname='sans')
|
||||
|
||||
# Add an invisible connection to each successive device in a set to enforce horizontal order
|
||||
for j in range(0, len(devices) - 1):
|
||||
|
@ -24,3 +24,15 @@ def csv_format(data):
|
||||
csv.append(u'{}'.format(value))
|
||||
|
||||
return u','.join(csv)
|
||||
|
||||
|
||||
def foreground_color(bg_color):
|
||||
"""
|
||||
Return the ideal foreground color (black or white) for a given background color in hexadecimal RGB format.
|
||||
"""
|
||||
bg_color = bg_color.strip('#')
|
||||
r, g, b = [int(bg_color[c:c+2], 16) for c in (0, 2, 4)]
|
||||
if r * 0.299 + g * 0.587 + b * 0.114 > 186:
|
||||
return '000000'
|
||||
else:
|
||||
return 'ffffff'
|
||||
|
Reference in New Issue
Block a user