annotate media/js/downloads/rating.js @ 193:fa7d82bfb100

Implement #68: add a denormalized count field to weblinks Category model to reduce database queries.
author Brian Neal <bgneal@gmail.com>
date Sat, 03 Apr 2010 02:15:04 +0000
parents b43e1288ff80
children 2ba1a6d3b984
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 {
bgneal@150 29 $.ajax({
bgneal@150 30 url: '/downloads/rate/',
bgneal@150 31 type: 'POST',
bgneal@150 32 data: { id: RegExp.$1, rating: parseInt(RegExp.$2) + 1},
bgneal@150 33 dataType: 'text',
bgneal@150 34 success: function(rating) {
gremmie@1 35 rating = parseFloat(rating);
gremmie@1 36 if (rating < 0)
gremmie@1 37 {
gremmie@1 38 alert("You've already rated this download.");
gremmie@1 39 return;
gremmie@1 40 }
gremmie@1 41 alert('Thanks for rating this download!');
gremmie@1 42 var div = star.parent('div');
gremmie@1 43 var stars = $('img', div);
gremmie@1 44 rating = parseFloat(rating);
gremmie@1 45 for (var i = 0; i < 5; ++i)
gremmie@1 46 {
gremmie@1 47 var s = $(stars[i]);
gremmie@1 48 s.removeClass(s.attr('class'));
gremmie@1 49 if (rating >= 1.0)
gremmie@1 50 {
gremmie@1 51 s.attr('src', '/static/downloads/stars/rating_on.gif');
gremmie@1 52 s.addClass('on')
gremmie@1 53 rating -= 1.0;
gremmie@1 54 }
gremmie@1 55 else if (rating >= 0.5)
gremmie@1 56 {
gremmie@1 57 s.attr('src', '/static/downloads/stars/rating_half.gif');
gremmie@1 58 s.addClass('half')
gremmie@1 59 rating = 0;
gremmie@1 60 }
gremmie@1 61 else
gremmie@1 62 {
gremmie@1 63 s.attr('src', '/static/downloads/stars/rating_off.gif');
gremmie@1 64 s.addClass('off')
gremmie@1 65 }
gremmie@1 66 }
gremmie@1 67 },
bgneal@150 68 error: function (xhr, textStatus, ex) {
bgneal@150 69 alert('Oops, an error occurred. ' + xhr.statusText + ' - ' +
bgneal@150 70 xhr.responseText);
bgneal@150 71 }
bgneal@150 72 });
gremmie@1 73 }
gremmie@1 74 }
gremmie@1 75
gremmie@1 76 $(document).ready(function() {
gremmie@1 77 $('.rating').each(function(n) {
gremmie@1 78 var div = $(this);
gremmie@1 79 var id = div.attr('id');
gremmie@1 80 var numeric_id = -1;
gremmie@1 81 if (id.match(/rating-(\d+)/))
gremmie@1 82 {
gremmie@1 83 numeric_id = RegExp.$1;
gremmie@1 84 }
gremmie@1 85 var rating = div.html();
gremmie@1 86 div.html('');
gremmie@1 87 for (var i = 0; i < 5; ++i)
gremmie@1 88 {
gremmie@1 89 var star = $('<img />');
gremmie@1 90 if (rating >= 1)
gremmie@1 91 {
gremmie@1 92 star.attr('src', '/static/downloads/stars/rating_on.gif');
gremmie@1 93 star.addClass('on')
gremmie@1 94 --rating;
gremmie@1 95 }
gremmie@1 96 else if (rating >= 0.5)
gremmie@1 97 {
gremmie@1 98 star.attr('src', '/static/downloads/stars/rating_half.gif');
gremmie@1 99 star.addClass('half')
gremmie@1 100 rating = 0;
gremmie@1 101 }
gremmie@1 102 else
gremmie@1 103 {
gremmie@1 104 star.attr('src', '/static/downloads/stars/rating_off.gif');
gremmie@1 105 star.addClass('off')
gremmie@1 106 }
gremmie@1 107 star.attr('alt', 'star');
gremmie@1 108 star.attr('id', 'star-' + numeric_id + '-' + i);
gremmie@1 109 star.bind('mouseover', i, dlRatingOver);
gremmie@1 110 star.bind('mouseout', i, dlRatingOut);
gremmie@1 111 star.click(dlRatingClick);
gremmie@1 112 div.append(star);
gremmie@1 113 }
gremmie@1 114 });
gremmie@1 115 });