From 197f7bcf6bd49b96d1792c7eeb16409def730a83 Mon Sep 17 00:00:00 2001 From: Peter Stockings Date: Mon, 11 Dec 2023 21:38:52 +1100 Subject: [PATCH] Add interactivity to recently created graphs, this time using circles for interactivity --- templates/partials/svg_line_graph.html | 34 ++++++++++++++++++-------- utils.py | 5 +++- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/templates/partials/svg_line_graph.html b/templates/partials/svg_line_graph.html index 23d5a0b..a72a7c3 100644 --- a/templates/partials/svg_line_graph.html +++ b/templates/partials/svg_line_graph.html @@ -17,7 +17,7 @@ {% endfor %} {% endmacro %} -{% macro circles(data_points, color) %} +{% macro circles_with_skipped_points(data_points, color) %} {% for i in range(data_points|length) %} {% set current_value, current_position = data_points[i] %} {% set prev_value = data_points[i - 1][0] if i > 0 else None %} @@ -31,9 +31,19 @@ {% endfor %} {% endmacro %} +{% macro circles_interactive(data_points) %} + + {% for value, position, message in data_points %} + {% set x = (position * vb_width)+margin %} + {% set y = (vb_height - value)+margin %} + + {% endfor %} + +{% endmacro %} + {% macro plot_line(points, color) %} - {{ circles(points, color) }} + {{ circles_with_skipped_points(points, color) }} {% endmacro %} @@ -58,6 +68,7 @@ {% for plot in plots %} {{ plot_line(plot.points, plot.color) }} + {{ circles_interactive(plot.plot_labels) }} {% endfor %} @@ -75,14 +86,17 @@ -
- {% for plot in plots %} -
-
-
{{ plot.label }}
-
+ {% if plots|length > 1 %} +
+ {% for plot in plots %} +
+
+
{{ plot.label }}
+
{% endfor %} -
+
+ {% endif %} \ No newline at end of file diff --git a/utils.py b/utils.py index 88b43b0..fd4da1e 100644 --- a/utils.py +++ b/utils.py @@ -412,12 +412,15 @@ def get_weekly_pr_graph_model(title, weekly_pr_data): values_scaled = [((value - min_value) / value_range) * vb_height for value in values] plot_points = list(zip(values_scaled, relative_positions)) + messages = [f'{value} for {person_name} at {date.strftime("%d %b %y")}' for value, date in zip(values, pr_counts.keys())] + plot_labels = zip(values_scaled, relative_positions, messages) # Create a plot for each user plot = { 'label': person_name, # Use PersonName instead of User ID 'color': colors[count], - 'points': plot_points + 'points': plot_points, + 'plot_labels': plot_labels } plots.append(plot)