From 83d9f4ca10b0e74c66b94aeadf7681e6ab90059a Mon Sep 17 00:00:00 2001 From: Kartik Visweswaran Date: Fri, 22 Jan 2016 00:55:04 +0530 Subject: [PATCH] Update to release v3.5.7 --- CHANGE.md | 3 +- LICENSE.md | 2 +- composer.json | 5 + css/star-rating.css | 2 +- css/star-rating.min.css | 2 +- js/star-rating.js | 192 +++++++++++++++++++--------------- js/star-rating.min.js | 4 +- js/star-rating_locale_LANG.js | 2 +- js/star-rating_locale_de.js | 2 +- js/star-rating_locale_ru.js | 2 +- js/star-rating_locale_ua.js | 2 +- 11 files changed, 122 insertions(+), 96 deletions(-) diff --git a/CHANGE.md b/CHANGE.md index 72feef4..695f00a 100644 --- a/CHANGE.md +++ b/CHANGE.md @@ -3,9 +3,10 @@ Change Log: `bootstrap-star-rating` ## Version 3.5.7 -**Date:** 14-Jan-2016 +**Date:** 22-Jan-2016 1. (enh #84): Add Ukranian Translations. +2. (enh #86): Refactor code for listening events and deep extend options correctly. ## Version 3.5.6 diff --git a/LICENSE.md b/LICENSE.md index 7cc0b55..94c3e95 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,4 +1,4 @@ -Copyright (c) 2013 - 2015, Kartik Visweswaran +Copyright (c) 2013 - 2016, Kartik Visweswaran Krajee.com All rights reserved. diff --git a/composer.json b/composer.json index df6f3e4..b82a718 100644 --- a/composer.json +++ b/composer.json @@ -15,5 +15,10 @@ "psr-4": { "kartik\\plugins\\rating\\": "" } + }, + "extra": { + "branch-alias": { + "dev-master": "3.5.x-dev" + } } } \ No newline at end of file diff --git a/css/star-rating.css b/css/star-rating.css index 5f662e3..7d8155d 100644 --- a/css/star-rating.css +++ b/css/star-rating.css @@ -1,5 +1,5 @@ /*! - * @copyright © Kartik Visweswaran, Krajee.com, 2013 - 2015 + * @copyright © Kartik Visweswaran, Krajee.com, 2013 - 2016 * @version 3.5.7 * * A simple yet powerful JQuery star rating plugin that allows rendering diff --git a/css/star-rating.min.css b/css/star-rating.min.css index 4022d43..420ca7b 100644 --- a/css/star-rating.min.css +++ b/css/star-rating.min.css @@ -1,5 +1,5 @@ /*! - * @copyright © Kartik Visweswaran, Krajee.com, 2013 - 2015 + * @copyright © Kartik Visweswaran, Krajee.com, 2013 - 2016 * @version 3.5.7 * * A simple yet powerful JQuery star rating plugin that allows rendering diff --git a/js/star-rating.js b/js/star-rating.js index 65b8b19..23654b1 100644 --- a/js/star-rating.js +++ b/js/star-rating.js @@ -1,5 +1,5 @@ /*! - * @copyright © Kartik Visweswaran, Krajee.com, 2013 - 2015 + * @copyright © Kartik Visweswaran, Krajee.com, 2013 - 2016 * @version 3.5.7 * * A simple yet powerful JQuery star rating plugin that allows rendering fractional star ratings and supports @@ -28,7 +28,9 @@ $.fn.ratingLocales = {}; - var DEFAULT_MIN, DEFAULT_MAX, DEFAULT_STEP, isEmpty, addCss, validateAttr, getDecimalPlaces, applyPrecision, Rating; + var NAMESPACE, DEFAULT_MIN, DEFAULT_MAX, DEFAULT_STEP, isEmpty, addCss, validateAttr, getDecimalPlaces, applyPrecision, + handler, Rating; + NAMESPACE = '.rating'; DEFAULT_MIN = 0; DEFAULT_MAX = 5; DEFAULT_STEP = 0.5; @@ -49,6 +51,10 @@ applyPrecision = function (val, precision) { return parseFloat(val.toFixed(precision)); }; + handler = function ($el, event, callback, skipNS) { + var ev = skipNS ? event : event.split(' ').join(NAMESPACE + ' ') + NAMESPACE; + $el.off(ev).on(ev, callback); + }; Rating = function (element, options) { this.$element = $(element); this.init(options); @@ -74,18 +80,6 @@ } return parseFloat(options[vattr]); }, - listenClick: function ($el, callback) { - $el.on('click touchstart', function (e) { - e.stopPropagation(); - e.preventDefault(); - if (e.handled !== true) { - callback(e); - e.handled = true; - } else { - return false; - } - }); - }, setDefault: function (key, val) { var self = this; if (isEmpty(self[key])) { @@ -96,68 +90,104 @@ var pageX = isEmpty(e.pageX) ? e.originalEvent.touches[0].pageX : e.pageX; return pageX - this.$rating.offset().left; }, - listen: function () { - var self = this, pos, out; - self.initTouch(); - self.listenClick(self.$rating, function (e) { + listenClick: function (e, callback) { + e.stopPropagation(); + e.preventDefault(); + if (e.handled !== true) { + callback(e); + e.handled = true; + } else { + return false; + } + }, + starClick: function (e) { + var self = this, pos; + self.listenClick(e, function (ev) { if (self.inactive) { return false; } - pos = self.getPosition(e); + pos = self.getPosition(ev); self.setStars(pos); self.$element.trigger('change').trigger('rating.change', [self.$element.val(), self.$caption.html()]); self.starClicked = true; }); - self.$rating.on("mousemove", function (e) { - if (!self.hoverEnabled || self.inactive) { - return; - } - self.starClicked = false; - pos = self.getPosition(e); - out = self.calculate(pos); - self.toggleHover(out); - self.$element.trigger('rating.hover', [out.val, out.caption, 'stars']); - }); - self.$rating.on("mouseleave", function () { - if (!self.hoverEnabled || self.inactive || self.starClicked) { - return; - } - out = self.cache; - self.toggleHover(out); - self.$element.trigger('rating.hoverleave', ['stars']); - }); - self.$clear.on("mousemove", function () { - var caption, val, width; - if (!self.hoverEnabled || self.inactive || !self.hoverOnClear) { - return; - } - self.clearClicked = false; - caption = '' + self.clearCaption + ''; - val = self.clearValue; - width = self.getWidthFromValue(val); - out = {caption: caption, width: width, val: val}; - self.toggleHover(out); - self.$element.trigger('rating.hover', [val, caption, 'clear']); - }); - self.$clear.on("mouseleave", function () { - if (!self.hoverEnabled || self.inactive || self.clearClicked || !self.hoverOnClear) { - return; - } - out = self.cache; - self.toggleHover(out); - self.$element.trigger('rating.hoverleave', ['clear']); - }); - self.listenClick(self.$clear, function () { + }, + starMouseMove: function (e) { + var self = this, pos, out; + if (!self.hoverEnabled || self.inactive || (e && e.isDefaultPrevented())) { + return; + } + self.starClicked = false; + pos = self.getPosition(e); + out = self.calculate(pos); + self.toggleHover(out); + self.$element.trigger('rating.hover', [out.val, out.caption, 'stars']); + }, + starMouseLeave: function (e) { + var self = this, out; + if (!self.hoverEnabled || self.inactive || self.starClicked || (e && e.isDefaultPrevented())) { + return; + } + out = self.cache; + self.toggleHover(out); + self.$element.trigger('rating.hoverleave', ['stars']); + }, + clearClick: function (e) { + var self = this; + self.listenClick(e, function () { if (!self.inactive) { self.clear(); self.clearClicked = true; } }); - $(self.$element[0].form).on("reset", function () { - if (!self.inactive) { - self.reset(); - } - }); + }, + clearMouseMove: function (e) { + var self = this, caption, val, width, out; + if (!self.hoverEnabled || self.inactive || !self.hoverOnClear || (e && e.isDefaultPrevented())) { + return; + } + self.clearClicked = false; + caption = '' + self.clearCaption + ''; + val = self.clearValue; + width = self.getWidthFromValue(val); + out = {caption: caption, width: width, val: val}; + self.toggleHover(out); + self.$element.trigger('rating.hover', [val, caption, 'clear']); + }, + clearMouseLeave: function (e) { + var self = this, out; + if (!self.hoverEnabled || self.inactive || self.clearClicked || !self.hoverOnClear || (e && e.isDefaultPrevented())) { + return; + } + out = self.cache; + self.toggleHover(out); + self.$element.trigger('rating.hoverleave', ['clear']); + }, + resetForm: function (e) { + var self = this; + if (e && e.isDefaultPrevented()) { + return; + } + if (!self.inactive) { + self.reset(); + } + }, + initTouch: function (e) { + var self = this, flag = (e.type === "touchend"); + self.setTouch(e, flag); + }, + listen: function () { + var self = this, $form = self.$element.closest('form'), $rating = self.$rating, $clear = self.$clear; + handler($rating, 'touchstart touchmove touchend', $.proxy(self.initTouch, self)); + handler($rating, 'click touchstart', $.proxy(self.starClick, self)); + handler($rating, 'mousemove', $.proxy(self.starMouseMove, self)); + handler($rating, 'mouseleave', $.proxy(self.starMouseLeave, self)); + handler($clear, 'click touchstart', $.proxy(self.clearClick, self)); + handler($clear, 'mousemove', $.proxy(self.clearMouseMove, self)); + handler($clear, 'mouseleave', $.proxy(self.clearMouseLeave, self)); + if ($form.length) { + handler($form, 'reset', $.proxy(self.resetForm, self)); + } }, destroy: function () { var self = this, $el = self.$element; @@ -197,13 +227,6 @@ self.$stars.css('width', width); } }, - initTouch: function () { - var self = this; - self.$rating.on("touchstart touchmove touchend", function (e) { - var flag = (e.type === "touchend"); - self.setTouch(e, flag); - }); - }, initSlider: function (options) { var self = this; if (isEmpty(self.$element.val())) { @@ -254,7 +277,8 @@ } self.$stars = self.$rating.find('.rating-stars'); self.generateRating(); - self.$clear = !isEmpty(self.$clearElement) ? self.$clearElement : self.$container.find('.' + self.clearButtonBaseClass); + self.$clear = !isEmpty(self.$clearElement) ? self.$clearElement : self.$container.find( + '.' + self.clearButtonBaseClass); self.$caption = !isEmpty(self.$captionElement) ? self.$captionElement : self.$container.find(".caption"); self.setStars(); self.listen(); @@ -444,7 +468,7 @@ if (self.$clear !== undefined) { self.$clear.off(); } - self.init($.extend(self.options, options)); + self.init($.extend(true, self.options, options)); if (self.showClear) { self.$clear.show(); } else { @@ -463,16 +487,16 @@ var args = Array.apply(null, arguments), retvals = []; args.shift(); this.each(function () { - var $this = $(this), data = $this.data('rating'), defaults, options = typeof option === 'object' && option, - lang = options.language || $this.data('language') || 'en'; + var self = $(this), data = self.data('rating'), options = typeof option === 'object' && option, + lang = options.language || self.data('language') || 'en', loc = {}, opts; if (!data) { - defaults = $.extend({}, $.fn.rating.defaults); if (lang !== 'en' && !isEmpty($.fn.ratingLocales[lang])) { - defaults = $.extend(defaults, $.fn.ratingLocales[lang]); + loc = $.fn.ratingLocales[lang]; } - data = new Rating(this, $.extend(defaults, options, $this.data())); - $this.data('rating', data); + opts = $.extend(true, {}, $.fn.rating.defaults, $.fn.ratingLocales.en, loc, options, self.data()); + data = new Rating(this, opts); + self.data('rating', data); } if (typeof option === 'string') { @@ -545,19 +569,15 @@ clearCaption: 'Not Rated' }; - $.extend($.fn.rating.defaults, $.fn.ratingLocales.en); - $.fn.rating.Constructor = Rating; /** * Convert automatically inputs with class 'rating' into Krajee's star rating control. */ - $('input.rating').addClass('rating-loading'); - $(document).ready(function () { - var $input = $('input.rating'), count = Object.keys($input).length; - if (count > 0) { - $input.rating(); + var $input = $('input.rating'); + if ($input.length) { + $input.removeClass('rating-loading').addClass('rating-loading').rating(); } }); })); \ No newline at end of file diff --git a/js/star-rating.min.js b/js/star-rating.min.js index f58bd47..6eb65e5 100644 --- a/js/star-rating.min.js +++ b/js/star-rating.min.js @@ -1,5 +1,5 @@ /*! - * @copyright © Kartik Visweswaran, Krajee.com, 2013 - 2015 + * @copyright © Kartik Visweswaran, Krajee.com, 2013 - 2016 * @version 3.5.7 * * A simple yet powerful JQuery star rating plugin that allows rendering fractional star ratings and supports @@ -7,4 +7,4 @@ * * For more JQuery plugins visit http://plugins.krajee.com * For more Yii related demos visit http://demos.krajee.com - */!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&module.exports?module.exports=t(require("jquery")):t(window.jQuery)}(function(t){"use strict";t.fn.ratingLocales={};var e,a,n,r,i,l,o,s,c;e=0,a=5,n=.5,r=function(e,a){return null===e||void 0===e||0===e.length||a&&""===t.trim(e)},i=function(t,e){t.removeClass(e).addClass(e)},l=function(t,e,a){var n=r(t.data(e))?t.attr(e):t.data(e);return n?n:a[e]},o=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))},c=function(e,a){this.$element=t(e),this.init(a)},c.prototype={constructor:c,_parseAttr:function(t,i){var o,s,c,u=this,g=u.$element,h=g.attr("type");if("range"===h||"number"===h){switch(s=l(g,t,i),t){case"min":c=e;break;case"max":c=a;break;default:c=n}return o=r(s)?c:s,parseFloat(o)}return parseFloat(i[t])},listenClick:function(t,e){t.on("click touchstart",function(t){return t.stopPropagation(),t.preventDefault(),t.handled===!0?!1:(e(t),void(t.handled=!0))})},setDefault:function(t,e){var a=this;r(a[t])&&(a[t]=e)},getPosition:function(t){var e=r(t.pageX)?t.originalEvent.touches[0].pageX:t.pageX;return e-this.$rating.offset().left},listen:function(){var e,a,n=this;n.initTouch(),n.listenClick(n.$rating,function(t){return n.inactive?!1:(e=n.getPosition(t),n.setStars(e),n.$element.trigger("change").trigger("rating.change",[n.$element.val(),n.$caption.html()]),void(n.starClicked=!0))}),n.$rating.on("mousemove",function(t){n.hoverEnabled&&!n.inactive&&(n.starClicked=!1,e=n.getPosition(t),a=n.calculate(e),n.toggleHover(a),n.$element.trigger("rating.hover",[a.val,a.caption,"stars"]))}),n.$rating.on("mouseleave",function(){!n.hoverEnabled||n.inactive||n.starClicked||(a=n.cache,n.toggleHover(a),n.$element.trigger("rating.hoverleave",["stars"]))}),n.$clear.on("mousemove",function(){var t,e,r;n.hoverEnabled&&!n.inactive&&n.hoverOnClear&&(n.clearClicked=!1,t=''+n.clearCaption+"",e=n.clearValue,r=n.getWidthFromValue(e),a={caption:t,width:r,val:e},n.toggleHover(a),n.$element.trigger("rating.hover",[e,t,"clear"]))}),n.$clear.on("mouseleave",function(){n.hoverEnabled&&!n.inactive&&!n.clearClicked&&n.hoverOnClear&&(a=n.cache,n.toggleHover(a),n.$element.trigger("rating.hoverleave",["clear"]))}),n.listenClick(n.$clear,function(){n.inactive||(n.clear(),n.clearClicked=!0)}),t(n.$element[0].form).on("reset",function(){n.inactive||n.reset()})},destroy:function(){var e=this,a=e.$element;r(e.$container)||e.$container.before(a).remove(),t.removeData(a.get(0)),a.off("rating").removeClass("hide")},create:function(t){var e=this,a=e.$element;t=t||e.options||{},e.destroy(),a.rating(t)},setTouch:function(t,e){var a,n,i,l,o,s,c,u=this,g="ontouchstart"in window||window.DocumentTouch&&document instanceof window.DocumentTouch;g&&!u.inactive&&(a=t.originalEvent,n=r(a.touches)?a.changedTouches:a.touches,i=u.getPosition(n[0]),e?(u.setStars(i),u.$element.trigger("change").trigger("rating.change",[u.$element.val(),u.$caption.html()]),u.starClicked=!0):(l=u.calculate(i),o=l.val<=u.clearValue?u.fetchCaption(u.clearValue):l.caption,s=u.getWidthFromValue(u.clearValue),c=l.val<=u.clearValue?u.rtl?100-s+"%":s+"%":l.width,u.$caption.html(o),u.$stars.css("width",c)))},initTouch:function(){var t=this;t.$rating.on("touchstart touchmove touchend",function(e){var a="touchend"===e.type;t.setTouch(e,a)})},initSlider:function(t){var i=this;r(i.$element.val())&&i.$element.val(0),i.initialValue=i.$element.val(),i.setDefault("min",i._parseAttr("min",t)),i.setDefault("max",i._parseAttr("max",t)),i.setDefault("step",i._parseAttr("step",t)),(isNaN(i.min)||r(i.min))&&(i.min=e),(isNaN(i.max)||r(i.max))&&(i.max=a),(isNaN(i.step)||r(i.step)||0===i.step)&&(i.step=n),i.diff=i.max-i.min},init:function(e){var a,n,l,o=this,s=o.$element;o.options=e,t.each(e,function(t,e){o[t]=e}),o.starClicked=!1,o.clearClicked=!1,o.initSlider(e),o.checkDisabled(),o.setDefault("rtl",s.attr("dir")),o.rtl&&s.attr("dir","rtl"),a=o.glyphicon?"":"★",o.setDefault("symbol",a),o.setDefault("clearButtonBaseClass","clear-rating"),o.setDefault("clearButtonActiveClass","clear-rating-active"),o.setDefault("clearValue",o.min),i(s,"form-control hide"),o.$clearElement=r(e.clearElement)?null:t(e.clearElement),o.$captionElement=r(e.captionElement)?null:t(e.captionElement),void 0===o.$rating&&void 0===o.$container&&(o.$rating=t(document.createElement("div")).html('
'),o.$container=t(document.createElement("div")),o.$container.before(o.$rating).append(o.$rating),s.before(o.$container).appendTo(o.$rating)),o.$stars=o.$rating.find(".rating-stars"),o.generateRating(),o.$clear=r(o.$clearElement)?o.$container.find("."+o.clearButtonBaseClass):o.$clearElement,o.$caption=r(o.$captionElement)?o.$container.find(".caption"):o.$captionElement,o.setStars(),o.listen(),o.showClear&&o.$clear.attr({"class":o.getClearClass()}),n=s.val(),l=o.getWidthFromValue(n),o.cache={caption:o.$caption.html(),width:(o.rtl?100-l:l)+"%",val:n},s.removeClass("rating-loading")},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")+t.ratingClass:r(t.ratingClass)?" rating-uni":" "+t.ratingClass,t.$rating.attr("class",n),t.$rating.attr("data-content",l),t.$stars.attr("data-content",l),n=t.rtl?"star-rating-rtl":"star-rating",t.$container.attr("class",n+" rating-"+t.size),t.$container.removeClass("rating-active rating-disabled"),t.$container.addClass(t.inactive?"rating-disabled":"rating-active"),r(t.$caption)&&(t.rtl?t.$container.prepend(a):t.$container.append(a)),r(t.$clear)&&(t.rtl?t.$container.append(e):t.$container.prepend(e)),r(t.containerClass)||i(t.$container,t.containerClass)},getStars:function(){var t,e=this,a=e.stars,n="";for(t=1;a>=t;t++)n+=e.symbol;return n},renderClear:function(){var t,e=this;return e.showClear?(t=e.getClearClass(),r(e.$clearElement)?'
'+e.clearButton+"
":(i(e.$clearElement,t),e.$clearElement.attr({title:e.clearButtonTitle}).html(e.clearButton),"")):""},renderCaption:function(){var t,e=this,a=e.$element.val();return e.showCaption?(t=e.fetchCaption(a),r(e.$captionElement)?'
'+t+"
":(i(e.$captionElement,"caption"),e.$captionElement.html(t),"")):""},fetchCaption:function(t){var e,a,n,i,l,o=this,s=parseFloat(t),c=o.starCaptions,u=o.starCaptionClasses;return i="function"==typeof u?u(s):u[s],n="function"==typeof c?c(s):c[s],a=r(n)?o.defaultCaption.replace(/\{rating}/g,s):n,e=r(i)?o.clearCaptionClass:i,l=s===o.clearValue?o.clearCaption:a,''+l+""},getWidthFromValue:function(t){var e=this,a=e.min,n=e.max;return a>=t||a===n?0:t>=n?100:100*(t-a)/(n-a)},getValueFromPosition:function(t){var e,a,n=this,r=o(n.step),i=n.$rating.width();return a=n.diff*t/(i*n.step),a=n.rtl?Math.floor(a):Math.ceil(a),e=s(parseFloat(n.min+a*n.step),r),e=Math.max(Math.min(e,n.max),n.min),n.rtl?n.max-e:e},toggleHover:function(t){var e,a,n,r=this;r.hoverChangeCaption&&(n=t.val<=r.clearValue?r.fetchCaption(r.clearValue):t.caption,r.$caption.html(n)),r.hoverChangeStars&&(e=r.getWidthFromValue(r.clearValue),a=t.val<=r.clearValue?r.rtl?100-e+"%":e+"%":t.width,r.$stars.css("width",a))},calculate:function(t){var e=this,a=r(e.$element.val())?0:e.$element.val(),n=arguments.length?e.getValueFromPosition(t):a,i=e.fetchCaption(n),l=e.getWidthFromValue(n);return e.rtl&&(l=100-l),l+="%",{caption:i,width:l,val:n}},setStars:function(t){var e=this,a=arguments.length?e.calculate(t):e.calculate();e.$element.val(a.val),e.$stars.css("width",a.width),e.$caption.html(a.caption),e.cache=a},clear:function(){var t=this,e=''+t.clearCaption+"";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){var e=this;arguments.length&&(e.$element.val(t),e.setStars())},refresh:function(e){var a=this;arguments.length&&(a.$rating.off("rating"),void 0!==a.$clear&&a.$clear.off(),a.init(t.extend(a.options,e)),a.showClear?a.$clear.show():a.$clear.hide(),a.showCaption?a.$caption.show():a.$caption.hide(),a.$element.trigger("rating.refresh"))}},t.fn.rating=function(e){var a=Array.apply(null,arguments),n=[];switch(a.shift(),this.each(function(){var i,l=t(this),o=l.data("rating"),s="object"==typeof e&&e,u=s.language||l.data("language")||"en";o||(i=t.extend({},t.fn.rating.defaults),"en"===u||r(t.fn.ratingLocales[u])||(i=t.extend(i,t.fn.ratingLocales[u])),o=new c(this,t.extend(i,s,l.data())),l.data("rating",o)),"string"==typeof e&&n.push(o[e].apply(o,a))}),n.length){case 0:return this;case 1:return n[0];default:return n}},t.fn.rating.defaults={language:"en",stars:5,glyphicon:!0,symbol:null,ratingClass:"",disabled:!1,readonly:!1,rtl:!1,size:"md",showClear:!0,showCaption:!0,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:'',clearButtonBaseClass:"clear-rating",clearButtonActiveClass:"clear-rating-active",clearCaptionClass:"label label-default",clearValue:null,captionElement:null,clearElement:null,containerClass:null,hoverEnabled:!0,hoverChangeCaption:!0,hoverChangeStars:!0,hoverOnClear:!0},t.fn.ratingLocales.en={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"},clearButtonTitle:"Clear",clearCaption:"Not Rated"},t.extend(t.fn.rating.defaults,t.fn.ratingLocales.en),t.fn.rating.Constructor=c,t("input.rating").addClass("rating-loading"),t(document).ready(function(){var e=t("input.rating"),a=Object.keys(e).length;a>0&&e.rating()})}); \ No newline at end of file + */!function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&module.exports?module.exports=e(require("jquery")):e(window.jQuery)}(function(e){"use strict";e.fn.ratingLocales={};var t,a,n,r,i,l,s,o,c,u,g;t=".rating",a=0,n=5,r=.5,i=function(t,a){return null===t||void 0===t||0===t.length||a&&""===e.trim(t)},l=function(e,t){e.removeClass(t).addClass(t)},s=function(e,t,a){var n=i(e.data(t))?e.attr(t):e.data(t);return n?n:a[t]},o=function(e){var t=(""+e).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);return t?Math.max(0,(t[1]?t[1].length:0)-(t[2]?+t[2]:0)):0},c=function(e,t){return parseFloat(e.toFixed(t))},u=function(e,a,n,r){var i=r?a:a.split(" ").join(t+" ")+t;e.off(i).on(i,n)},g=function(t,a){this.$element=e(t),this.init(a)},g.prototype={constructor:g,_parseAttr:function(e,t){var l,o,c,u=this,g=u.$element,h=g.attr("type");if("range"===h||"number"===h){switch(o=s(g,e,t),e){case"min":c=a;break;case"max":c=n;break;default:c=r}return l=i(o)?c:o,parseFloat(l)}return parseFloat(t[e])},setDefault:function(e,t){var a=this;i(a[e])&&(a[e]=t)},getPosition:function(e){var t=i(e.pageX)?e.originalEvent.touches[0].pageX:e.pageX;return t-this.$rating.offset().left},listenClick:function(e,t){return e.stopPropagation(),e.preventDefault(),e.handled===!0?!1:(t(e),void(e.handled=!0))},starClick:function(e){var t,a=this;a.listenClick(e,function(e){return a.inactive?!1:(t=a.getPosition(e),a.setStars(t),a.$element.trigger("change").trigger("rating.change",[a.$element.val(),a.$caption.html()]),void(a.starClicked=!0))})},starMouseMove:function(e){var t,a,n=this;!n.hoverEnabled||n.inactive||e&&e.isDefaultPrevented()||(n.starClicked=!1,t=n.getPosition(e),a=n.calculate(t),n.toggleHover(a),n.$element.trigger("rating.hover",[a.val,a.caption,"stars"]))},starMouseLeave:function(e){var t,a=this;!a.hoverEnabled||a.inactive||a.starClicked||e&&e.isDefaultPrevented()||(t=a.cache,a.toggleHover(t),a.$element.trigger("rating.hoverleave",["stars"]))},clearClick:function(e){var t=this;t.listenClick(e,function(){t.inactive||(t.clear(),t.clearClicked=!0)})},clearMouseMove:function(e){var t,a,n,r,i=this;!i.hoverEnabled||i.inactive||!i.hoverOnClear||e&&e.isDefaultPrevented()||(i.clearClicked=!1,t=''+i.clearCaption+"",a=i.clearValue,n=i.getWidthFromValue(a),r={caption:t,width:n,val:a},i.toggleHover(r),i.$element.trigger("rating.hover",[a,t,"clear"]))},clearMouseLeave:function(e){var t,a=this;!a.hoverEnabled||a.inactive||a.clearClicked||!a.hoverOnClear||e&&e.isDefaultPrevented()||(t=a.cache,a.toggleHover(t),a.$element.trigger("rating.hoverleave",["clear"]))},resetForm:function(e){var t=this;e&&e.isDefaultPrevented()||t.inactive||t.reset()},initTouch:function(e){var t=this,a="touchend"===e.type;t.setTouch(e,a)},listen:function(){var t=this,a=t.$element.closest("form"),n=t.$rating,r=t.$clear;u(n,"touchstart touchmove touchend",e.proxy(t.initTouch,t)),u(n,"click touchstart",e.proxy(t.starClick,t)),u(n,"mousemove",e.proxy(t.starMouseMove,t)),u(n,"mouseleave",e.proxy(t.starMouseLeave,t)),u(r,"click touchstart",e.proxy(t.clearClick,t)),u(r,"mousemove",e.proxy(t.clearMouseMove,t)),u(r,"mouseleave",e.proxy(t.clearMouseLeave,t)),a.length&&u(a,"reset",e.proxy(t.resetForm,t))},destroy:function(){var t=this,a=t.$element;i(t.$container)||t.$container.before(a).remove(),e.removeData(a.get(0)),a.off("rating").removeClass("hide")},create:function(e){var t=this,a=t.$element;e=e||t.options||{},t.destroy(),a.rating(e)},setTouch:function(e,t){var a,n,r,l,s,o,c,u=this,g="ontouchstart"in window||window.DocumentTouch&&document instanceof window.DocumentTouch;g&&!u.inactive&&(a=e.originalEvent,n=i(a.touches)?a.changedTouches:a.touches,r=u.getPosition(n[0]),t?(u.setStars(r),u.$element.trigger("change").trigger("rating.change",[u.$element.val(),u.$caption.html()]),u.starClicked=!0):(l=u.calculate(r),s=l.val<=u.clearValue?u.fetchCaption(u.clearValue):l.caption,o=u.getWidthFromValue(u.clearValue),c=l.val<=u.clearValue?u.rtl?100-o+"%":o+"%":l.width,u.$caption.html(s),u.$stars.css("width",c)))},initSlider:function(e){var t=this;i(t.$element.val())&&t.$element.val(0),t.initialValue=t.$element.val(),t.setDefault("min",t._parseAttr("min",e)),t.setDefault("max",t._parseAttr("max",e)),t.setDefault("step",t._parseAttr("step",e)),(isNaN(t.min)||i(t.min))&&(t.min=a),(isNaN(t.max)||i(t.max))&&(t.max=n),(isNaN(t.step)||i(t.step)||0===t.step)&&(t.step=r),t.diff=t.max-t.min},init:function(t){var a,n,r,s=this,o=s.$element;s.options=t,e.each(t,function(e,t){s[e]=t}),s.starClicked=!1,s.clearClicked=!1,s.initSlider(t),s.checkDisabled(),s.setDefault("rtl",o.attr("dir")),s.rtl&&o.attr("dir","rtl"),a=s.glyphicon?"":"★",s.setDefault("symbol",a),s.setDefault("clearButtonBaseClass","clear-rating"),s.setDefault("clearButtonActiveClass","clear-rating-active"),s.setDefault("clearValue",s.min),l(o,"form-control hide"),s.$clearElement=i(t.clearElement)?null:e(t.clearElement),s.$captionElement=i(t.captionElement)?null:e(t.captionElement),void 0===s.$rating&&void 0===s.$container&&(s.$rating=e(document.createElement("div")).html('
'),s.$container=e(document.createElement("div")),s.$container.before(s.$rating).append(s.$rating),o.before(s.$container).appendTo(s.$rating)),s.$stars=s.$rating.find(".rating-stars"),s.generateRating(),s.$clear=i(s.$clearElement)?s.$container.find("."+s.clearButtonBaseClass):s.$clearElement,s.$caption=i(s.$captionElement)?s.$container.find(".caption"):s.$captionElement,s.setStars(),s.listen(),s.showClear&&s.$clear.attr({"class":s.getClearClass()}),n=o.val(),r=s.getWidthFromValue(n),s.cache={caption:s.$caption.html(),width:(s.rtl?100-r:r)+"%",val:n},o.removeClass("rating-loading")},checkDisabled:function(){var e=this;e.disabled=s(e.$element,"disabled",e.options),e.readonly=s(e.$element,"readonly",e.options),e.inactive=e.disabled||e.readonly},getClearClass:function(){return this.clearButtonBaseClass+" "+(this.inactive?"":this.clearButtonActiveClass)},generateRating:function(){var e=this,t=e.renderClear(),a=e.renderCaption(),n=e.rtl?"rating-container-rtl":"rating-container",r=e.getStars();n+=e.glyphicon?(""===e.symbol?" rating-gly-star":" rating-gly")+e.ratingClass:i(e.ratingClass)?" rating-uni":" "+e.ratingClass,e.$rating.attr("class",n),e.$rating.attr("data-content",r),e.$stars.attr("data-content",r),n=e.rtl?"star-rating-rtl":"star-rating",e.$container.attr("class",n+" rating-"+e.size),e.$container.removeClass("rating-active rating-disabled"),e.$container.addClass(e.inactive?"rating-disabled":"rating-active"),i(e.$caption)&&(e.rtl?e.$container.prepend(a):e.$container.append(a)),i(e.$clear)&&(e.rtl?e.$container.append(t):e.$container.prepend(t)),i(e.containerClass)||l(e.$container,e.containerClass)},getStars:function(){var e,t=this,a=t.stars,n="";for(e=1;a>=e;e++)n+=t.symbol;return n},renderClear:function(){var e,t=this;return t.showClear?(e=t.getClearClass(),i(t.$clearElement)?'
'+t.clearButton+"
":(l(t.$clearElement,e),t.$clearElement.attr({title:t.clearButtonTitle}).html(t.clearButton),"")):""},renderCaption:function(){var e,t=this,a=t.$element.val();return t.showCaption?(e=t.fetchCaption(a),i(t.$captionElement)?'
'+e+"
":(l(t.$captionElement,"caption"),t.$captionElement.html(e),"")):""},fetchCaption:function(e){var t,a,n,r,l,s=this,o=parseFloat(e),c=s.starCaptions,u=s.starCaptionClasses;return r="function"==typeof u?u(o):u[o],n="function"==typeof c?c(o):c[o],a=i(n)?s.defaultCaption.replace(/\{rating}/g,o):n,t=i(r)?s.clearCaptionClass:r,l=o===s.clearValue?s.clearCaption:a,''+l+""},getWidthFromValue:function(e){var t=this,a=t.min,n=t.max;return a>=e||a===n?0:e>=n?100:100*(e-a)/(n-a)},getValueFromPosition:function(e){var t,a,n=this,r=o(n.step),i=n.$rating.width();return a=n.diff*e/(i*n.step),a=n.rtl?Math.floor(a):Math.ceil(a),t=c(parseFloat(n.min+a*n.step),r),t=Math.max(Math.min(t,n.max),n.min),n.rtl?n.max-t:t},toggleHover:function(e){var t,a,n,r=this;r.hoverChangeCaption&&(n=e.val<=r.clearValue?r.fetchCaption(r.clearValue):e.caption,r.$caption.html(n)),r.hoverChangeStars&&(t=r.getWidthFromValue(r.clearValue),a=e.val<=r.clearValue?r.rtl?100-t+"%":t+"%":e.width,r.$stars.css("width",a))},calculate:function(e){var t=this,a=i(t.$element.val())?0:t.$element.val(),n=arguments.length?t.getValueFromPosition(e):a,r=t.fetchCaption(n),l=t.getWidthFromValue(n);return t.rtl&&(l=100-l),l+="%",{caption:r,width:l,val:n}},setStars:function(e){var t=this,a=arguments.length?t.calculate(e):t.calculate();t.$element.val(a.val),t.$stars.css("width",a.width),t.$caption.html(a.caption),t.cache=a},clear:function(){var e=this,t=''+e.clearCaption+"";e.$stars.removeClass("rated"),e.inactive||e.$caption.html(t),e.$element.val(e.clearValue),e.setStars(),e.$element.trigger("rating.clear")},reset:function(){var e=this;e.$element.val(e.initialValue),e.setStars(),e.$element.trigger("rating.reset")},update:function(e){var t=this;arguments.length&&(t.$element.val(e),t.setStars())},refresh:function(t){var a=this;arguments.length&&(a.$rating.off("rating"),void 0!==a.$clear&&a.$clear.off(),a.init(e.extend(!0,a.options,t)),a.showClear?a.$clear.show():a.$clear.hide(),a.showCaption?a.$caption.show():a.$caption.hide(),a.$element.trigger("rating.refresh"))}},e.fn.rating=function(t){var a=Array.apply(null,arguments),n=[];switch(a.shift(),this.each(function(){var r,l=e(this),s=l.data("rating"),o="object"==typeof t&&t,c=o.language||l.data("language")||"en",u={};s||("en"===c||i(e.fn.ratingLocales[c])||(u=e.fn.ratingLocales[c]),r=e.extend(!0,{},e.fn.rating.defaults,e.fn.ratingLocales.en,u,o,l.data()),s=new g(this,r),l.data("rating",s)),"string"==typeof t&&n.push(s[t].apply(s,a))}),n.length){case 0:return this;case 1:return n[0];default:return n}},e.fn.rating.defaults={language:"en",stars:5,glyphicon:!0,symbol:null,ratingClass:"",disabled:!1,readonly:!1,rtl:!1,size:"md",showClear:!0,showCaption:!0,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:'',clearButtonBaseClass:"clear-rating",clearButtonActiveClass:"clear-rating-active",clearCaptionClass:"label label-default",clearValue:null,captionElement:null,clearElement:null,containerClass:null,hoverEnabled:!0,hoverChangeCaption:!0,hoverChangeStars:!0,hoverOnClear:!0},e.fn.ratingLocales.en={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"},clearButtonTitle:"Clear",clearCaption:"Not Rated"},e.fn.rating.Constructor=g,e(document).ready(function(){var t=e("input.rating");t.length&&t.removeClass("rating-loading").addClass("rating-loading").rating()})}); \ No newline at end of file diff --git a/js/star-rating_locale_LANG.js b/js/star-rating_locale_LANG.js index c3c7161..7bc53a7 100644 --- a/js/star-rating_locale_LANG.js +++ b/js/star-rating_locale_LANG.js @@ -1,7 +1,7 @@ /*! * Star Rating Translations * - * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * This file must be loaded after 'star-rating.js'. Patterns in braces '{}', or * any HTML markup tags in the messages must not be converted or translated. * * @see http://github.com/kartik-v/bootstrap-star-rating diff --git a/js/star-rating_locale_de.js b/js/star-rating_locale_de.js index 8e5ae3a..8af14e5 100644 --- a/js/star-rating_locale_de.js +++ b/js/star-rating_locale_de.js @@ -1,7 +1,7 @@ /*! * Star Rating German Translations * - * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * This file must be loaded after 'star-rating.js'. Patterns in braces '{}', or * any HTML markup tags in the messages must not be converted or translated. * * @see http://github.com/kartik-v/bootstrap-star-rating diff --git a/js/star-rating_locale_ru.js b/js/star-rating_locale_ru.js index 46f9d0e..56fe673 100644 --- a/js/star-rating_locale_ru.js +++ b/js/star-rating_locale_ru.js @@ -1,7 +1,7 @@ /*! * Star Rating Russian Translations * - * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * This file must be loaded after 'star-rating.js'. Patterns in braces '{}', or * any HTML markup tags in the messages must not be converted or translated. * * @see http://github.com/kartik-v/bootstrap-star-rating diff --git a/js/star-rating_locale_ua.js b/js/star-rating_locale_ua.js index f26f7d4..b6b8546 100644 --- a/js/star-rating_locale_ua.js +++ b/js/star-rating_locale_ua.js @@ -1,7 +1,7 @@ /*! * Star Rating Ukrainian Translations * - * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or + * This file must be loaded after 'star-rating.js'. Patterns in braces '{}', or * any HTML markup tags in the messages must not be converted or translated. * * @see http://github.com/kartik-v/bootstrap-star-rating