From 4f7664c2b0e79fdfe57028e966642acd8c846568 Mon Sep 17 00:00:00 2001 From: Dave Arter Date: Thu, 25 Aug 2016 17:04:42 +0100 Subject: [PATCH] Make sure moderation works on AJAX-loaded report. This refactors the moderation JS into a fixmystreet.set_up function, and ensures the button handlers are attached when a new report is loaded over AJAX. A side effect of bringing it into fixmystreet.js instead of its own moderate.js file is the few extra kb each user will have to download, but hopefully gzip and caching will help ameliorate this. --- templates/web/base/common_footer_tags.html | 5 --- web/cobrands/fixmystreet/fixmystreet.js | 51 ++++++++++++++++++++++ web/js/moderate.js | 51 ---------------------- 3 files changed, 51 insertions(+), 56 deletions(-) delete mode 100644 web/js/moderate.js diff --git a/templates/web/base/common_footer_tags.html b/templates/web/base/common_footer_tags.html index debcde402f5..bed344f8bd2 100644 --- a/templates/web/base/common_footer_tags.html +++ b/templates/web/base/common_footer_tags.html @@ -22,11 +22,6 @@ [% END %] -[% moderating = c.user && c.user.has_permission_to('moderate', problem.bodies_str) %] -[% IF moderating %] - -[% END %] - [% extra_js %] [% TRY %][% PROCESS 'footer_extra_js.html' %][% CATCH file %][% END %] diff --git a/web/cobrands/fixmystreet/fixmystreet.js b/web/cobrands/fixmystreet/fixmystreet.js index bc728e6ae51..914b8e7ebb4 100644 --- a/web/cobrands/fixmystreet/fixmystreet.js +++ b/web/cobrands/fixmystreet/fixmystreet.js @@ -785,6 +785,56 @@ $.extend(fixmystreet.set_up, { } }); }); + }, + + moderation: function() { + function toggle_original ($input, revert) { + $input.prop('disabled', revert); + if (revert) { + $input.data('currentValue', $input.val()); + } + $input.val($input.data(revert ? 'originalValue' : 'currentValue')); + } + + function add_handlers (elem, word) { + elem.each( function () { + var $elem = $(this); + $elem.find('.moderate').click( function () { + $elem.find('.moderate-display').hide(); + $elem.find('.moderate-edit').show(); + }); + + $elem.find('.revert-title').change( function () { + toggle_original($elem.find('input[name=problem_title]'), $(this).prop('checked')); + }); + + $elem.find('.revert-textarea').change( function () { + toggle_original($elem.find('textarea'), $(this).prop('checked')); + }); + + var hide_document = $elem.find('.hide-document'); + hide_document.change( function () { + $elem.find('input[name=problem_title]').prop('disabled', $(this).prop('checked')); + $elem.find('textarea').prop('disabled', $(this).prop('checked')); + $elem.find('input[type=checkbox]').prop('disabled', $(this).prop('checked')); + $(this).prop('disabled', false); // in case disabled above + }); + + $elem.find('.cancel').click( function () { + $elem.find('.moderate-display').show(); + $elem.find('.moderate-edit').hide(); + }); + + $elem.find('form').submit( function () { + if (hide_document.prop('checked')) { + return confirm('This will hide the ' + word + ' completely! (You will not be able to undo this without contacting support.)'); + } + return true; + }); + }); + } + add_handlers( $('.problem-header'), 'problem' ); + add_handlers( $('.item-list__item--updates'), 'update' ); } }); @@ -1007,6 +1057,7 @@ fixmystreet.display = { fixmystreet.set_up.fancybox_images(); fixmystreet.set_up.dropzone($sideReport); fixmystreet.set_up.form_focus_triggers(); + fixmystreet.set_up.moderation(); window.selected_problem_id = reportId; var marker = fixmystreet.maps.get_marker_by_id(reportId); diff --git a/web/js/moderate.js b/web/js/moderate.js deleted file mode 100644 index 53277d9d9e8..00000000000 --- a/web/js/moderate.js +++ /dev/null @@ -1,51 +0,0 @@ -function toggle_original ($input, revert) { - $input.prop('disabled', revert); - if (revert) { - $input.data('currentValue', $input.val()); - } - $input.val($input.data(revert ? 'originalValue' : 'currentValue')); -} - -function setup_moderation (elem, word) { - - elem.each( function () { - var $elem = $(this); - $elem.find('.moderate').click( function () { - $elem.find('.moderate-display').hide(); - $elem.find('.moderate-edit').show(); - }); - - $elem.find('.revert-title').change( function () { - toggle_original($elem.find('input[name=problem_title]'), $(this).prop('checked')); - }); - - $elem.find('.revert-textarea').change( function () { - toggle_original($elem.find('textarea'), $(this).prop('checked')); - }); - - var hide_document = $elem.find('.hide-document'); - hide_document.change( function () { - $elem.find('input[name=problem_title]').prop('disabled', $(this).prop('checked')); - $elem.find('textarea').prop('disabled', $(this).prop('checked')); - $elem.find('input[type=checkbox]').prop('disabled', $(this).prop('checked')); - $(this).prop('disabled', false); // in case disabled above - }); - - $elem.find('.cancel').click( function () { - $elem.find('.moderate-display').show(); - $elem.find('.moderate-edit').hide(); - }); - - $elem.find('form').submit( function () { - if (hide_document.prop('checked')) { - return confirm('This will hide the ' + word + ' completely! (You will not be able to undo this without contacting support.)'); - } - return true; - }); - }); -} - -$(function () { - setup_moderation( $('.problem-header'), 'problem' ); - setup_moderation( $('.item-list__item--updates'), 'update' ); -});