8 lines
4.9 KiB
JavaScript
8 lines
4.9 KiB
JavaScript
/*!
|
|
* Star Rating
|
|
* @version: 3.4.0
|
|
* @author: Paul Ryley (http://geminilabs.io)
|
|
* @url: https://github.com/pryley/star-rating.js
|
|
* @license: MIT
|
|
*/
|
|
!function(s,e){"use strict";function t(t,i){var s={}.toString.call(t);this.selects="[object String]"===s?e.querySelectorAll(t):"[object NodeList]"===s?t:[t],this.destroy=function(){this.widgets.forEach(function(t){t.t()})},this.rebuild=function(){this.widgets.forEach(function(t){t.i()})},this.widgets=[];for(var n=0;n<this.selects.length;n++)if("SELECT"===this.selects[n].tagName&&!this.selects[n][o]){var h=new r(this.selects[n],i);void 0!==h.direction&&this.widgets.push(h)}}var o="star-rating",r=function(t,i){this.el=t,this.s=this.n({},this.h,i||{},JSON.parse(t.getAttribute("data-options"))),this.e(),this.stars<1||this.stars>this.s.maxStars||this.i()};r.prototype={h:{classname:"gl-star-rating",clearable:!0,initialText:"Select a Rating",maxStars:10,showText:!0},o:function(){this.r(),this.current=this.selected=this.a(),this.u(),this.c(),this.f(),this.v(this.current),this.l("add"),this.el[o]=!0},d:function(){this.s.showText&&(this.textEl=this._(this.widgetEl,{class:this.s.classname+"-text"},!0))},c:function(){var t=this.m(),i=this._(this.el,{class:this.s.classname+"-stars"},!0);for(var s in t){var n=this.g({"data-value":s,"data-text":t[s]});i.innerHTML+=n.outerHTML}this.widgetEl=i,this.d()},p:function(t){(t<0||isNaN(t))&&(t=0),t>this.stars&&(t=this.stars),this.widgetEl.classList.remove("s"+10*this.current),this.widgetEl.classList.add("s"+10*t),this.s.showText&&(this.textEl.textContent=t<1?this.s.initialText:this.widgetEl.childNodes[t-1].dataset.text),this.current=t},g:function(t){var i=e.createElement("span");for(var s in t=t||{})i.setAttribute(s,t[s]);return i},t:function(){this.l("remove");var t=this.el.parentNode;t.parentNode.replaceChild(this.el,t),delete this.el[o]},w:function(i,s,t,n){n=n||!1,t.forEach(function(t){this.events&&i[s+"EventListener"](t,this.events[t],n)}.bind(this))},n:function(){var t=[].slice.call(arguments),s=t[0],n=t.slice(1);return Object.keys(n).forEach(function(t){for(var i in n[t])n[t].hasOwnProperty(i)&&(s[i]=n[t][i])}),s},b:function(){var t=!1;try{var i=Object.defineProperty({},"passive",{get:function(){t={passive:!1}}});s.addEventListener("test",null,i)}catch(t){}return t},S:function(t){var i={},s=t.pageX||t.changedTouches[0].pageX,n=this.widgetEl.offsetWidth;return i.ltr=Math.max(s-this.offsetLeft,1),i.rtl=n-i.ltr,Math.min(Math.ceil(i[this.direction]/Math.round(n/this.stars)),this.stars)},m:function(){for(var t=this.el,i={},s={},n=0;n<t.length;n++)this.y(t[n])||(i[t[n].value]=t[n].text);return Object.keys(i).sort().forEach(function(t){s[t]=i[t]}),s},a:function(){return parseInt(this.el.options[Math.max(this.el.selectedIndex,0)].value)||0},l:function(t){var i=this.el.closest("form");i&&"FORM"===i.tagName&&this.w(i,t,["reset"]),"add"===t&&this.el.disabled||(this.w(this.el,t,["change","keydown"]),this.w(this.widgetEl,t,["mousedown","mouseleave","mousemove","mouseover","touchend","touchmove","touchstart"],this.b()))},r:function(){this.events={change:this.M.bind(this),keydown:this.x.bind(this),mousedown:this.L.bind(this),mouseleave:this.O.bind(this),mousemove:this.j.bind(this),mouseover:this.N.bind(this),reset:this.F.bind(this),touchend:this.L.bind(this),touchmove:this.j.bind(this),touchstart:this.N.bind(this)}},_:function(t,i,s){var n=this.g(i);return t.parentNode.insertBefore(n,!0===s?t.nextSibling:t),n},y:function(t){return null===t.getAttribute("value")||""===t.value},M:function(){this.p(this.a())},x:function(t){if(~["ArrowLeft","ArrowRight"].indexOf(t.key)){var i="ArrowLeft"===t.key?-1:1;"rtl"===this.direction&&(i*=-1),this.v(Math.min(Math.max(this.a()+i,0),this.stars)),this.C()}},L:function(t){t.preventDefault();var i=this.S(t);0!==this.current&&parseFloat(this.selected)===i&&this.s.clearable&&(i=0),this.v(i),this.C()},O:function(t){t.preventDefault(),this.p(this.selected)},j:function(t){t.preventDefault(),this.p(this.S(t))},N:function(t){t.preventDefault();var i=this.widgetEl.getBoundingClientRect();this.offsetLeft=i.left+e.body.scrollLeft},F:function(){var t=this.el.querySelector("[selected]"),i=t?t.value:"";this.el.value=i,this.selected=parseInt(i)||0,this.p(i)},i:function(){this.el.parentNode.classList.contains(this.s.classname)&&this.t(),this.o()},f:function(){var t=this.el.parentNode;this.direction=s.getComputedStyle(t,null).getPropertyValue("direction"),t.classList.add(this.s.classname+"-"+this.direction)},v:function(t){this.el.value=this.selected=t,this.p(t)},e:function(){for(var t=this.el,i=this.stars=0;i<t.length;i++)if(!this.y(t[i])){if(isNaN(parseFloat(t[i].value))||!isFinite(t[i].value))return void(this.stars=0);this.stars++}},C:function(){this.el.dispatchEvent(new Event("change"))},u:function(){this._(this.el,{class:this.s.classname,"data-star-rating":""}).appendChild(this.el)}},"function"==typeof define&&define.amd?define([],function(){return t}):"object"==typeof module&&module.exports?module.exports=t:s.StarRating=t}(window,document); |