/*
* ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else {
var a = factory();
for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
}
})(self, function() {
return /******/ (function() { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "./libs/rateyo/rateyo.js":
/*!*******************************!*\
!*** ./libs/rateyo/rateyo.js ***!
\*******************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var rateyo_src_jquery_rateyo__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rateyo/src/jquery.rateyo */ \"./node_modules/rateyo/src/jquery.rateyo.js\");\n/* harmony import */ var rateyo_src_jquery_rateyo__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(rateyo_src_jquery_rateyo__WEBPACK_IMPORTED_MODULE_0__);\n\n\n//# sourceURL=webpack://Sneat/./libs/rateyo/rateyo.js?");
/***/ }),
/***/ "./node_modules/rateyo/src/jquery.rateyo.js":
/*!**************************************************!*\
!*** ./node_modules/rateyo/src/jquery.rateyo.js ***!
\**************************************************/
/***/ (function() {
eval("/*****\n* rateyo - v2.3.5\n* http://prrashi.github.io/rateyo/\n* Copyright (c) 2014 Prashanth Pamidi; Licensed MIT\n*****/\n\n;(function ($) {\n \"use strict\";\n\n // The basic svg string required to generate stars\n var BASICSTAR = \"\"+\n \"\";\n\n // The Default values of different options available in the Plugin\n var DEFAULTS = {\n\n starWidth : \"32px\",\n normalFill: \"gray\",\n ratedFill : \"#f39c12\",\n numStars : 5,\n maxValue : 5,\n precision : 1,\n rating : 0,\n fullStar : false,\n halfStar : false,\n readOnly : false,\n spacing : \"0px\",\n rtl : false,\n multiColor: null,\n onInit : null,\n onChange : null,\n onSet : null,\n starSvg : null\n };\n\n //Default colors for multi-color rating\n var MULTICOLOR_OPTIONS = {\n\n startColor: \"#c0392b\", //red\n endColor : \"#f1c40f\" //yellow\n };\n\n // http://stackoverflow.com/questions/11381673/detecting-a-mobile-browser\n function isMobileBrowser () {\n var check = false;\n /* jshint ignore:start */\n (function(a){if(/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0,4)))check = true})(navigator.userAgent||navigator.vendor||window.opera);\n /* jshint ignore:end */\n return check;\n }\n\n function checkPrecision (value, minValue, maxValue) {\n\n /*\n * This function removes the unnecessary precision, at Min and Max Values\n */\n\n // Its like comparing 0.0 with 0, which is true\n if (value === minValue) {\n\n value = minValue;\n }\n else if(value === maxValue) {\n\n value = maxValue;\n }\n\n return value;\n }\n\n function checkBounds (value, minValue, maxValue) {\n\n /*\n * Check if the value is between min and max values, if not, throw an error\n */\n\n var isValid = value >= minValue && value <= maxValue;\n\n if(!isValid){\n\n throw Error(\"Invalid Rating, expected value between \"+ minValue +\n \" and \" + maxValue);\n }\n\n return value;\n }\n\n function isDefined(value) {\n\n // Better way to check if a variable is defined or not\n return typeof value !== \"undefined\";\n }\n\n // Regex to match Colors in Hex Format like #FF00FF\n var hexRegex = /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i;\n\n var hexToRGB = function (hex) {\n\n /*\n * Extracts and returns the Red, Blue, Green Channel values,\n * in the form of decimals\n */\n\n if (!hexRegex.test(hex)) {\n\n return null;\n }\n\n var hexValues = hexRegex.exec(hex),\n r = parseInt(hexValues[1], 16),\n g = parseInt(hexValues[2], 16),\n b = parseInt(hexValues[3], 16);\n\n return {r:r, g:g, b:b};\n };\n\n function getChannelValue(startVal, endVal, percent) {\n\n /*\n * Returns a value between `startVal` and `endVal` based on the percent\n */\n\n var newVal = (endVal - startVal)*(percent/100);\n\n newVal = Math.round(startVal + newVal).toString(16);\n\n if (newVal.length === 1) {\n\n newVal = \"0\" + newVal;\n }\n\n return newVal;\n }\n\n function getColor (startColor, endColor, percent) {\n\n /*\n * Given the percentage( `percent` ) of `endColor` to be mixed\n * with the `startColor`, returns the mixed color.\n * Colors should be only in Hex Format\n */\n\n if (!startColor || !endColor) {\n\n return null;\n }\n\n percent = isDefined(percent)? percent : 0;\n\n startColor = hexToRGB(startColor);\n endColor = hexToRGB(endColor);\n\n var r = getChannelValue(startColor.r, endColor.r, percent),\n b = getChannelValue(startColor.b, endColor.b, percent),\n g = getChannelValue(startColor.g, endColor.g, percent);\n\n return \"#\" + r + g + b;\n }\n\n function RateYo ($node, options) {\n\n /*\n * The Contructor, whose instances are used by plugin itself\n */\n\n // Storing the HTML element as a property, for future access\n this.node = $node.get(0);\n\n var that = this;\n\n // Remove any stuff that is present inside the container, and add the plugin class\n $node.empty().addClass(\"jq-ry-container\");\n\n /*\n * Basically the plugin displays the rating using two rows of stars lying one above\n * the other, the row that is on the top represents the actual rating, and the one\n * behind acts just like a background.\n *\n * `$groupWrapper`: is an element that wraps both the rows\n * `$normalGroup`: is the container for row of stars thats behind and\n * acts as background\n * `$ratedGroup`: is the container for row of stars that display the actual rating.\n *\n * The rating is displayed by adjusting the width of `$ratedGroup`\n */\n var $groupWrapper = $(\"
\").addClass(\"jq-ry-group-wrapper\")\n .appendTo($node);\n\n var $normalGroup = $(\"\").addClass(\"jq-ry-normal-group\")\n .addClass(\"jq-ry-group\")\n .appendTo($groupWrapper);\n\n var $ratedGroup = $(\"\").addClass(\"jq-ry-rated-group\")\n .addClass(\"jq-ry-group\")\n .appendTo($groupWrapper);\n\n /*\n * Variable `step`: store the value of the rating for each star\n * eg: if `maxValue` is 5 and `numStars` is 5, value of each star\n * is 1.\n * Variable `starWidth`: stores the decimal value of width of star in units of px\n * Variable `percentOfStar`: stores the percentage of width each star takes w.r.t\n * the container\n * Variable `spacing`: stores the decimal value of the spacing between stars\n * in the units of px\n * Variable `percentOfSpacing`: stores the percentage of width of the spacing\n * between stars w.r.t the container\n */\n var step, starWidth, percentOfStar, spacing,\n percentOfSpacing, containerWidth, minValue = 0;\n\n /*\n * `currentRating` contains rating that is being displayed at the latest point of\n * time.\n *\n * When ever you hover over the plugin UI, the rating value changes\n * according to the place where you point the cursor, currentRating contains\n * the current value of rating that is being shown in the UI\n */\n var currentRating = options.rating;\n\n // A flag to store if the plugin is already being displayed in the UI\n var isInitialized = false;\n\n function showRating (ratingVal) {\n\n /*\n * The function is responsible for displaying the rating by changing\n * the width of `$ratedGroup`\n */\n\n if (!isDefined(ratingVal)) {\n\n ratingVal = options.rating;\n }\n\n // Storing the value that is being shown in `currentRating`.\n currentRating = ratingVal;\n\n var numStarsToShow = ratingVal/step;\n\n // calculating the percentage of width of $ratedGroup with respect to its parent\n var percent = numStarsToShow*percentOfStar;\n\n if (numStarsToShow > 1) {\n\n // adding the percentage of space that is taken by the gap the stars\n percent += (Math.ceil(numStarsToShow) - 1)*percentOfSpacing;\n }\n\n setRatedFill(options.ratedFill);\n\n percent = options.rtl ? 100 - percent : percent;\n\n if (percent < 0) {\n\n percent = 0;\n } else if (percent > 100) {\n\n percent = 100;\n }\n\n $ratedGroup.css(\"width\", percent + \"%\");\n }\n\n function setContainerWidth () {\n\n /*\n * Set the width of the `this.node` based on the width of each star and\n * the space between them\n */\n\n containerWidth = starWidth*options.numStars + spacing*(options.numStars - 1);\n\n percentOfStar = (starWidth/containerWidth)*100;\n\n percentOfSpacing = (spacing/containerWidth)*100;\n\n $node.width(containerWidth);\n\n showRating();\n }\n\n function setStarWidth (newWidth) {\n\n /*\n * Set the width and height of each SVG star, called whenever one changes the\n * `starWidth` option\n */\n\n // The width and height of the star should be the same\n var starHeight = options.starWidth = newWidth;\n\n starWidth = window.parseFloat(options.starWidth.replace(\"px\", \"\"));\n\n $normalGroup.find(\"svg\")\n .attr({width : options.starWidth,\n height: starHeight});\n\n $ratedGroup.find(\"svg\")\n .attr({width : options.starWidth,\n height: starHeight});\n\n setContainerWidth();\n\n return $node;\n }\n\n function setSpacing (newSpacing) {\n\n /*\n * Set spacing between the SVG stars, called whenever one changes\n * the `spacing` option\n */\n\n options.spacing = newSpacing;\n\n spacing = parseFloat(options.spacing.replace(\"px\", \"\"));\n\n $normalGroup.find(\"svg:not(:first-child)\")\n .css({\"margin-left\": newSpacing});\n\n $ratedGroup.find(\"svg:not(:first-child)\")\n .css({\"margin-left\": newSpacing});\n\n setContainerWidth();\n\n return $node;\n }\n\n function setNormalFill (newFill) {\n\n /*\n * Set the background fill of the Stars, called whenever one changes the\n * `normalFill` option\n */\n\n options.normalFill = newFill;\n\n var $svgs = (options.rtl ? $ratedGroup : $normalGroup).find(\"svg\");\n\n $svgs.attr({fill: options.normalFill});\n\n return $node;\n }\n\n /*\n * Store the recent `ratedFill` option in a variable\n * so that if multiColor is unset, we can use the perviously set `ratedFill`\n * from this variable\n */\n var ratedFill = options.ratedFill;\n\n function setRatedFill (newFill) {\n\n /*\n * Set ratedFill of the stars, called when one changes the `ratedFill` option\n */\n\n /*\n * If `multiColor` option is set, `newFill` variable is dynamically set\n * based on the rating, what ever set as parameter will be discarded\n */\n if (options.multiColor) {\n\n var ratingDiff = currentRating - minValue,\n percentCovered = (ratingDiff/options.maxValue)*100;\n\n var colorOpts = options.multiColor || {},\n startColor = colorOpts.startColor || MULTICOLOR_OPTIONS.startColor,\n endColor = colorOpts.endColor || MULTICOLOR_OPTIONS.endColor;\n\n newFill = getColor(startColor, endColor, percentCovered);\n } else {\n\n ratedFill = newFill;\n }\n\n options.ratedFill = newFill;\n\n var $svgs = (options.rtl ? $normalGroup : $ratedGroup).find(\"svg\");\n\n $svgs.attr({fill: options.ratedFill});\n\n return $node;\n }\n\n function setRtl (newValue) {\n\n newValue = !!newValue;\n\n options.rtl = newValue;\n\n setNormalFill(options.normalFill);\n showRating();\n }\n\n function setMultiColor (colorOptions) {\n\n /*\n * called whenever one changes the `multiColor` option\n */\n\n options.multiColor = colorOptions;\n\n // set the recently set `ratedFill` option, if multiColor Options are unset\n setRatedFill(colorOptions ? colorOptions : ratedFill);\n }\n\n function setNumStars (newValue) {\n\n /*\n * Set the number of stars to use to display the rating, called whenever one\n * changes the `numStars` option\n */\n\n options.numStars = newValue;\n\n step = options.maxValue/options.numStars;\n\n $normalGroup.empty();\n $ratedGroup.empty();\n\n for (var i=0; i newValue) {\n\n setRating(newValue);\n }\n\n showRating();\n\n return $node;\n }\n\n function setPrecision (newValue) {\n\n /*\n * Set the precision of the rating value, called if one changes the\n * `precision` option\n */\n\n options.precision = newValue;\n\n setRating(options.rating);\n\n return $node;\n }\n\n function setHalfStar (newValue) {\n\n /*\n * This function will be called if one changes the `halfStar` option\n */\n\n options.halfStar = newValue;\n\n return $node;\n }\n\n function setFullStar (newValue) {\n\n /*\n * This function will be called if one changes the `fullStar` option\n */\n\n options.fullStar = newValue;\n\n return $node;\n }\n\n function round (value) {\n\n /*\n * Rounds the value of rating if `halfStar` or `fullStar` options are chosen\n */\n\n var remainder = value%step,\n halfStep = step/2,\n isHalfStar = options.halfStar,\n isFullStar = options.fullStar;\n\n if (!isFullStar && !isHalfStar) {\n\n return value;\n }\n\n if (isFullStar || (isHalfStar && remainder > halfStep)) {\n\n value += step - remainder;\n } else {\n\n value = value - remainder;\n\n if (remainder > 0) {\n\n value += halfStep;\n }\n }\n\n return value;\n }\n\n function calculateRating (e) {\n\n /*\n * Calculates and returns the rating based on the position of cursor w.r.t the\n * plugin container\n */\n\n var position = $normalGroup.offset(),\n nodeStartX = position.left,\n nodeEndX = nodeStartX + $normalGroup.width();\n\n var maxValue = options.maxValue;\n\n // The x-coordinate(position) of the mouse pointer w.r.t page\n var pageX = e.pageX;\n\n var calculatedRating = 0;\n\n // If the mouse pointer is to the left of the container\n if(pageX < nodeStartX) {\n\n calculatedRating = minValue;\n }else if (pageX > nodeEndX) { // If the mouse pointer is right of the container\n\n calculatedRating = maxValue;\n }else { // If the mouse pointer is inside the continer\n\n /*\n * The fraction of width covered by the pointer w.r.t to the total width\n * of the container.\n */\n var calcPrcnt = ((pageX - nodeStartX)/(nodeEndX - nodeStartX));\n\n if (spacing > 0) {\n\n /*\n * If there is spacing between stars, take the percentage of width covered\n * and subtract the percentage of width covered by stars and spacing, to find\n * how many stars are covered, the number of stars covered is the rating\n *\n * TODO: I strongly feel that this logic can be improved!, Please help!\n */\n calcPrcnt *= 100;\n\n var remPrcnt = calcPrcnt;\n\n while (remPrcnt > 0) {\n\n if (remPrcnt > percentOfStar) {\n\n calculatedRating += step;\n remPrcnt -= (percentOfStar + percentOfSpacing);\n } else {\n\n calculatedRating += remPrcnt/percentOfStar*step;\n remPrcnt = 0;\n }\n }\n } else {\n\n /*\n * If there is not spacing between stars, the fraction of width covered per\n * `maxValue` is the rating\n */\n calculatedRating = calcPrcnt * (options.maxValue);\n }\n\n // Round the rating if `halfStar` or `fullStar` options are chosen\n calculatedRating = round(calculatedRating);\n }\n\n if (options.rtl) {\n\n calculatedRating = maxValue - calculatedRating;\n }\n\n return parseFloat(calculatedRating);\n }\n\n function setReadOnly (newValue) {\n\n /*\n * UnBinds mouse event handlers, called when whenever one changes the\n * `readOnly` option\n */\n\n options.readOnly = newValue;\n\n $node.attr(\"readonly\", true);\n\n unbindEvents();\n\n if (!newValue) {\n\n $node.removeAttr(\"readonly\");\n\n bindEvents();\n }\n\n return $node;\n }\n\n function setRating (newValue) {\n\n /*\n * Sets the rating of the Plugin, Called when option `rating` is changed\n * or, when `rating` method is called\n */\n\n var rating = newValue;\n\n var maxValue = options.maxValue;\n\n if (typeof rating === \"string\") {\n\n // If rating is given in percentage, maxValue should be 100\n if (rating[rating.length - 1] === \"%\") {\n\n rating = rating.substr(0, rating.length - 1);\n maxValue = 100;\n\n setMaxValue(maxValue);\n }\n\n rating = parseFloat(rating);\n }\n\n checkBounds(rating, minValue, maxValue);\n\n rating = parseFloat(rating.toFixed(options.precision));\n\n checkPrecision(parseFloat(rating), minValue, maxValue);\n\n options.rating = rating;\n\n showRating();\n\n if (isInitialized) {\n\n $node.trigger(\"rateyo.set\", {rating: rating});\n }\n\n return $node;\n }\n\n function setOnInit (method) {\n\n /*\n * set what method to be called on Initialization\n */\n\n options.onInit = method;\n\n return $node;\n }\n\n function setOnSet (method) {\n\n /*\n * set what method to be called when rating is set\n */\n\n options.onSet = method;\n\n return $node;\n }\n\n function setOnChange (method) {\n\n /*\n * set what method to be called rating in the UI is changed\n */\n\n options.onChange = method;\n\n return $node;\n }\n\n this.rating = function (newValue) {\n\n /*\n * rating getter/setter\n */\n\n if (!isDefined(newValue)) {\n\n return options.rating;\n }\n\n setRating(newValue);\n\n return $node;\n };\n\n this.destroy = function () {\n\n /*\n * Removes the Rating UI by clearing the content, and removing the custom classes\n */\n\n if (!options.readOnly) {\n\n unbindEvents();\n }\n\n RateYo.prototype.collection = deleteInstance($node.get(0),\n this.collection);\n\n $node.removeClass(\"jq-ry-container\").children().remove();\n\n return $node;\n };\n\n this.method = function (methodName) {\n\n /*\n * Method to call the methods of RateYo Instance\n */\n\n if (!methodName) {\n\n throw Error(\"Method name not specified!\");\n }\n\n if (!isDefined(this[methodName])) {\n\n throw Error(\"Method \" + methodName + \" doesn't exist!\");\n }\n\n var args = Array.prototype.slice.apply(arguments, []),\n params = args.slice(1),\n method = this[methodName];\n\n return method.apply(this, params);\n };\n\n this.option = function (optionName, param) {\n\n /*\n * Method to get/set Options\n */\n\n if (!isDefined(optionName)) {\n\n return options;\n }\n\n var method;\n\n switch (optionName) {\n\n case \"starWidth\":\n\n method = setStarWidth;\n break;\n case \"numStars\":\n\n method = setNumStars;\n break;\n case \"normalFill\":\n\n method = setNormalFill;\n break;\n case \"ratedFill\":\n\n method = setRatedFill;\n break;\n case \"multiColor\":\n\n method = setMultiColor;\n break;\n case \"maxValue\":\n\n method = setMaxValue;\n break;\n case \"precision\":\n\n method = setPrecision;\n break;\n case \"rating\":\n\n method = setRating;\n break;\n case \"halfStar\":\n\n method = setHalfStar;\n break;\n case \"fullStar\":\n\n method = setFullStar;\n break;\n case \"readOnly\":\n\n method = setReadOnly;\n break;\n case \"spacing\":\n\n method = setSpacing;\n break;\n case \"rtl\":\n\n method = setRtl;\n break;\n case \"onInit\":\n\n method = setOnInit;\n break;\n case \"onSet\":\n\n method = setOnSet;\n break;\n case \"onChange\":\n\n method = setOnChange;\n break;\n default:\n\n throw Error(\"No such option as \" + optionName);\n }\n\n return isDefined(param) ? method(param) : options[optionName];\n };\n\n function onMouseEnter (e) {\n\n /*\n * If the Mouse Pointer is inside the container, calculate and show the rating\n * in UI\n */\n\n var rating = calculateRating(e).toFixed(options.precision);\n\n var maxValue = options.maxValue;\n\n rating = checkPrecision(parseFloat(rating), minValue, maxValue);\n\n showRating(rating);\n\n $node.trigger(\"rateyo.change\", {rating: rating});\n }\n\n function onMouseLeave () {\n if (isMobileBrowser()) {\n return;\n }\n\n /*\n * If mouse leaves, revert the rating in UI to previously set rating,\n * when empty value is passed to showRating, it will take the previously set\n * rating\n */\n\n showRating();\n\n $node.trigger(\"rateyo.change\", {rating: options.rating});\n }\n\n function onMouseClick (e) {\n\n /*\n * On clicking the mouse inside the container, calculate and set the rating\n */\n\n var resultantRating = calculateRating(e).toFixed(options.precision);\n resultantRating = parseFloat(resultantRating);\n\n that.rating(resultantRating);\n }\n\n function onInit(e, data) {\n\n if(options.onInit && typeof options.onInit === \"function\") {\n\n /* jshint validthis:true */\n options.onInit.apply(this, [data.rating, that]);\n }\n }\n\n function onChange (e, data) {\n\n if(options.onChange && typeof options.onChange === \"function\") {\n\n /* jshint validthis:true */\n options.onChange.apply(this, [data.rating, that]);\n }\n }\n\n function onSet (e, data) {\n\n if(options.onSet && typeof options.onSet === \"function\") {\n\n /* jshint validthis:true */\n options.onSet.apply(this, [data.rating, that]);\n }\n }\n\n function bindEvents () {\n\n $node.on(\"mousemove\", onMouseEnter)\n .on(\"mouseenter\", onMouseEnter)\n .on(\"mouseleave\", onMouseLeave)\n .on(\"click\", onMouseClick)\n .on(\"rateyo.init\", onInit)\n .on(\"rateyo.change\", onChange)\n .on(\"rateyo.set\", onSet);\n }\n\n function unbindEvents () {\n\n $node.off(\"mousemove\", onMouseEnter)\n .off(\"mouseenter\", onMouseEnter)\n .off(\"mouseleave\", onMouseLeave)\n .off(\"click\", onMouseClick)\n .off(\"rateyo.init\", onInit)\n .off(\"rateyo.change\", onChange)\n .off(\"rateyo.set\", onSet);\n }\n\n setNumStars(options.numStars);\n setReadOnly(options.readOnly);\n\n if (options.rtl) {\n\n setRtl(options.rtl);\n }\n\n this.collection.push(this);\n this.rating(options.rating, true);\n\n isInitialized = true;\n $node.trigger(\"rateyo.init\", {rating: options.rating});\n }\n\n RateYo.prototype.collection = [];\n\n function getInstance (node, collection) {\n\n /*\n * Given a HTML element (node) and a collection of RateYo instances,\n * this function will search through the collection and return the matched\n * instance having the node\n */\n\n var instance;\n\n $.each(collection, function () {\n\n if(node === this.node){\n\n instance = this;\n return false;\n }\n });\n\n return instance;\n }\n\n function deleteInstance (node, collection) {\n\n /*\n * Given a HTML element (node) and a collection of RateYo instances,\n * this function will search through the collection and delete the\n * instance having the node, and return the modified collection\n */\n\n $.each(collection, function (index) {\n\n if (node === this.node) {\n\n var firstPart = collection.slice(0, index),\n secondPart = collection.slice(index+1, collection.length);\n\n collection = firstPart.concat(secondPart);\n\n return false;\n }\n });\n\n return collection;\n }\n\n function _rateYo (options) {\n\n var rateYoInstances = RateYo.prototype.collection;\n\n /* jshint validthis:true */\n var $nodes = $(this);\n\n if($nodes.length === 0) {\n\n return $nodes;\n }\n\n var args = Array.prototype.slice.apply(arguments, []);\n\n if (args.length === 0) {\n\n //If args length is 0, Initialize the UI with default settings\n options = args[0] = {};\n }else if (args.length === 1 && typeof args[0] === \"object\") {\n\n //If an Object is specified as first argument, it is considered as options\n options = args[0];\n }else if (args.length >= 1 && typeof args[0] === \"string\") {\n\n /*\n * if there is only one argument, and if its a string, it is supposed to be a\n * method name, if more than one argument is specified, the remaining arguments\n * except the first argument, will be passed as a params to the specified method\n */\n\n var methodName = args[0],\n params = args.slice(1);\n\n var result = [];\n\n $.each($nodes, function (i, node) {\n\n var existingInstance = getInstance(node, rateYoInstances);\n\n if(!existingInstance) {\n\n throw Error(\"Trying to set options before even initialization\");\n }\n\n var method = existingInstance[methodName];\n\n if (!method) {\n\n throw Error(\"Method \" + methodName + \" does not exist!\");\n }\n\n var returnVal = method.apply(existingInstance, params);\n\n result.push(returnVal);\n });\n\n /*\n * If the plugin in being called on only one jQuery Element, return only the\n * first value, to support chaining.\n */\n result = result.length === 1? result[0]: result;\n\n return result;\n }else {\n\n throw Error(\"Invalid Arguments\");\n }\n\n /*\n * if only options are passed, extend default options, and if the plugin is not\n * initialized on a particular jQuery element, initalize RateYo on it\n */\n options = $.extend({}, DEFAULTS, options);\n\n return $.each($nodes, function () {\n\n var existingInstance = getInstance(this, rateYoInstances);\n\n if (existingInstance) {\n\n return existingInstance;\n }\n\n var $node = $(this),\n dataAttrs = {},\n optionsCopy = $.extend({}, options);\n\n $.each($node.data(), function (key, value) {\n\n if (key.indexOf(\"rateyo\") !== 0) {\n\n return;\n }\n\n var optionName = key.replace(/^rateyo/, \"\");\n\n optionName = optionName[0].toLowerCase() + optionName.slice(1);\n\n dataAttrs[optionName] = value;\n\n delete optionsCopy[optionName];\n });\n\n return new RateYo($(this), $.extend({}, dataAttrs, optionsCopy));\n });\n }\n\n function rateYo () {\n\n /* jshint validthis:true */\n return _rateYo.apply(this, Array.prototype.slice.apply(arguments, []));\n }\n\n window.RateYo = RateYo;\n $.fn.rateYo = rateYo;\n\n}(window.jQuery));\n\n\n//# sourceURL=webpack://Sneat/./node_modules/rateyo/src/jquery.rateyo.js?");
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
/******/ /* webpack/runtime/compat get default export */
/******/ !function() {
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function() { return module['default']; } :
/******/ function() { return module; };
/******/ __webpack_require__.d(getter, { a: getter });
/******/ return getter;
/******/ };
/******/ }();
/******/
/******/ /* webpack/runtime/define property getters */
/******/ !function() {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = function(exports, definition) {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ }();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ !function() {
/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
/******/ }();
/******/
/******/ /* webpack/runtime/make namespace object */
/******/ !function() {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ }();
/******/
/************************************************************************/
/******/
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module can't be inlined because the eval devtool is used.
/******/ var __webpack_exports__ = __webpack_require__("./libs/rateyo/rateyo.js");
/******/
/******/ return __webpack_exports__;
/******/ })()
;
});