aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--templates/web/base/report/_inspect.html3
-rw-r--r--web/cobrands/fixmystreet/fixmystreet.js96
2 files changed, 50 insertions, 49 deletions
diff --git a/templates/web/base/report/_inspect.html b/templates/web/base/report/_inspect.html
index 655c70128..7f41a2d63 100644
--- a/templates/web/base/report/_inspect.html
+++ b/templates/web/base/report/_inspect.html
@@ -9,8 +9,7 @@
<div class="inspect-section">
<p>
<strong>[% loc('Report ID:') %]</strong>
- [% problem.id %]
- <input type="hidden" name="report_id" value="[% problem.id | html %]">
+ <span class="js-report-id">[% problem.id %]</span>
</p>
<p>
[% SET local_coords = problem.local_coords; %]
diff --git a/web/cobrands/fixmystreet/fixmystreet.js b/web/cobrands/fixmystreet/fixmystreet.js
index 22e021edf..b314bc991 100644
--- a/web/cobrands/fixmystreet/fixmystreet.js
+++ b/web/cobrands/fixmystreet/fixmystreet.js
@@ -391,56 +391,57 @@ $.extend(fixmystreet.set_up, {
},
- state_change: function() {
- // Deal with changes to report state by inspector/other staff, specifically
- // displaying nearby reports if it's changed to 'duplicate'.
- $("#report_inspect_form").on("change.state", "select#state", function() {
- var state = $(this).val();
-
- if (state !== "duplicate") {
- $("#js-duplicate-reports").addClass("hidden");
- return;
- }
-
- var args = {
- state: state,
- filter_category: $("#report_inspect_form select#category").val()
- };
- var bounds = fixmystreet.map.getExtent();
- bounds.transform(bounds.transform(fixmystreet.map.getProjectionObject(), new OpenLayers.Projection("EPSG:4326")));
- args.bbox = bounds.toBBOX();
-
- args.latitude = $('input[name="latitude"]').val();
- args.longitude = $('input[name="longitude"]').val();
-
- $("#js-duplicate-reports").removeClass("hidden");
-
- var duplicate_of = $("#report_inspect_form [name=duplicate_of]").val();
- if (!!duplicate_of) {
- return;
- }
-
- $("#js-duplicate-reports ul").html("<li>Loading...</li>");
+ manage_duplicates: function() {
+ // Deal with changes to report state by inspector/other staff, specifically
+ // displaying nearby reports if it's changed to 'duplicate'.
+ function refresh_duplicate_list() {
+ var report_id = $("#report_inspect_form .js-report-id").text();
+ var args = {
+ filter_category: $("#report_inspect_form select#category").val(),
+ latitude: $('input[name="latitude"]').val(),
+ longitude: $('input[name="longitude"]').val()
+ };
+ $("#js-duplicate-reports ul").html("<li>Loading...</li>");
+ $.getJSON('/report/'+report_id+'/nearby', args, function(data) {
+ var duplicate_of = $("#report_inspect_form [name=duplicate_of]").val();
+ var $reports = $(data.current)
+ .filter("li")
+ .not("[data-report-id="+report_id+"]")
+ .slice(0, 5);
+ $reports.filter("[data-report-id="+duplicate_of+"]").addClass("item-list--reports__item--selected");
+
+ $("#js-duplicate-reports ul").empty().prepend($reports);
+
+ $reports.find("a").click(function() {
+ var report_id = $(this).closest("li").data('reportId');
+ $("#report_inspect_form [name=duplicate_of]").val(report_id);
+ $("#js-duplicate-reports ul li").removeClass("item-list--reports__item--selected");
+ $(this).closest("li").addClass("item-list--reports__item--selected");
+ return false;
+ });
+ });
+ }
- var report_id = $("#report_inspect_form [name=report_id]").val();
- $.getJSON('/report/'+report_id+'/nearby', args, function(data) {
- var $reports = $(data.current)
- .filter("li")
- .not("[data-report-id="+report_id+"]")
- .slice(0, 5);
- $reports.filter("[data-report-id="+duplicate_of+"]").addClass("item-list--reports__item--selected");
+ function state_change() {
+ // The duplicate report list only makes sense when state is 'duplicate'
+ if ($(this).val() !== "duplicate") {
+ $("#js-duplicate-reports").addClass("hidden");
+ return;
+ } else {
+ $("#js-duplicate-reports").removeClass("hidden");
+ }
+ // If this report is already marked as a duplicate of another, then
+ // there's no need to refresh the list of duplicate reports
+ var duplicate_of = $("#report_inspect_form [name=duplicate_of]").val();
+ if (!!duplicate_of) {
+ return;
+ }
- $("#js-duplicate-reports ul").empty().prepend($reports);
+ refresh_duplicate_list();
+ }
- $reports.find("a").click(function() {
- var report_id = $(this).closest("li").data('reportId');
- $("#report_inspect_form [name=duplicate_of]").val(report_id);
- $("#js-duplicate-reports ul li").removeClass("item-list--reports__item--selected");
- $(this).closest("li").addClass("item-list--reports__item--selected");
- return false;
- });
- });
- });
+ $("#report_inspect_form").on("change.state", "select#state", state_change);
+ $("#js-change-duplicate-report").click(refresh_duplicate_list);
},
@@ -1146,6 +1147,7 @@ fixmystreet.display = {
$twoColReport.appendTo('#map_sidebar');
$('body').addClass('with-actions');
fixmystreet.set_up.report_page_inspect();
+ fixmystreet.set_up.manage_duplicates();
} else {
$sideReport.appendTo('#map_sidebar');
}