starry-rating
Version:
JavaScript star rating system
1 lines • 12.8 kB
JavaScript
"use strict";function _createForOfIteratorHelper(M,i){var t;if("undefined"==typeof Symbol||null==M[Symbol.iterator]){if(Array.isArray(M)||(t=_unsupportedIterableToArray(M))||i&&M&&"number"==typeof M.length){t&&(M=t);var e=0,D=function(){};return{s:D,n:function(){return e>=M.length?{done:!0}:{done:!1,value:M[e++]}},e:function(M){throw M},f:D}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var g,N=!0,n=!1;return{s:function(){t=M[Symbol.iterator]()},n:function(){var M=t.next();return N=M.done,M},e:function(M){n=!0,g=M},f:function(){try{N||null==t.return||t.return()}finally{if(n)throw g}}}}function _unsupportedIterableToArray(M,i){if(M){if("string"==typeof M)return _arrayLikeToArray(M,i);var t=Object.prototype.toString.call(M).slice(8,-1);return"Object"===t&&M.constructor&&(t=M.constructor.name),"Map"===t||"Set"===t?Array.from(M):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(M,i):void 0}}function _arrayLikeToArray(M,i){(null==i||i>M.length)&&(i=M.length);for(var t=0,e=new Array(i);t<i;t++)e[t]=M[t];return e}function _classCallCheck(M,i){if(!(M instanceof i))throw new TypeError("Cannot call a class as a function")}function _defineProperties(M,i){for(var t=0;t<i.length;t++){var e=i[t];e.enumerable=e.enumerable||!1,e.configurable=!0,"value"in e&&(e.writable=!0),Object.defineProperty(M,e.key,e)}}function _createClass(M,i,t){return i&&_defineProperties(M.prototype,i),t&&_defineProperties(M,t),M}var icon={blank:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjI0cHgiIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPg0KICAgIDx0aXRsZT5ibGFuazwvdGl0bGU+DQogICAgPGcgaWQ9ImJsYW5rIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4NCiAgICAgICAgPHBhdGggZD0iTTExLjA0NDAxNDEsMS4zNjcyMTIxNyBMNy45OTAyNTM2MSw3LjU1Mzg5NTc5IEwxLjE2MjcwNzcyLDguNTQ2NDAxNSBDMC45MzA3MDc2MTgsOC41ODAxMTMwOSAwLjcxNjI5MDcwNSw4LjY4OTM2Mzk2IDAuNTUyNjUxMjE3LDguODU3MjQwODIgTDAuNDY1MjYzMjc2LDguOTU4NzkwNTkgQzAuMTQ1NDc5MzEyLDkuMzgxMDkyODMgMC4xODI3NjQ1MjUsOS45ODUzMzE0MyAwLjU3MTkxODczNywxMC4zNjQ2NjMgTDUuNTEyMTA5NTYsMTUuMTgwOTI0NSBMNC4zNDYyNDE5MywyMS45ODA4MzU0IEM0LjMwNjYxMTU4LDIyLjIxMTg5ODEgNC4zNDQyNTY4NywyMi40NDk1ODEgNC40NTMzNDk4NiwyMi42NTcwODgyIEw0LjUxNzU0Nzg4LDIyLjc2Mzc4ODMgQzQuODE4NzU3NTUsMjMuMjA0Mzk1OSA1LjQwOTA2MzI5LDIzLjM1ODk3NTggNS44OTI5NDc1NywyMy4xMDQ1ODI4IEwxMS45OTk5NTAxLDE5Ljg5MzM5MzYgTDE4LjEwNjkxNCwyMy4xMDQ1ODI4IEMxOC4zMTQ0MjEyLDIzLjIxMzY3NTggMTguNTUyMTA0MiwyMy4yNTEzMjExIDE4Ljc4MzE2NjgsMjMuMjExNjkwNyBMMTguODk2NTg5OCwyMy4xODU4OTA3IEMxOS40MTMyMTQ3LDIzLjAzODU2MjIgMTkuNzQ2NTA3MiwyMi41MjI0MTE2IDE5LjY1MzYxOTYsMjEuOTgwODM1NCBMMTguNDg2NzY2MiwxNS4xODA5MjQ1IEwyMy40Mjc5NDI4LDEwLjM2NDY2MyBDMjMuNTk1ODE5NywxMC4yMDEwMjM1IDIzLjcwNTA3MDYsOS45ODY2MDY2MyAyMy43Mzg3ODIxLDkuNzU0NjA2NTMgTDIzLjc0OTI5NDUsOS42Mzg3NjIyNiBDMjMuNzY4ODIyNiw5LjEwMTg5NTc4IDIzLjM4MDkyNzMsOC42MjU0MTY0MSAyMi44MzcxNTM4LDguNTQ2NDAxNSBMMTYuMDA4NjIyMiw3LjU1Mzg5NTc5IEwxMi45NTU4NDc0LDEuMzY3MjEyMTcgQzEyLjg1MjA5MzgsMS4xNTY5ODQ0MSAxMi42ODE5MzE2LDAuOTg2ODIyMTgzIDEyLjQ3MTcwMzksMC44ODMwNjg1ODIgQzExLjk0Mzc2NTcsMC42MjI1MTU1MDggMTEuMzA0NTY3MiwwLjgzOTI3Mzk3NCAxMS4wNDQwMTQxLDEuMzY3MjEyMTcgWiBNMTEuOTk4OTI1NywyLjkwMTg2OTI3IEwxNC42OTQ2ODk3LDguMzYyNjg3MDIgTDE0Ljc2MjI4ODQsOC40ODI3MjYyMyBDMTQuOTU4Njc0Nyw4Ljc5MDkwMjk5IDE1LjI4MDY1MDksOS4wMDExOTA0IDE1LjY0NjczMDEsOS4wNTQzODQ4MyBMMjEuNjcxNzgwNiw5LjkyOTU5NDg2IEwxNy4zMTIxODI3LDE0LjE4MDEyMDkgTDE3LjIxODkwNzgsMTQuMjgxNTA1MyBDMTYuOTg2NTAxLDE0LjU2MzUxMTYgMTYuODg2MDAxOSwxNC45MzQ3MTE1IDE2Ljk0ODUzNTcsMTUuMjk5MzExNSBMMTcuOTc2NTkwMiwyMS4yOTk5NjMxIEwxMi41ODgzMjQxLDE4LjQ2NzE5MDYgTDEyLjQ0NzEwNzksMTguNDAzNjQ2NSBDMTIuMTExMDY3OCwxOC4yNzY1NTgyIDExLjczMzg1MjYsMTguMjk3NzM5NiAxMS40MTE1Mzc1LDE4LjQ2NzE5MDYgTDYuMDIyMjg1NTYsMjEuMjk5OTYzMSBMNy4wNTEzMjU5MiwxNS4yOTkzMTE1IEw3LjA2NzE5NDcyLDE1LjE2MjQ2NDIgQzcuMDg5NDU2NjIsMTQuNzk3NzExIDYuOTUyNTc2MjcsMTQuNDM4MzMyMSA2LjY4NzY3ODg2LDE0LjE4MDEyMDkgTDIuMzI3MDk1MTUsOS45Mjk1OTQ4NiBMOC4zNTMxMzE0OCw5LjA1NDM4NDgzIEM4Ljc2NDk3MDU5LDguOTk0NTQxMSA5LjEyMDk5MTc5LDguNzM1ODc2NTYgOS4zMDUxNzE4NCw4LjM2MjY4NzAyIEwxMS45OTg5MjU3LDIuOTAxODY5MjcgWiIgZmlsbD0iI0ZBREIzNyIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+DQogICAgPC9nPg0KPC9zdmc+",active:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjI0cHgiIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPg0KICAgIDx0aXRsZT5hY3RpdmU8L3RpdGxlPg0KICAgIDxnIGlkPSJhY3RpdmUiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPg0KICAgICAgICA8cGF0aCBkPSJNMTEuMDQ0MDE0MSwxLjM2NzIxMjE3IEw3Ljk5MDI1MzYxLDcuNTUzODk1NzkgTDEuMTYyNzA3NzIsOC41NDY0MDE1IEMwLjkzMDcwNzYxOCw4LjU4MDExMzA5IDAuNzE2MjkwNzA1LDguNjg5MzYzOTYgMC41NTI2NTEyMTcsOC44NTcyNDA4MiBMMC40NjUyNjMyNzYsOC45NTg3OTA1OSBDMC4xNDU0NzkzMTIsOS4zODEwOTI4MyAwLjE4Mjc2NDUyNSw5Ljk4NTMzMTQzIDAuNTcxOTE4NzM3LDEwLjM2NDY2MyBMNS41MTIxMDk1NiwxNS4xODA5MjQ1IEw0LjM0NjI0MTkzLDIxLjk4MDgzNTQgQzQuMzA2NjExNTgsMjIuMjExODk4MSA0LjM0NDI1Njg3LDIyLjQ0OTU4MSA0LjQ1MzM0OTg2LDIyLjY1NzA4ODIgTDQuNTE3NTQ3ODgsMjIuNzYzNzg4MyBDNC44MTg3NTc1NSwyMy4yMDQzOTU5IDUuNDA5MDYzMjksMjMuMzU4OTc1OCA1Ljg5Mjk0NzU3LDIzLjEwNDU4MjggTDExLjk5OTk1MDEsMTkuODkzMzkzNiBMMTguMTA2OTE0LDIzLjEwNDU4MjggQzE4LjMxNDQyMTIsMjMuMjEzNjc1OCAxOC41NTIxMDQyLDIzLjI1MTMyMTEgMTguNzgzMTY2OCwyMy4yMTE2OTA3IEwxOC44OTY1ODk4LDIzLjE4NTg5MDcgQzE5LjQxMzIxNDcsMjMuMDM4NTYyMiAxOS43NDY1MDcyLDIyLjUyMjQxMTYgMTkuNjUzNjE5NiwyMS45ODA4MzU0IEwxOC40ODY3NjYyLDE1LjE4MDkyNDUgTDIzLjQyNzk0MjgsMTAuMzY0NjYzIEMyMy41OTU4MTk3LDEwLjIwMTAyMzUgMjMuNzA1MDcwNiw5Ljk4NjYwNjYzIDIzLjczODc4MjEsOS43NTQ2MDY1MyBMMjMuNzQ5Mjk0NSw5LjYzODc2MjI2IEMyMy43Njg4MjI2LDkuMTAxODk1NzggMjMuMzgwOTI3Myw4LjYyNTQxNjQxIDIyLjgzNzE1MzgsOC41NDY0MDE1IEwxNi4wMDg2MjIyLDcuNTUzODk1NzkgTDEyLjk1NTg0NzQsMS4zNjcyMTIxNyBDMTIuODUyMDkzOCwxLjE1Njk4NDQxIDEyLjY4MTkzMTYsMC45ODY4MjIxODMgMTIuNDcxNzAzOSwwLjg4MzA2ODU4MiBDMTEuOTQzNzY1NywwLjYyMjUxNTUwOCAxMS4zMDQ1NjcyLDAuODM5MjczOTc0IDExLjA0NDAxNDEsMS4zNjcyMTIxNyBaIiBmaWxsPSIjRkFEQjM3IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD4NCiAgICA8L2c+DQo8L3N2Zz4=",hover:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgd2lkdGg9IjI0cHgiIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPg0KICAgIDx0aXRsZT5ob3ZlcjwvdGl0bGU+DQogICAgPGcgaWQ9ImhvdmVyIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4NCiAgICAgICAgPHBhdGggZD0iTTExLjA0NDAxNDEsMS4zNjcyMTIxNyBMNy45OTAyNTM2MSw3LjU1Mzg5NTc5IEwxLjE2MjcwNzcyLDguNTQ2NDAxNSBDMC45MzA3MDc2MTgsOC41ODAxMTMwOSAwLjcxNjI5MDcwNSw4LjY4OTM2Mzk2IDAuNTUyNjUxMjE3LDguODU3MjQwODIgTDAuNDY1MjYzMjc2LDguOTU4NzkwNTkgQzAuMTQ1NDc5MzEyLDkuMzgxMDkyODMgMC4xODI3NjQ1MjUsOS45ODUzMzE0MyAwLjU3MTkxODczNywxMC4zNjQ2NjMgTDUuNTEyMTA5NTYsMTUuMTgwOTI0NSBMNC4zNDYyNDE5MywyMS45ODA4MzU0IEM0LjMwNjYxMTU4LDIyLjIxMTg5ODEgNC4zNDQyNTY4NywyMi40NDk1ODEgNC40NTMzNDk4NiwyMi42NTcwODgyIEw0LjUxNzU0Nzg4LDIyLjc2Mzc4ODMgQzQuODE4NzU3NTUsMjMuMjA0Mzk1OSA1LjQwOTA2MzI5LDIzLjM1ODk3NTggNS44OTI5NDc1NywyMy4xMDQ1ODI4IEwxMS45OTk5NTAxLDE5Ljg5MzM5MzYgTDE4LjEwNjkxNCwyMy4xMDQ1ODI4IEMxOC4zMTQ0MjEyLDIzLjIxMzY3NTggMTguNTUyMTA0MiwyMy4yNTEzMjExIDE4Ljc4MzE2NjgsMjMuMjExNjkwNyBMMTguODk2NTg5OCwyMy4xODU4OTA3IEMxOS40MTMyMTQ3LDIzLjAzODU2MjIgMTkuNzQ2NTA3MiwyMi41MjI0MTE2IDE5LjY1MzYxOTYsMjEuOTgwODM1NCBMMTguNDg2NzY2MiwxNS4xODA5MjQ1IEwyMy40Mjc5NDI4LDEwLjM2NDY2MyBDMjMuNTk1ODE5NywxMC4yMDEwMjM1IDIzLjcwNTA3MDYsOS45ODY2MDY2MyAyMy43Mzg3ODIxLDkuNzU0NjA2NTMgTDIzLjc0OTI5NDUsOS42Mzg3NjIyNiBDMjMuNzY4ODIyNiw5LjEwMTg5NTc4IDIzLjM4MDkyNzMsOC42MjU0MTY0MSAyMi44MzcxNTM4LDguNTQ2NDAxNSBMMTYuMDA4NjIyMiw3LjU1Mzg5NTc5IEwxMi45NTU4NDc0LDEuMzY3MjEyMTcgQzEyLjg1MjA5MzgsMS4xNTY5ODQ0MSAxMi42ODE5MzE2LDAuOTg2ODIyMTgzIDEyLjQ3MTcwMzksMC44ODMwNjg1ODIgQzExLjk0Mzc2NTcsMC42MjI1MTU1MDggMTEuMzA0NTY3MiwwLjgzOTI3Mzk3NCAxMS4wNDQwMTQxLDEuMzY3MjEyMTcgWiIgZmlsbD0iI0ZGOTUwMCIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+DQogICAgPC9nPg0KPC9zdmc+"},Starry=function(){function M(){var i=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return _classCallCheck(this,M),i?!!this.setConfig(t)&&(this.domElement=i,void this.build()):(console.error("Starry: Missing DOM element!"),!1)}return _createClass(M,[{key:"setConfig",value:function(M){if(this.config=M,void 0===this.config.stars&&(this.config.stars=5),void 0===this.config.multiRating&&(this.config.multiRating=!0),void 0===this.config.beginWith&&(this.config.beginWith=0),void 0===this.config.readOnly&&(this.config.readOnly=!1),void 0===this.config.staticActiveRating&&(this.config.staticActiveRating=!0),void 0===this.config.setStarsAfterRating&&(this.config.setStarsAfterRating=!0),void 0!==this.config.labels&&Array.isArray(this.config.labels)||(this.config.labels=!1),void 0===this.config.onRate&&(this.config.onRate=function(M){return!0}),void 0===this.currentRating&&(this.currentRating=0),void 0!==this.config.icons&&void 0!==this.config.icons.blank&&void 0!==this.config.icons.hover&&void 0!==this.config.icons.active||(this.config.icons=icon),this.config.beginWith<0&&(this.config.beginWith=0),this.config.beginWith>100&&(this.config.beginWith=100),void 0===this.config.name){if(!1===this.config.multiRating)return console.error("Starry: Give your Starry star rating elements with multi rating a name!"),!1;this.config.name="Starry_"+Date.now()}return!0}},{key:"checkCookie",value:function(){var M,i=document.cookie,t=_createForOfIteratorHelper(i=i.split(";"));try{for(t.s();!(M=t.n()).done;){M.value.trim()==="Starry_"+this.config.name+"=true"&&(this.config.readOnly=!0)}}catch(M){t.e(M)}finally{t.f()}}},{key:"setCookie",value:function(){var M=new Date;M.setTime(M.getTime()+31104e7),document.cookie="Starry_"+this.config.name+"=true; expires="+M.toGMTString()+"; sameSite=Lax",this.config.multiRating=!1,this.config.readOnly=!0}},{key:"build",value:function(){this.clear(),!1===this.config.multiRating&&this.checkCookie();var M=document.createElement("div");M.classList.add("Starry"),M.setAttribute("data-name",this.config.name);var i=document.createElement("div");i.classList.add("Starry-blank");var t,e=_createForOfIteratorHelper(this.getStarRow("blank"));try{for(e.s();!(t=e.n()).done;){var D=t.value;i.appendChild(D)}}catch(M){e.e(M)}finally{e.f()}var g=document.createElement("div");g.classList.add("Starry-active"),!0!==this.config.staticActiveRating&&!0!==this.config.readOnly||g.classList.add("Starry-static"),g.style.width="".concat(this.config.beginWith,"%");var N,n=_createForOfIteratorHelper(this.getStarRow("active"));try{for(n.s();!(N=n.n()).done;){D=N.value;g.appendChild(D)}}catch(M){n.e(M)}finally{n.f()}if(!1===this.config.readOnly){var c=document.createElement("div");c.classList.add("Starry-hover");var r,a=_createForOfIteratorHelper(this.getStarRow("hover"));try{for(a.s();!(r=a.n()).done;){D=r.value;c.appendChild(D)}}catch(M){a.e(M)}finally{a.f()}}M.appendChild(i),M.appendChild(g),!1===this.config.readOnly&&M.appendChild(c),this.domElement.appendChild(M),void 0!==this.config.onRender&&"function"==typeof this.config.onRender&&this.config.onRender()}},{key:"getStarRow",value:function(M){for(var i=this,t=[],e=this.config.stars;e>0;e--){var D=document.createElement("div");D.classList.add("Starry-star"),"hover"===M&&(D.setAttribute("data-value",e),Array.isArray(this.config.labels)&&(D.setAttribute("title",this.config.labels[e-1]),D.setAttribute("data-label",this.config.labels[e-1]),D.setAttribute("data-tooltip",this.config.labels[e-1])),D.addEventListener("click",function(M){var t=M.target;t.classList.contains("Starry-star")||(t=M.target.closest(".Starry-star")),!1!==i.config.onRate(t.getAttribute("data-value"))&&(i.currentRating=parseInt(t.getAttribute("data-value")),!0===i.config.setStarsAfterRating&&(i.config.beginWith=i.currentRating/i.config.stars*100)),!1===i.config.multiRating&&i.setCookie(),i.build()}));var g=document.createElement("img");g.setAttribute("src",this.config.icons[M]),D.appendChild(g),t.push(D)}return t}},{key:"clear",value:function(){void 0!==this.config.onClear&&"function"==typeof this.config.onClear&&this.config.onClear(),this.domElement.innerHTML=""}},{key:"update",value:function(M){this.setConfig(Object.assign({},this.config,M)),this.build()}},{key:"getCurrentRating",value:function(){return this.currentRating}},{key:"getConfig",value:function(){return this.config}},{key:"on",value:function(M,i){switch(M){case"rate":this.config.onRate=i;break;case"render":this.config.onRender=i;break;case"clear":this.config.onClear=i;break;default:return void console.error("Starry: Event '".concat(M,"' doesn't exists!"))}}}]),M}();