diff options
author | Dave Arter <davea@mysociety.org> | 2016-08-25 17:04:42 +0100 |
---|---|---|
committer | Matthew Somerville <matthew-github@dracos.co.uk> | 2016-08-26 14:22:26 +0100 |
commit | 4f7664c2b0e79fdfe57028e966642acd8c846568 (patch) | |
tree | 8d2a1707b65b3e13284f40c97dcad41c4567ec79 | |
parent | 0e2e741fc8380fbd1d0b7b5ed16050d6f4dc27e2 (diff) |
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.
-rw-r--r-- | templates/web/base/common_footer_tags.html | 5 | ||||
-rw-r--r-- | web/cobrands/fixmystreet/fixmystreet.js | 51 | ||||
-rw-r--r-- | web/js/moderate.js | 51 |
3 files changed, 51 insertions, 56 deletions
diff --git a/templates/web/base/common_footer_tags.html b/templates/web/base/common_footer_tags.html index debcde402..bed344f8b 100644 --- a/templates/web/base/common_footer_tags.html +++ b/templates/web/base/common_footer_tags.html @@ -22,11 +22,6 @@ <script type="text/javascript" src="[% version('/js/fixmystreet-admin.js') %]"></script> [% END %] -[% moderating = c.user && c.user.has_permission_to('moderate', problem.bodies_str) %] -[% IF moderating %] - <script type="text/javascript" src="[% version('/js/moderate.js') %]"></script> -[% 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 bc728e6ae..914b8e7eb 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 53277d9d9..000000000 --- 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' ); -}); |