From 5673ee47d0ae1918b91c70808df8ac46ebfb03c0 Mon Sep 17 00:00:00 2001 From: KV Date: Sat, 20 Feb 2021 00:21:22 +0100 Subject: [PATCH] Support both bgcolor and bgcolor_title attributes Solves #210 completely by supporting bgcolor of both the node title and the whole node independently using separate attributes. --- src/wireviz/DataClasses.py | 2 ++ src/wireviz/Harness.py | 13 ++++++++----- src/wireviz/wv_gv_html.py | 12 ++++++++---- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index f02cc957..b69452e3 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -86,6 +86,7 @@ def description(self) -> str: class Connector: name: Designator bgcolor: Optional[Color] = None + bgcolor_title: Optional[Color] = None manufacturer: Optional[MultilineHypertext] = None mpn: Optional[MultilineHypertext] = None pn: Optional[Hypertext] = None @@ -169,6 +170,7 @@ def get_qty_multiplier(self, qty_multiplier: Optional[ConnectorMultiplier]) -> i class Cable: name: Designator bgcolor: Optional[Color] = None + bgcolor_title: Optional[Color] = None manufacturer: Union[MultilineHypertext, List[MultilineHypertext], None] = None mpn: Union[MultilineHypertext, List[MultilineHypertext], None] = None pn: Union[Hypertext, List[Hypertext], None] = None diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index 61737727..1b37fb86 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -11,7 +11,8 @@ from wireviz import wv_colors, __version__, APP_NAME, APP_URL from wireviz.DataClasses import Connector, Cable from wireviz.wv_colors import get_color_hex -from wireviz.wv_gv_html import nested_html_table, html_bgcolor, html_colorbar, \ +from wireviz.wv_gv_html import nested_html_table, \ + html_bgcolor_attr, html_bgcolor, html_colorbar, \ html_image, html_caption, remove_links, html_line_breaks from wireviz.wv_bom import manufacturer_info_field, component_table_entry, \ get_additional_component_table, bom_list, generate_bom @@ -113,7 +114,8 @@ def create_graph(self) -> Graph: html = [] - rows = [[f'{html_bgcolor(connector.bgcolor)}{remove_links(connector.name)}' if connector.show_name else None], + rows = [[f'{html_bgcolor(connector.bgcolor_title)}{remove_links(connector.name)}' + if connector.show_name else None], [f'P/N: {remove_links(connector.pn)}' if connector.pn else None, html_line_breaks(manufacturer_info_field(connector.manufacturer, connector.mpn))], [html_line_breaks(connector.type), @@ -125,7 +127,7 @@ def create_graph(self) -> Graph: [html_caption(connector.image)]] rows.extend(get_additional_component_table(self, connector)) rows.append([html_line_breaks(connector.notes)]) - html.extend(nested_html_table(rows)) + html.extend(nested_html_table(rows, html_bgcolor_attr(connector.bgcolor))) if connector.style != 'simple': pinhtml = [] @@ -194,7 +196,8 @@ def create_graph(self) -> Graph: elif cable.gauge_unit.upper() == 'AWG': awg_fmt = f' ({mm2_equiv(cable.gauge)} mm\u00B2)' - rows = [[f'{html_bgcolor(cable.bgcolor)}{remove_links(cable.name)}' if cable.show_name else None], + rows = [[f'{html_bgcolor(cable.bgcolor_title)}{remove_links(cable.name)}' + if cable.show_name else None], [f'P/N: {remove_links(cable.pn)}' if (cable.pn and not isinstance(cable.pn, list)) else None, html_line_breaks(manufacturer_info_field( cable.manufacturer if not isinstance(cable.manufacturer, list) else None, @@ -211,7 +214,7 @@ def create_graph(self) -> Graph: rows.extend(get_additional_component_table(self, cable)) rows.append([html_line_breaks(cable.notes)]) - html.extend(nested_html_table(rows)) + html.extend(nested_html_table(rows, html_bgcolor_attr(cable.bgcolor))) wirehtml = [] wirehtml.append('') # conductor table diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index 0be23602..c96388e6 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -1,20 +1,20 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -from typing import List, Union +from typing import List, Optional, Union import re from wireviz.DataClasses import Color from wireviz.wv_colors import translate_color from wireviz.wv_helper import remove_links -def nested_html_table(rows): +def nested_html_table(rows: List[Union[str, List[Optional[str]], None]], table_attrs: str = '') -> str: # input: list, each item may be scalar or list # output: a parent table with one child table per parent item that is list, and one cell per parent item that is scalar # purpose: create the appearance of one table, where cell widths are independent between rows # attributes in any leading inside a list are injected into to the preceeding
tag html = [] - html.append('') + html.append(f'
') for row in rows: if isinstance(row, List): if len(row) > 0 and any(row): @@ -33,9 +33,13 @@ def nested_html_table(rows): html.append('
') return html +def html_bgcolor_attr(color: Color) -> str: + """Return attributes for bgcolor or '' if no color.""" + return f' bgcolor="{translate_color(color, "HEX")}"' if color else '' + def html_bgcolor(color: Color, _extra_attr: str = '') -> str: """Return
attributes prefix for bgcolor or '' if no color.""" - return f'' if color else '' + return f'' if color else '' def html_colorbar(color: Color) -> str: """Return attributes prefix for bgcolor and minimum width or None if no color."""