annotate media/js/downloads/rating.js @ 100:eb9f99382476

Forums: groups support. Some experimentation with select_related() to reduce queries. There are more opportunities for this, see the TODO comments in views.py.
author Brian Neal <bgneal@gmail.com>
date Tue, 15 Sep 2009 03:15:20 +0000
parents dbd703f7d63a
children b43e1288ff80
rev   line source
gremmie@1 1 function dlRatingOver(event)
gremmie@1 2 {
gremmie@1 3 var div = $(this).parent('div');
gremmie@1 4 var stars = $('img', div);
gremmie@1 5 for (var i = 0; i <= event.data; ++i)
gremmie@1 6 {
gremmie@1 7 var star = $(stars[i]);
gremmie@1 8 star.attr('src', '/static/downloads/stars/rating_over.gif');
gremmie@1 9 }
gremmie@1 10 }
gremmie@1 11
gremmie@1 12 function dlRatingOut(event)
gremmie@1 13 {
gremmie@1 14 var div = $(this).parent('div');
gremmie@1 15 var stars = $('img', div);
gremmie@1 16 for (var i = 0; i <= event.data; ++i)
gremmie@1 17 {
gremmie@1 18 var star = $(stars[i]);
gremmie@1 19 star.attr('src', '/static/downloads/stars/rating_' + star.attr('class') + '.gif');
gremmie@1 20 }
gremmie@1 21 }
gremmie@1 22
gremmie@1 23 function dlRatingClick(event)
gremmie@1 24 {
gremmie@1 25 var star = $(this);
gremmie@1 26 var id = star.attr('id');
gremmie@1 27 if (id.match(/star-(\d+)-(\d+)/))
gremmie@1 28 {
gremmie@1 29 $.post('/downloads/rate/', { id: RegExp.$1, rating: parseInt(RegExp.$2) + 1},
gremmie@1 30 function(rating) {
gremmie@1 31 rating = parseFloat(rating);
gremmie@1 32 if (rating < 0)
gremmie@1 33 {
gremmie@1 34 alert("You've already rated this download.");
gremmie@1 35 return;
gremmie@1 36 }
gremmie@1 37 alert('Thanks for rating this download!');
gremmie@1 38 var div = star.parent('div');
gremmie@1 39 var stars = $('img', div);
gremmie@1 40 rating = parseFloat(rating);
gremmie@1 41 for (var i = 0; i < 5; ++i)
gremmie@1 42 {
gremmie@1 43 var s = $(stars[i]);
gremmie@1 44 s.removeClass(s.attr('class'));
gremmie@1 45 if (rating >= 1.0)
gremmie@1 46 {
gremmie@1 47 s.attr('src', '/static/downloads/stars/rating_on.gif');
gremmie@1 48 s.addClass('on')
gremmie@1 49 rating -= 1.0;
gremmie@1 50 }
gremmie@1 51 else if (rating >= 0.5)
gremmie@1 52 {
gremmie@1 53 s.attr('src', '/static/downloads/stars/rating_half.gif');
gremmie@1 54 s.addClass('half')
gremmie@1 55 rating = 0;
gremmie@1 56 }
gremmie@1 57 else
gremmie@1 58 {
gremmie@1 59 s.attr('src', '/static/downloads/stars/rating_off.gif');
gremmie@1 60 s.addClass('off')
gremmie@1 61 }
gremmie@1 62 }
gremmie@1 63 },
gremmie@1 64 'text');
gremmie@1 65 }
gremmie@1 66 }
gremmie@1 67
gremmie@1 68 $(document).ready(function() {
gremmie@1 69 $('.rating').each(function(n) {
gremmie@1 70 var div = $(this);
gremmie@1 71 var id = div.attr('id');
gremmie@1 72 var numeric_id = -1;
gremmie@1 73 if (id.match(/rating-(\d+)/))
gremmie@1 74 {
gremmie@1 75 numeric_id = RegExp.$1;
gremmie@1 76 }
gremmie@1 77 var rating = div.html();
gremmie@1 78 div.html('');
gremmie@1 79 for (var i = 0; i < 5; ++i)
gremmie@1 80 {
gremmie@1 81 var star = $('<img />');
gremmie@1 82 if (rating >= 1)
gremmie@1 83 {
gremmie@1 84 star.attr('src', '/static/downloads/stars/rating_on.gif');
gremmie@1 85 star.addClass('on')
gremmie@1 86 --rating;
gremmie@1 87 }
gremmie@1 88 else if (rating >= 0.5)
gremmie@1 89 {
gremmie@1 90 star.attr('src', '/static/downloads/stars/rating_half.gif');
gremmie@1 91 star.addClass('half')
gremmie@1 92 rating = 0;
gremmie@1 93 }
gremmie@1 94 else
gremmie@1 95 {
gremmie@1 96 star.attr('src', '/static/downloads/stars/rating_off.gif');
gremmie@1 97 star.addClass('off')
gremmie@1 98 }
gremmie@1 99 star.attr('alt', 'star');
gremmie@1 100 star.attr('id', 'star-' + numeric_id + '-' + i);
gremmie@1 101 star.bind('mouseover', i, dlRatingOver);
gremmie@1 102 star.bind('mouseout', i, dlRatingOut);
gremmie@1 103 star.click(dlRatingClick);
gremmie@1 104 div.append(star);
gremmie@1 105 }
gremmie@1 106 });
gremmie@1 107 });