# ------------------------------------------------------------------- # plugins / rating.coffee Rating = ($el, options={}) -> @options = $.extend({}, Rating.DEFAULTS, options) @$container = $('') @$container.append($('
  • ')) for i in [0...@options.stars_count] $el.append(@$container) self = @ @$container.find('a').on 'mouseenter', -> self.$container.find('li').removeClass(self.options.class_active) $(@).parents('li').addClass(self.options.class_active).prevAll('li').addClass(self.options.class_active) .on 'mouseleave', -> self.setRating(self.options.rating) .on 'click', -> self.options.onRatingChange.call(self, $(@).parents('li').prevAll('li').length + 1) false @setRating(@options.rating) @ Rating.prototype.setRating = (value) -> @options.rating = value if (value - Math.floor(value)) > @options.lower_limit value = Math.ceil(value) else value = Math.floor(value) @$container.find('li').removeClass(@options.class_active).slice(0, value).addClass(@options.class_active) Rating.DEFAULTS = stars_count: 5 rating: 0 class_active: 'active' lower_limit: 0.35 onRatingChange: (value) -> $.fn.pixelRating = (options, args) -> $(@).each -> $this = $(@) pr = $.data(@, 'pixelRating') if not pr $.data(@, 'pixelRating', new Rating($this, options)) else if options is 'setRating' pr.setRating(args) $.fn.pixelRating.Constructor = Rating