/* * Plugin name: Redsand Jquery Rating Plugin * Author: phannhuthan * Uri: http://redsand.vn * Version: 2.1.5 * Modify date: 12/25/2014 */ /* param options = { length: 5, step: 1, starWidth: 26, starHeight: 24, maxRates: 1, type: 1, change: function(value, rater, star, slide){ ... } } */ (function($){ $.fn.rsRating = function(value, options){ if (isNaN(value)) { if (options == undefined) { options = value; } } else { this.val(value); if (options == undefined) { options = this.data('rsRating'); } } options = $.extend({ length: 5, step: 1, starWidth: 26, starHeight: 24, maxRates: 1, change: false, type: 1 }, options); if(typeof options.starHeight != 'number' || typeof options.starWidth != 'number') { throw "Width and height of star must be a number."; return false; } options.width = options.starWidth *options.length; var stepw = options.starWidth * options.step; this.data('rsRating', options); this.each(function(){ var rater, star, slide, val = $(this).val(); if ($(this).is('.rs-rater-hidden')) { rater = $(this).prev(); star = rater.find('.rs-rater-star'); slide = rater.find('.rs-rater-slide'); } else { rater = $(''); star = $(''); slide = $(''); rater.append(star).append(slide); $(this).before(rater).hide().addClass('rs-rater-hidden'); } rater.addClass('rs-rater-' + options.starWidth + 'x' + options.starHeight); var maxRates = options.maxRates; rater.add(star).add(slide).height(options.starHeight); rater.width(options.starWidth * options.length); rater.css({ display: 'inline-block', position: 'relative'}); star.width(options.starWidth * val).css({ position: 'absolute', left: 0, top: 0}); slide.css({ position: 'absolute', left: 0, top: 0}); rater.unbind('mousemove.rs-rater').bind('mousemove.rs-rater', function(event){ if(maxRates > 0){ var x = event.pageX - rater.offset().left; if(x < stepw * 2/3) x= 0; if(x > 0 ) x = x + stepw - x % stepw; if(x > options.width) x = options.width; slide.width(x); if(options.type == 1) star.hide(); } }); rater.unbind('mouseover.rs-rater').bind('mouseover.rs-rater', function(event){ if(maxRates > 0){ var x = event.pageX - rater.offset().left; if(x < stepw * 2/3) x= 0; if(x > 0 ) x = x + stepw - x % stepw; if(x > options.width) x = options.width; slide.width(x); if(options.type == 1) star.hide(); } }); rater.unbind('mouseout.rs-rater').bind('mouseout.rs-rater', function (event) { if(maxRates == options.maxRates){ slide.width(0); } else{ slide.width(options.starWidth * val); } if(options.type == 1) star.show(); }); rater.unbind('click.rs-rater').bind('click.rs-rater', function(){ if(maxRates >0){ val = slide.width() / options.starWidth; $(this).next().val(val).trigger('change'); if(options.type == 1) star.width(slide.width()); if(options.change) options.change(val, rater, star, slide); maxRates--; } }); }); return this; } })(jQuery);