Commit e96555e7c360921350dd7cfc64c02c336f8a242f
1 parent
5562a304
Exists in
master
and in
39 other branches
Improving JS for voting
Showing
1 changed file
with
28 additions
and
45 deletions
Show diff stats
src/super_archives/templates/message-thread.html
| @@ -6,27 +6,21 @@ | @@ -6,27 +6,21 @@ | ||
| 6 | {% block head_js %} | 6 | {% block head_js %} |
| 7 | 7 | ||
| 8 | <script> | 8 | <script> |
| 9 | - function vote_done_callback(msg_id, step) { | 9 | + function vote_done_callback(step) { |
| 10 | console.debug('(un)vote successfuly (step ' + step + ')'); | 10 | console.debug('(un)vote successfuly (step ' + step + ')'); |
| 11 | - var $msg = $('#msg-' + msg_id) | 11 | + var $btn = $(this); |
| 12 | + var step; | ||
| 12 | 13 | ||
| 13 | - $('.vote-count', $msg).text(function(self, count) { | 14 | + if ($btn.hasClass('btn-default')) { |
| 15 | + step = 1; | ||
| 16 | + } else { | ||
| 17 | + step = -1; | ||
| 18 | + } | ||
| 19 | + | ||
| 20 | + $btn.prev('.vote-count').text(function(self, count) { | ||
| 14 | return parseInt(count) + step; | 21 | return parseInt(count) + step; |
| 15 | }); | 22 | }); |
| 16 | 23 | ||
| 17 | - if (step == -1) { | ||
| 18 | - var $btn = $('.vote.btn-success', $msg); | ||
| 19 | - $btn.unbind('click'); | ||
| 20 | - $btn.bind('click', function() { | ||
| 21 | - vote(msg_id); | ||
| 22 | - }); | ||
| 23 | - } else { | ||
| 24 | - var $btn = $('.vote.btn-default', $msg); | ||
| 25 | - $btn.unbind('click'); | ||
| 26 | - $btn.bind('click', function() { | ||
| 27 | - unvote(msg_id); | ||
| 28 | - }); | ||
| 29 | - } | ||
| 30 | $btn.toggleClass('btn-success'); | 24 | $btn.toggleClass('btn-success'); |
| 31 | $btn.toggleClass('btn-default'); | 25 | $btn.toggleClass('btn-default'); |
| 32 | $btn.button('reset') | 26 | $btn.button('reset') |
| @@ -46,35 +40,35 @@ | @@ -46,35 +40,35 @@ | ||
| 46 | scroll(0, 0); | 40 | scroll(0, 0); |
| 47 | } | 41 | } |
| 48 | 42 | ||
| 49 | - function get_vote_ajax_dict(msg_id, method) { | 43 | + function get_vote_ajax_dict(msg_id, method, context) { |
| 50 | var csrftoken = $.cookie('csrftoken'); | 44 | var csrftoken = $.cookie('csrftoken'); |
| 51 | - $('#msg-' + msg_id + ' .vote.btn-success').button('loading'); | ||
| 52 | 45 | ||
| 53 | return { | 46 | return { |
| 54 | url: "/api/message/" + msg_id + "/vote", | 47 | url: "/api/message/" + msg_id + "/vote", |
| 55 | type: method, | 48 | type: method, |
| 49 | + context: context, | ||
| 56 | beforeSend: function(xhr, settings) { | 50 | beforeSend: function(xhr, settings) { |
| 57 | xhr.setRequestHeader("X-CSRFToken", csrftoken); | 51 | xhr.setRequestHeader("X-CSRFToken", csrftoken); |
| 58 | } | 52 | } |
| 59 | } | 53 | } |
| 60 | } | 54 | } |
| 61 | 55 | ||
| 62 | - function vote(msg_id) { | ||
| 63 | - console.debug('trying to vote'); | ||
| 64 | - $.ajax(get_vote_ajax_dict(msg_id, 'PUT')) | ||
| 65 | - .done(function(){ | ||
| 66 | - vote_done_callback(msg_id, 1); | ||
| 67 | - }) | ||
| 68 | - .fail(vote_fail_callback); | ||
| 69 | - } | 56 | + function vote() { |
| 57 | + var $ajax; | ||
| 58 | + var $btn = $(this); | ||
| 59 | + var $msg = $(this).parents('.email-message'); | ||
| 60 | + | ||
| 61 | + var msg_id = $msg.attr('id').split('-')[1]; | ||
| 70 | 62 | ||
| 71 | - function unvote(msg_id) { | ||
| 72 | - console.debug('trying to remove vote'); | ||
| 73 | - $.ajax(get_vote_ajax_dict(msg_id, 'DELETE')) | ||
| 74 | - .done(function(){ | ||
| 75 | - vote_done_callback(msg_id, -1); | ||
| 76 | - }) | ||
| 77 | - .fail(vote_fail_callback); | 63 | + $btn.button('loading'); |
| 64 | + if($btn.hasClass('btn-default')) { | ||
| 65 | + $ajax = $.ajax(get_vote_ajax_dict(msg_id, 'PUT', $btn[0])); | ||
| 66 | + } else { | ||
| 67 | + $ajax = $.ajax(get_vote_ajax_dict(msg_id, 'DELETE', $btn[0])); | ||
| 68 | + } | ||
| 69 | + console.debug('trying to vote'); | ||
| 70 | + $ajax.done(vote_done_callback); | ||
| 71 | + $ajax.fail(vote_fail_callback); | ||
| 78 | } | 72 | } |
| 79 | 73 | ||
| 80 | // Binding functions | 74 | // Binding functions |
| @@ -83,18 +77,7 @@ | @@ -83,18 +77,7 @@ | ||
| 83 | $(this).next('.panel-collapse').collapse('toggle'); | 77 | $(this).next('.panel-collapse').collapse('toggle'); |
| 84 | }); | 78 | }); |
| 85 | 79 | ||
| 86 | - $('.email-message').each(function() { | ||
| 87 | - var msg_id = this.getAttribute('id').split('-')[1]; | ||
| 88 | - | ||
| 89 | - $('.vote.btn-default', this).bind('click', function() { | ||
| 90 | - vote(msg_id); | ||
| 91 | - }); | ||
| 92 | - | ||
| 93 | - $('.vote.btn-success', this).bind('click', function() { | ||
| 94 | - unvote(msg_id); | ||
| 95 | - }); | ||
| 96 | - | ||
| 97 | - }); | 80 | + $('.vote.btn', this).bind('click', vote); |
| 98 | }); | 81 | }); |
| 99 | 82 | ||
| 100 | </script> | 83 | </script> |