From b31613de159910cd438aed37ef646cf1e8732d94 Mon Sep 17 00:00:00 2001 From: Lucas Date: Mon, 14 Oct 2024 13:33:02 +0100 Subject: [PATCH] [Scorecards] Added council suggestions for comparisson tool --- scoring/static/scoring/js/main.js | 38 ++++++++++++++++++-------- scoring/templates/scoring/council.html | 22 ++++++++++++--- scoring/views.py | 16 +++++++++++ 3 files changed, 61 insertions(+), 15 deletions(-) diff --git a/scoring/static/scoring/js/main.js b/scoring/static/scoring/js/main.js index 92bfde1c..12484223 100644 --- a/scoring/static/scoring/js/main.js +++ b/scoring/static/scoring/js/main.js @@ -144,19 +144,35 @@ forEachElement('.js-location-compare-autocomplete', function(input){ autoFirst: true } ); + input.parentNode.addEventListener('awesomplete-selectcomplete', function(data){ - var council = findItem(councils, {'name': data.text }); - var sp = new URLSearchParams(window.location.search) - var comparisons = sp.getAll('comparisons'); + handleCouncilSelection(data.text); + }); +}); - if (!comparisons.includes(council.slug)) { - comparisons.push(council.slug); - } - sp.delete('comparisons'); - for (comparison of comparisons.values()) { - sp.append('comparisons', comparison); - } - window.location.href = window.location.pathname + '?' + sp.toString() + '#questions'; +// Function to handle selection from both autocomplete and suggestions +function handleCouncilSelection(councilName) { + var council = findItem(councils, {'name': councilName}); + var sp = new URLSearchParams(window.location.search); + var comparisons = sp.getAll('comparisons'); + + if (!comparisons.includes(council.slug)) { + comparisons.push(council.slug); + } + sp.delete('comparisons'); + for (comparison of comparisons.values()) { + sp.append('comparisons', comparison); + } + window.location.href = window.location.pathname + '?' + sp.toString() + '#questions'; +} + +// Handling suggestion clicks +forEachElement('.js-council-compare-suggestions', function(suggestion) { + suggestion.addEventListener('click', function(event) { + event.preventDefault(); + var councilSlug = this.dataset.slug; + var council = findItem(councils, {'slug': councilSlug}); // Get the council by slug + handleCouncilSelection(council.name); // Pass the name to the selection handler }); }); diff --git a/scoring/templates/scoring/council.html b/scoring/templates/scoring/council.html index da0fc63e..abe1839c 100644 --- a/scoring/templates/scoring/council.html +++ b/scoring/templates/scoring/council.html @@ -154,7 +154,7 @@

Action Scorecard: {{ council.short_name }}

-
+

Choose {% include "scoring/includes/scoring-group-name.html" with group=council.get_scoring_group.slug plural=1 %} to compare

@@ -164,9 +164,23 @@

Choose {% include "scoring/includes/scoring-group-name.htm {% if comparisons|length > 2 %}

You have reached the maximum number of councils that can be compared.

{% else %} - + + {% if similar_councils %} +

+ +

+
+ {% for similar_council in similar_councils %} + {{ similar_council.name }} + {% endfor %} +
+ {% endif %} {% endif %} {% if comparisons %} +
{% for comparison in comparisons %} {{ comparison.council.name }} @@ -178,8 +192,8 @@

Choose {% include "scoring/includes/scoring-group-name.htm

-
-
+
+

Filter questions in the table

diff --git a/scoring/views.py b/scoring/views.py index d895d38e..2baf967f 100644 --- a/scoring/views.py +++ b/scoring/views.py @@ -405,6 +405,22 @@ def get_context_data(self, **kwargs): context["sections"] = sorted( sections.values(), key=lambda section: section["code"] ) + context["comparisons"] = comparisons + + for group in council.get_related_councils(5): + if group["type"].slug == "composite": + if comparisons: + # Filter out any related councils that are already being compared + comparison_slugs = {score.council.slug for score in comparisons} + context["similar_councils"] = [ + sc + for sc in group["councils"] + if sc.slug not in comparison_slugs + ] + else: + context["similar_councils"] = group["councils"] + break + context["page_title"] = "{name} Climate Action Scorecard".format( name=council.name )