You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

10 lines
7.7 KiB

/*!
* @copyright © Kartik Visweswaran, Krajee.com, 2014
* @version 2.5.0
*
* A simple yet powerful JQuery star rating plugin that allows rendering
* fractional star ratings and supports Right to Left (RTL) input.
*
* For more JQuery plugins visit http://plugins.krajee.com
* For more Yii related demos visit http://demos.krajee.com
*/!function(t){var e=0,a=5,n=.5,r=function(e,a){return"undefined"==typeof e||null===e||void 0===e||e==[]||""===e||a&&""===t.trim(e)},l=function(t,e,a){var n=r(t.data(e))?t.attr(e):t.data(e);return n?n:a[e]},i=function(t){var e=(""+t).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);return e?Math.max(0,(e[1]?e[1].length:0)-(e[2]?+e[2]:0)):0},s=function(t,e){return parseFloat(t.toFixed(e))},o=function(e,a){this.$element=t(e),this.init(a)};o.prototype={constructor:o,_parseAttr:function(t,i){var s=this,o=s.$element;if("range"===o.attr("type")||"number"===o.attr("type")){var c=l(o,t,i),p=n;"min"===t?p=e:"max"===t?p=a:"step"===t&&(p=n);var u=r(c)?p:c;return parseFloat(u)}return parseFloat(i[t])},listen:function(){var e=this;e.$rating.on("click",function(t){e.inactive||(w=t.pageX-e.$rating.offset().left,e.setStars(w),e.$element.trigger("change"),e.$element.trigger("rating.change",[e.$element.val(),e.$caption.html()]))}),e.$clear.on("click",function(){e.inactive||e.clear()}),t(e.$element[0].form).on("reset",function(){e.inactive||e.reset()})},initSlider:function(t){var l=this;r(l.$element.val())&&l.$element.val(0),l.initialValue=l.$element.val(),l.min="undefined"!=typeof t.min?t.min:l._parseAttr("min",t),l.max="undefined"!=typeof t.max?t.max:l._parseAttr("max",t),l.step="undefined"!=typeof t.step?t.step:l._parseAttr("step",t),(isNaN(l.min)||r(l.min))&&(l.min=e),(isNaN(l.max)||r(l.max))&&(l.max=a),(isNaN(l.step)||r(l.step)||0==l.step)&&(l.step=n),l.diff=l.max-l.min},init:function(e){var a=this;a.options=e,a.initSlider(e),a.checkDisabled(),$element=a.$element,a.containerClass=e.containerClass,a.glyphicon=e.glyphicon;var n=a.glyphicon?"":"★";a.symbol=r(e.symbol)?n:e.symbol,a.rtl=e.rtl||a.$element.attr("dir"),a.rtl&&a.$element.attr("dir","rtl"),a.showClear=e.showClear,a.showCaption=e.showCaption,a.size=e.size,a.stars=e.stars,a.defaultCaption=e.defaultCaption,a.starCaptions=e.starCaptions,a.starCaptionClasses=e.starCaptionClasses,a.clearButton=e.clearButton,a.clearButtonTitle=e.clearButtonTitle,a.clearButtonBaseClass=r(e.clearButtonBaseClass)?"clear-rating":e.clearButtonBaseClass,a.clearButtonActiveClass=r(e.clearButtonActiveClass)?"clear-rating-active":e.clearButtonActiveClass,a.clearCaption=e.clearCaption,a.clearCaptionClass=e.clearCaptionClass,a.clearValue=e.clearValue,a.$element.removeClass("form-control").addClass("form-control"),a.$clearElement=r(e.clearElement)?null:t(e.clearElement),a.$captionElement=r(e.captionElement)?null:t(e.captionElement),"undefined"==typeof a.$rating&&"undefined"==typeof a.$container&&(a.$rating=t(document.createElement("div")).html('<div class="rating-stars"></div>'),a.$container=t(document.createElement("div")),a.$container.before(a.$rating),a.$container.append(a.$rating),a.$element.before(a.$container).appendTo(a.$rating)),a.$stars=a.$rating.find(".rating-stars"),a.generateRating(),a.$clear=r(a.$clearElement)?a.$container.find("."+a.clearButtonBaseClass):a.$clearElement,a.$caption=r(a.$captionElement)?a.$container.find(".caption"):a.$captionElement,a.setStars(),a.$element.hide(),a.listen(),a.showClear&&a.$clear.attr({"class":a.getClearClass()})},checkDisabled:function(){var t=this;t.disabled=l(t.$element,"disabled",t.options),t.readonly=l(t.$element,"readonly",t.options),t.inactive=t.disabled||t.readonly},getClearClass:function(){return this.clearButtonBaseClass+" "+(this.inactive?"":this.clearButtonActiveClass)},generateRating:function(){var t=this,e=t.renderClear(),a=t.renderCaption(),n=t.rtl?"rating-container-rtl":"rating-container",l=t.getStars();n+=t.glyphicon?""==t.symbol?" rating-gly-star":" rating-gly":" rating-uni",t.$rating.attr("class",n),t.$rating.attr("data-content",l),t.$stars.attr("data-content",l);var n=t.rtl?"star-rating-rtl":"star-rating";t.$container.attr("class",n+" rating-"+t.size),t.inactive?t.$container.removeClass("rating-active").addClass("rating-disabled"):t.$container.removeClass("rating-disabled").addClass("rating-active"),"undefined"==typeof t.$caption&&"undefined"==typeof t.$clear&&(t.rtl?t.$container.prepend(a).append(e):t.$container.prepend(e).append(a)),r(t.containerClass)||t.$container.removeClass(t.containerClass).addClass(t.containerClass)},getStars:function(){for(var t=this,e=t.stars,a="",n=1;e>=n;n++)a+=t.symbol;return a},renderClear:function(){var t=this;if(!t.showClear)return"";var e=t.getClearClass();return r(t.$clearElement)?'<div class="'+e+'" title="'+t.clearButtonTitle+'">'+t.clearButton+"</div>":(t.$clearElement.removeClass(e).addClass(e).attr({title:t.clearButtonTitle}),t.$clearElement.html(t.clearButton),"")},renderCaption:function(){var t=this,e=t.$element.val();if(!t.showCaption)return"";var a=t.fetchCaption(e);return r(t.$captionElement)?'<div class="caption">'+a+"</div>":(t.$captionElement.removeClass("caption").addClass("caption").attr({title:t.clearCaption}),t.$captionElement.html(a),"")},fetchCaption:function(t){var e=this,a=parseFloat(t),n=r(e.starCaptionClasses[a])?e.clearCaptionClass:e.starCaptionClasses[a],l=r(e.starCaptions[a])?e.defaultCaption.replace(/\{rating\}/g,a):e.starCaptions[a],i=a==e.clearValue?e.clearCaption:l;return'<span class="'+n+'">'+i+"</span>"},getValueFromPosition:function(t){var e,a,n=this,r=i(n.step),l=n.$rating.width();return e=t/l,a=n.min+Math.ceil(n.diff*e/n.step)*n.step,a<n.min?a=n.min:a>n.max&&(a=n.max),a=s(parseFloat(a),r),n.rtl&&(a=n.max-a),a},setStars:function(t){var e=this,a=e.min,n=e.max,l=(e.step,arguments.length?e.getValueFromPosition(t):r(e.$element.val())?0:e.$element.val()),i=0,s=(e.$rating.width(),e.fetchCaption(l));i=(l-a)/n*100,e.rtl&&(i=100-i),e.$element.val(l),i+="%",e.$stars.css("width",i),e.$caption.html(s)},clear:function(){var t=this,e='<span class="'+t.clearCaptionClass+'">'+t.clearCaption+"</span>";t.$stars.removeClass("rated"),t.inactive||t.$caption.html(e),t.$element.val(t.clearValue),t.setStars(),t.$element.trigger("rating.clear")},reset:function(){var t=this;t.$element.val(t.initialValue),t.setStars(),t.$element.trigger("rating.reset")},update:function(t){if(arguments.length>0){var e=this;e.$element.val(t),e.setStars()}},refresh:function(e){var a=this;if(arguments.length){a.init(t.extend(a.options,e)),a.showClear?a.$clear.show():a.$clear.hide(),a.showCaption?a.$caption.show():a.$caption.hide()}}},t.fn.rating=function(e){var a=Array.apply(null,arguments);return a.shift(),this.each(function(){var n=t(this),r=n.data("rating"),l="object"==typeof e&&e;r||n.data("rating",r=new o(this,t.extend({},t.fn.rating.defaults,l,t(this).data()))),"string"==typeof e&&r[e].apply(r,a)})},t.fn.rating.defaults={stars:5,glyphicon:!0,symbol:null,disabled:!1,readonly:!1,rtl:!1,size:"md",showClear:!0,showCaption:!0,defaultCaption:"{rating} Stars",starCaptions:{.5:"Half Star",1:"One Star",1.5:"One & Half Star",2:"Two Stars",2.5:"Two & Half Stars",3:"Three Stars",3.5:"Three & Half Stars",4:"Four Stars",4.5:"Four & Half Stars",5:"Five Stars"},starCaptionClasses:{.5:"label label-danger",1:"label label-danger",1.5:"label label-warning",2:"label label-warning",2.5:"label label-info",3:"label label-info",3.5:"label label-primary",4:"label label-primary",4.5:"label label-success",5:"label label-success"},clearButton:'<i class="glyphicon glyphicon-minus-sign"></i>',clearButtonTitle:"Clear",clearButtonBaseClass:"clear-rating",clearButtonActiveClass:"clear-rating-active",clearCaption:"Not Rated",clearCaptionClass:"label label-default",clearValue:0,captionElement:null,clearElement:null,containerClass:null},t(document).ready(function(){var e=t("input.rating"),a=Object.keys(e).length;a>0&&e.rating()})}(jQuery);