diff options
author | Dave Whiteland <dave@mysociety.org> | 2012-12-03 00:54:10 +0000 |
---|---|---|
committer | Dave Whiteland <dave@mysociety.org> | 2012-12-03 00:54:10 +0000 |
commit | b2eefdf3533e9c8385f18a6364c1b2fb1aa58685 (patch) | |
tree | f0b331a68dd449337e180206019e9d099e37ddc6 | |
parent | 089b929eea99bd7da778f7db84054b9c64223f31 (diff) |
now show Message Manager results for current report's archived messages, as well as 'available' ones, provides reply-to-originator capability
-rw-r--r-- | templates/web/fixmybarangay/report/_message_manager.html | 73 | ||||
-rw-r--r-- | web/cobrands/fixmybarangay/message_manager.scss | 6 | ||||
-rw-r--r-- | web/cobrands/fixmybarangay/message_manager_client.js | 41 |
3 files changed, 101 insertions, 19 deletions
diff --git a/templates/web/fixmybarangay/report/_message_manager.html b/templates/web/fixmybarangay/report/_message_manager.html index 1d0d726ef..869d2d088 100644 --- a/templates/web/fixmybarangay/report/_message_manager.html +++ b/templates/web/fixmybarangay/report/_message_manager.html @@ -16,6 +16,9 @@ <ul id="message_manager" class="issue-list-a tab" style="display: none"> <li id="mm-admin-buttons"> + [% IF problem.id %] + <a style="float:left" id="mm-link-to-toggle-archive" href="#" title="show the message(s) associated with this report">show message for <b>this</b> report</a> + [% END %] <a id="mm-link-to-refresh" href="#" title="update list of messages">refresh</a> <a id="mm-link-to-admin" href="[% c.config.MESSAGE_MANAGER_URL %]" title="jump to Message Manager admin">admin</a> <a id="mm-link-to-help" href="#mm-help" title="show help information">help</a> @@ -56,11 +59,23 @@ $(document).ready(function() { var timeout_id = 0; var can_refresh = true; // disable refresh var refresh_period = 60000 * 3; // refresh messages every three minutes + var has_archive_message = false; function sanitise_id(css_id) { return css_id.replace(/\D/g, ""); } + // call this to push the auto-refresh timeout off so it's only triggered + // if there's no activity for a while + function reset_timeout() { + if (refresh_period && can_refresh) { + if (timeout_id) { + clearTimeout(timeout_id); + } + timeout_id = setTimeout(mm_refresh_messages, refresh_period); + } + } + var mm_refresh_messages = function() { $('#mm-link-to-refresh').fadeOut(); $('#available-submit').click(); @@ -70,12 +85,7 @@ $(document).ready(function() { $('#mm-status-message-container').find('p').text("Accessed Message Manager as " + data['username']); $('input[name=mm_text]').prop('checked', false); // uncheck all $('#mm-link-to-refresh').delay(2000).fadeIn(); - if (refresh_period && can_refresh) { - if (timeout_id) { - clearTimeout(timeout_id); - } - timeout_id = setTimeout(mm_refresh_messages, refresh_period); - } + reset_timeout(); } var mm_selected_message = function(data) { @@ -95,12 +105,14 @@ $(document).ready(function() { } var dummy_reply_cleanup = function(data) { + reset_timeout(); $('#reply_text').val(''); dummy_busy = false; mm_refresh_messages(); } var dummy_hide_cleanup = function(data) { + reset_timeout(); $('#reason_text').val(''); dummy_busy = false; } @@ -117,9 +129,11 @@ $(document).ready(function() { $('#available-submit').click(function(e){ e.preventDefault(); + reset_timeout(); message_manager.get_available_messages({ callback: mm_populate_list, suggest_username: fms_username, + fms_id: problem_id, anim_duration: 500 }); }); @@ -132,6 +146,7 @@ $(document).ready(function() { }); $('#mm-message-list').on('click', '.mm-info', function(e){ + reset_timeout(); message_manager.show_info(sanitise_id($(this).parent().attr('id'))); }); @@ -158,6 +173,7 @@ $(document).ready(function() { $('#hide-submit').click(function(e) { e.preventDefault(); + reset_timeout(); // TODO: pending fancybox callbacks working, force dummy_busy here // this is possibly overly cautious anyway dummy_busy = false; @@ -175,13 +191,14 @@ $(document).ready(function() { // only show on problem display page if (problem_id) { $('<input type="button" value="Copy to update"/>').attr({ - 'id': 'add_support', - 'name': 'add_support', + 'id': 'copy_to_update', + 'name': 'copy_to_update', 'class': 'green-btn' }).appendTo($('#message_manager')); } - $('#add_support').click(function(e){ + $('#copy_to_update').click(function(e){ + reset_timeout(); e.preventDefault(); $('#mm-message-list input:checked').each( function(index) { var id = $(this).attr('id'); @@ -195,7 +212,7 @@ $(document).ready(function() { }); $('#show_messages').on('click', function(e) { - $('#message_manager').toggle(); + $('#message_manager').slideToggle(1000); $('#show_messages').val( $('#show_messages').val() == 'Show Messages' ? 'Hide Messages' : 'Show Messages' ); }); @@ -204,6 +221,42 @@ $(document).ready(function() { mm_refresh_messages(); }); + // suppress fading control while archive messages are displayed, for now + $('#mm-link-to-toggle-archive').on('click', function(e) { + e.preventDefault(); + $('#mm-link-to-toggle-archive').fadeOut(); + if ($('.mm-current', $mm_message_list).is(':visible')) { + $('#copy_to_update').stop(true,true).fadeOut(); + $('#mm-link-to-refresh').stop(true,true).fadeOut(); + $('.mm-current', $mm_message_list).stop(true,true).slideUp(1000, function(){ + if($('.mm-archive', $mm_message_list).find('li').length == 0) { + message_manager.say_status("No messages found for this report,"); + } else { + message_manager.say_status("Messages for this report:"); + }; + $('.mm-archive', $mm_message_list).stop(true,true).slideDown(1000, function(){ + $('#mm-link-to-toggle-archive').html('show all available messages') + .attr('title', 'show all available messages (for adding updates)'); + $('#mm-link-to-toggle-archive').fadeIn(); + can_refresh = false; + }) + }); + } else { + $('.mm-archive', $mm_message_list).stop(true,true).slideUp(1000, function(){ + message_manager.say_status("Available messages:"); + $('.mm-current', $mm_message_list).stop(true,true).slideDown(1000, function(){ + $('#mm-link-to-toggle-archive').html("show message for <b>this</b> report") + .attr('title', 'show the original message(s) for this report'); + $('#copy_to_update').stop(true,true).fadeIn(); + $('#mm-link-to-toggle-archive').stop(true,true).fadeIn(); + $('#mm-link-to-refresh').stop(true,true).fadeIn(); + can_refresh = true; + reset_timeout(); + }) + }); + } + }); + $("a#mm-link-to-help").fancybox(); message_manager.populate_boilerplate_strings('hide-reason'); diff --git a/web/cobrands/fixmybarangay/message_manager.scss b/web/cobrands/fixmybarangay/message_manager.scss index 119e4275f..4365707c1 100644 --- a/web/cobrands/fixmybarangay/message_manager.scss +++ b/web/cobrands/fixmybarangay/message_manager.scss @@ -21,6 +21,7 @@ $color_bg_btn_info: #0000ff; $weak_text_color: #666; + p.mm-submitted-by-sms { color: $weak_text_color; font-style: italic; @@ -96,6 +97,9 @@ p.mm-submitted-by-sms { #mm-message-list { ul { + &.mm-archive { + display: none; // archive only shown on interaction + } list-style-type: none; padding: 0; margin: 0; @@ -187,7 +191,7 @@ p.mm-submitted-by-sms { margin: 1em; } } -#show_messages, #add_support, #reply-submit { // COPY TO UPDATE button +#show_messages, #copy_to_update, #reply-submit { margin: 1em; } diff --git a/web/cobrands/fixmybarangay/message_manager_client.js b/web/cobrands/fixmybarangay/message_manager_client.js index 979ac8b25..6f76816ea 100644 --- a/web/cobrands/fixmybarangay/message_manager_client.js +++ b/web/cobrands/fixmybarangay/message_manager_client.js @@ -295,19 +295,31 @@ var message_manager = (function() { // render allows animation (if required) to hide messages before repainting and then revealing them var render_available_messages = function(data, anim_duration) { + var $output = $message_list_element; + $output.empty(); + var archive = data.messages_for_this_report; + var $archive = ""; + var i, litem; + if (archive instanceof Array) { + var $arch_ul = $('<ul class="mm-root mm-archive"/>'); + for(i=0; i< archive.length; i++) { + litem = get_message_li(archive[i], 0); + $arch_ul.append(litem); + } + $output.append($arch_ul); + } var messages = data.messages; _username = data.username; - var $output = $message_list_element; if (messages instanceof Array) { if (messages.length === 0) { $output.html('<p class="mm-empty">No messages available.</p>'); } else { - var $ul = $('<ul class="mm-root"/>'); - for(var i=0; i< messages.length; i++) { - var litem = get_message_li(messages[i], 0); + var $ul = $('<ul class="mm-root mm-current"/>'); + for(i=0; i< messages.length; i++) { + litem = get_message_li(messages[i], 0); $ul.append(litem); } - $output.empty().append($ul); + $output.append($ul); } } else { $output.html('<p>No messages (server did not send a list).</p>'); @@ -347,11 +359,13 @@ var message_manager = (function() { // gets messages or else requests login // options: suggest_username, if provided, is preloaded into the login form if provided // anim_duration: duration of fade/reveal (0, by defaut, does no animation) + // fms_id: if provided, display an archive of messages for this username var get_available_messages = function(options) { var base_auth = get_current_auth_credentials(); var suggest_username = ""; var anim_duration = 0; var callback = null; + var fms_id = null; if (options) { if (typeof(options.callback) === 'function') { callback = options.callback; @@ -365,6 +379,12 @@ var message_manager = (function() { anim_duration = 0; } } + if (typeof options.fms_id === 'string' || typeof options.fms_id === 'number') { + fms_id = parseInt(options.fms_id, 10); + if (isNaN(fms_id)) { + fms_id = 0; + } + } } if (base_auth === "") { show_login_form(suggest_username); @@ -374,11 +394,15 @@ var message_manager = (function() { if (_url_root.length === 0) { say_status(msg_no_config_err); } else { + var ajax_url = _url_root +"messages/available.json"; + if (fms_id) { + ajax_url += "?fms_id=" + fms_id; + } say_status("Fetching messages...", true); $.ajax({ dataType: "json", - type: "post", - url: _url_root +"messages/available.json", + type: "get", + url: ajax_url, beforeSend: function (xhr){ xhr.setRequestHeader('Authorization', get_current_auth_credentials()); xhr.withCredentials = true; @@ -722,6 +746,7 @@ var message_manager = (function() { hide: hide, show_info: show_info, sign_out: sign_out, - populate_boilerplate_strings: populate_boilerplate_strings + populate_boilerplate_strings: populate_boilerplate_strings, + say_status: say_status }; })(); |