dokku-comp

This commit is contained in:
2023-09-11 23:04:53 +03:00
parent 4be2dc3a45
commit b9a98f1e56
25 changed files with 646 additions and 460 deletions

View File

@@ -1,14 +1,14 @@
# Define SVG code generation function with member_id parameter
def generate_chart(members, member_id = None):
def generate_chart(members, member_id=None):
if not member_id:
member_id = members[0]['id']
member_id = members[0]["id"]
# Define some constants for layout
node_radius = 30
node_spacing = 80
node_y = 100
parent_y_offset = 50
child_y_offset = 150
# Find the specified member and its descendants
member = None
descendants = set()
@@ -17,7 +17,7 @@ def generate_chart(members, member_id = None):
member = m
descendants.add(member_id)
break
stack = member["children"].copy()
while stack:
child_id = stack.pop()
@@ -33,12 +33,12 @@ def generate_chart(members, member_id = None):
for i, m in enumerate(members):
if m["id"] in descendants:
x_positions[m["id"]] = (i * node_spacing) + node_radius
# Start building the SVG code
svg_width = (len(descendants) * node_spacing) + (2 * node_radius)
svg_height = 200
svg_code = f'<svg width="{svg_width}" height="{svg_height}">'
# Generate nodes and names for each descendant
for m in members:
if m["id"] in descendants:
@@ -46,22 +46,22 @@ def generate_chart(members, member_id = None):
node_code = f'<circle cx="{node_x}" cy="{node_y}" r="{node_radius}" stroke="black" stroke-width="2" fill="white"/>'
name_code = f'<text x="{node_x}" y="{node_y}" font-size="16" text-anchor="middle">{m["name"]}</text>'
svg_code += node_code + name_code
# Generate links to parent nodes
for parent_id in m["parents"]:
if parent_id in descendants:
parent_x = x_positions[parent_id]
link_code = f'<line x1="{node_x}" y1="{node_y - parent_y_offset}" x2="{parent_x}" y2="{node_y}" stroke="black" stroke-width="2"/>'
svg_code += link_code
# Generate links to child nodes
for child_id in m["children"]:
if child_id in descendants:
child_x = x_positions[child_id]
link_code = f'<line x1="{node_x}" y1="{node_y + child_y_offset}" x2="{child_x}" y2="{node_y}" stroke="black" stroke-width="2"/>'
svg_code += link_code
# Finish the SVG code
svg_code += '</svg>'
return svg_code.encode('utf-8')
svg_code += "</svg>"
return svg_code.encode("utf-8")