Commit e96555e7c360921350dd7cfc64c02c336f8a242f

Authored by Sergio Oliveira
1 parent 5562a304

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>