﻿/**
* jQuery Raty - A Star Rating Plugin - http://wbotelhos.com/raty
* 
* @author	Washington Botelho dos Santos
* @twitter wbotelhos
* 
* Licensed under The MIT License
* http://opensource.org/licenses/mit-license.php
* 
*/

(function(g) { g.fn.raty = function(m) { options = g.extend({}, g.fn.raty.defaults, m); if (this.length == 0) { d("Invalid selector!"); return; } else { if (this.length > 1) { return this.each(function() { g.fn.raty.apply(g(this), [m]); }); } } if (options.number > 20) { options.number = 20; } else { if (options.number < 0) { options.number = 0; } } if (options.path.substring(options.path.length - 1, options.path.length) != "/") { options.path += "/"; } $global = g(this); var k = this.attr("id"), l = 0, r = options.starOn, n = ""; if (k == "") { k = "raty-" + new Date().getMilliseconds(); $global.attr("id", k); } if (!isNaN(options.start) && options.start > 0) { l = (options.start > options.number) ? options.number : options.start; } for (var o = 1; o <= options.number; o++) { r = (l >= o) ? options.starOn : options.starOff; n = (o <= options.hintList.length && options.hintList[o - 1] !== null) ? options.hintList[o - 1] : o; $global.append('<img id="' + k + "-" + o + '" src="' + options.path + r + '" alt="' + o + '" title="' + n + '" class="' + k + '"/>').append((o < options.number) ? "&nbsp;" : ""); } g('<input id="' + k + '-score" type="hidden" name="' + options.scoreName + '"/>').appendTo($global).val(l); if (options.showHalf) { b($global, g("input#" + k + "-score").val(), options); } if (!options.readOnly) { if (options.showCancel) { var p = g("img." + k), s = '<img src="' + options.path + options.cancelOff + '" alt="x" title="' + options.cancelHint + '" class="button-cancel"/>', j = options, q = $global; if (j.cancelPlace == "left") { $global.prepend(s + "&nbsp;"); } else { $global.append("&nbsp;").append(s); } g("#" + k + " img.button-cancel").mouseenter(function() { g(this).attr("src", j.path + j.cancelOn); p.attr("src", j.path + j.starOff); }).mouseleave(function() { g(this).attr("src", j.path + j.cancelOff); p.mouseout(); }).click(function() { g("input#" + k + "-score").val(0); if (j.onClick) { j.onClick.apply(q, [0]); } }); $global.css("width", j.number * 20 + 20); } else { $global.css("width", options.number * 20); } $global.css("cursor", "pointer"); f($global, options); } else { $global.css("cursor", "default"); h($global, l, options); } return $global; }; g.fn.raty.defaults = { cancelHint: "cancel this rating!", cancelOff: "cancel-off.png", cancelOn: "cancel-on.png", cancelPlace: "left", hintList: ["bad", "poor", "regular", "good", "gorgeous"], noRatedMsg: "not rated yet", number: 5, path: "img/", iconRange: [], readOnly: false, scoreName: "score", showCancel: false, showHalf: false, starHalf: "star-half.png", starOff: "star-off.png", starOn: "star-on.png", start: 0, onClick: null }; g.fn.raty.click = function(j, k) { var i = e(j, k, "click"); a(i, j, options); if (options.onClick) { options.onClick.apply(i, [j]); } else { d('You must add the "onClick: function(score) { }" option.'); } return g.fn.raty; }; g.fn.raty.readOnly = function(j, l) { var i = e(j, l, "readOnly"), k = i.children("img.button-cancel"); if (k[0]) { (j) ? k.hide() : k.show(); } console.log(j); if (j) { console.log(i); g("img." + i.attr("id")).unbind(); i.css("cursor", "default").unbind(); } else { f(i, options); i.css("cursor", "pointer"); } return g.fn.raty; }; g.fn.raty.start = function(i, j) { a(e(i, j, "start"), i, options); return g.fn.raty; }; function f(k, j) { var m = k.attr("id"), l = g("input#" + m + "-score"), i = g("img." + m).length; g("#" + m).mouseleave(function() { a(k, l.val(), j); }); g("img." + m).mouseenter(function() { c(m, this.alt, j); }).click(function() { l.val(this.alt); if (j.onClick) { j.onClick.apply(k, [this.alt]); } }); } function e(l, m, i) { var j = $global; if (m) { if (m.indexOf(".") == 0) { var k; return g(m).each(function() { k = "#" + g(this).attr("id"); if (i == "start") { g.fn.raty.start(l, k); } else { if (i == "click") { g.fn.raty.click(l, k); } else { if (i == "readOnly") { g.fn.raty.readOnly(l, k); } } } }); } j = g(m); if (!j[0]) { d('"' + m + '" is a invalid ID for the public funtion $.fn.raty.' + i + "()."); return; } } return j; } function d(i) { if (window.console && window.console.log) { window.console.log(i); } } function c(j, k, r) { var l = g("img." + j).length, q = 0, o = 0, p, m; for (var n = 1; n <= l; n++) { p = g("img#" + j + "-" + n); if (n <= k) { if (r.iconRange && r.iconRange.length > q) { m = r.iconRange[q][0]; o = r.iconRange[q][1]; if (n <= o) { p.attr("src", r.path + m); } if (n == o) { q++; } } else { p.attr("src", r.path + r.starOn); } } else { p.attr("src", r.path + r.starOff); } } } function h(j, k, i) { if (k != 0) { k = parseInt(k); hint = (k > 0 && i.number <= i.hintList.length && i.hintList[k - 1] !== null) ? i.hintList[k - 1] : k; } else { hint = i.noRatedMsg; } g("#" + j.attr("id")).attr("title", hint).children("img").attr("title", hint); } function a(j, k, i) { var l = j.attr("id"); if (k < 0 || isNaN(k)) { k = 0; } else { if (k > i.number) { k = i.number; } } g("input#" + l + "-score").val(k); c(l, k, i); if (i.showHalf) { b(j, k, i); } if (i.readOnly || j.css("cursor") == "default") { h(j, k, i); } } function b(k, m, j) { var n = k.attr("id"), i = Math.ceil(m), l = (i - m).toFixed(1); if (l >= 0.3 && l <= 0.7) { i = i - 0.5; g("img#" + n + "-" + Math.ceil(i)).attr("src", j.path + j.starHalf); } else { if (l >= 0.8) { i--; } else { g("img#" + n + "-" + i).attr("src", j.path + j.starOn); } } } })(jQuery);
