From 54bf41816ba83bea08160fc360731183d511b165 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 12 Jan 2024 23:44:45 +1100 Subject: [PATCH] Fix #4197. URLs in SVG schedules are now clickable. --- .../blenderbim/bim/module/drawing/scheduler.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/blenderbim/blenderbim/bim/module/drawing/scheduler.py b/src/blenderbim/blenderbim/bim/module/drawing/scheduler.py index ba23eb156b..4bc8d6f41f 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/scheduler.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/scheduler.py @@ -528,6 +528,10 @@ class Scheduler: if len(text_lines) == 1 and not wrap_text: text_params.update(box_alignment_params) text_tag = self.svg.text(text_lines[0], insert=(x, y), **(text_params)) + if self.is_url(text_lines[0]): + anchor = self.svg.a(text_lines[0].strip()) + anchor.add(text_tag) + text_tag = anchor self.svg.add(text_tag) return @@ -562,11 +566,18 @@ class Scheduler: tspan = self.svg.tspan(text_line, insert=(x, y), **text_params) # doing it here and not in tspan constructor because constructor adds unnecessary spaces tspan.update({"dy": f"{line_number}em"}) + if self.is_url(text_line): + anchor = self.svg.a(text_line.strip()) + anchor.add(tspan) + tspan = anchor text_tag.add(tspan) line_number += dy_dir self.svg.add(text_tag) + def is_url(self, value): + return value.strip().startswith("http") and " " not in value.strip() and "://" in value # Wrong but fast + def convert_character_width_to_mm(self, value): # Excel measures widths in terms of "number of characters of the # default font", which is most commonly 11pt Calibri. The width of the