view media/js/downloads/rating.js @ 6:b6263ac72052

Use DRY principle to manage third party javascript libraries. Created script_tags template tags to generate the correct link and script tags for 3rd party libraries. The settings.py file is the only place where the full path name is specified.
author Brian Neal <bgneal@gmail.com>
date Sat, 11 Apr 2009 22:50:56 +0000
parents dbd703f7d63a
children b43e1288ff80
line wrap: on
line source
function dlRatingOver(event)
{
    var div = $(this).parent('div');
    var stars = $('img', div);
    for (var i = 0; i <= event.data; ++i)
    {
        var star = $(stars[i]);
        star.attr('src', '/static/downloads/stars/rating_over.gif');
    }
}

function dlRatingOut(event)
{
    var div = $(this).parent('div');
    var stars = $('img', div);
    for (var i = 0; i <= event.data; ++i)
    {
        var star = $(stars[i]);
        star.attr('src', '/static/downloads/stars/rating_' + star.attr('class') + '.gif');
    }
}

function dlRatingClick(event)
{
    var star = $(this);
    var id = star.attr('id');
    if (id.match(/star-(\d+)-(\d+)/))
    {
        $.post('/downloads/rate/', { id: RegExp.$1, rating: parseInt(RegExp.$2)  + 1},
            function(rating) {
                rating = parseFloat(rating);
                if (rating < 0)
                {
                    alert("You've already rated this download.");
                    return;
                }
                alert('Thanks for rating this download!');
                var div = star.parent('div');
                var stars = $('img', div);
                rating = parseFloat(rating);
                for (var i = 0; i < 5; ++i)
                {
                    var s = $(stars[i]);
                    s.removeClass(s.attr('class'));
                    if (rating >= 1.0)
                    {
                        s.attr('src', '/static/downloads/stars/rating_on.gif');
                        s.addClass('on')
                        rating -= 1.0;
                    }
                    else if (rating >= 0.5)
                    {
                        s.attr('src', '/static/downloads/stars/rating_half.gif');
                        s.addClass('half')
                        rating = 0;
                    }
                    else
                    {
                        s.attr('src', '/static/downloads/stars/rating_off.gif');
                        s.addClass('off')
                    }
                }
            },
            'text');
    }
}

$(document).ready(function() {
    $('.rating').each(function(n) {
        var div = $(this);
        var id = div.attr('id');
        var numeric_id = -1;
        if (id.match(/rating-(\d+)/))
        {
            numeric_id = RegExp.$1;
        }
        var rating = div.html();
        div.html('');
        for (var i = 0; i < 5; ++i)
        {
            var star = $('<img />');
            if (rating >= 1)
            {
                star.attr('src', '/static/downloads/stars/rating_on.gif');
                star.addClass('on')
                --rating;
            }
            else if (rating >= 0.5)
            {
                star.attr('src', '/static/downloads/stars/rating_half.gif');
                star.addClass('half')
                rating = 0;
            }
            else
            {
                star.attr('src', '/static/downloads/stars/rating_off.gif');
                star.addClass('off')
            }
            star.attr('alt', 'star');
            star.attr('id', 'star-' + numeric_id + '-' + i);
            star.bind('mouseover', i, dlRatingOver);
            star.bind('mouseout', i, dlRatingOut);
            star.click(dlRatingClick);
            div.append(star);
        }
    });
});