{"version":3,"sources":["../../dev/j/windows-rating.js"],"names":["avm","define","radios","stars","rating","this","allStars","$","forEach","radio","index","array","push","data","value","get","on","rateClick","apply","arguments","append","length","hideRadios","evt","star","currentTarget","lightUpStars","rateOnRadios","hide","siblings","addBack","removeClass","prevAll","addClass","filter","prop","destroy","show","off","remove","reviews","JSON","parse","document","getElementById","innerHTML","fetch","from","to","ratings","slice","reviewsDOM","map","review","d","Date","date","day","getDate","month","getMonth","year","getFullYear","prefix","slide","thing","text","name","ratingValue","i","parseInt","require","set","rate","timeout","colorbox","inline","width","height","initialHeight","href","className","onLoad","url","avastGlobals","web","RootPath","locale","load","find","target","querySelector","initAvastForm","closest","before","resize","attr","MutationObserver","observer","mutations","mutation","type","has","setTimeout","close","clearTimeout","config","childList","oTimeout","observe","onClosed","window","location","hash","ready","reviewModule","bxFetchSlide","ratingPoints","bxslider","empty","bxSlider","auto","controls","pager","infiniteLoop","minSlides","maxSlides","slideWidth","nextSelector","nextText","prevSelector","prevText","onSlideNext","slider","oldIndex","getSlideCount","reloadSlider","getCurrentSlide","onSliderLoad","goToSlide","onSlideAfter","totalRatings","reduce","pv","cv","avgRating","percentAvgRating","Math","floor","toPrecision","css"],"mappings":"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","file":"windows-rating.js","sourcesContent":["\n(function(){\n\t/**\n\t * Convert radio buttons to stars\n\t * @version 1.0.0\n\t * @author Aleš Gabriel \n\t * @module avast.web.rating\n\t * @param {NodeList} Array of radio button elements\n\t * @returns Object of methods\n\t */\n\tavm.define('avast.web.rating', function(radios){\n\t\treturn {\n\t\t\tradios: radios,\n\t\t\tstars: function(){\n\t\t\t\tvar rating = this,\n\t\t\t\t\tallStars = $('
'),\n\t\t\t\t\tradios = this.radios,\n\t\t\t\t\tstars = [];\n\n\t\t\t\tthis.allStars = allStars;\n\n\t\t\t\tradios.forEach(function(radio, index, array){\n\t\t\t\t\tstars.push($('
').data('value', radio.value).get(0));\n\t\t\t\t});\n\n\t\t\t\tallStars.on('click', '.rating-star', function(){\n\t\t\t\t\trating.rateClick.apply(rating, arguments); // TODO: Or function.bind()? Support for forEach and bind is almost the same\n\t\t\t\t});\n\t\t\t\tallStars.append(stars);\n\n\t\t\t\tif(allStars.length){\n\t\t\t\t\tthis.hideRadios(radios);\n\t\t\t\t}\n\n\t\t\t\treturn allStars;\n\t\t\t},\n\t\t\trateClick: function(evt){\n\t\t\t\tvar star = $(evt.currentTarget);\n\n\t\t\t\tthis.lightUpStars(star);\n\t\t\t\tthis.rateOnRadios(star.data('value'), this.radios);\n\t\t\t},\n\t\t\thideRadios: function(radios){\n\t\t\t\t$(radios).hide();\n\t\t\t},\n\t\t\tlightUpStars: function(star){\n\t\t\t\tstar.siblings().addBack().removeClass('selected');\n\t\t\t\tstar.prevAll().addBack().addClass('selected');\n\t\t\t},\n\t\t\trateOnRadios: function(value, radios) {\n\t\t\t\t$(radios).filter('[value=' + value +']').prop('checked', true);\n\t\t\t},\n\t\t\tdestroy: function(){\n\t\t\t\t$(this.radios).show();\n\t\t\t\tthis.allStars.off('click');\n\t\t\t\tthis.allStars.remove();\n\t\t\t}\n\t\t}\n\t})\n\n\t/**\n\t * Parse JSON to microdata reviews\n\t * @version 1.0.0\n\t * @author Aleš Gabriel \n\t * @module avast.web.review\n\t * @returns Object of methods\n\t * @description Expected JSON data structure:\n\t\t[\n\t\t\t{\n\t\t\t\t\"date\": \"2015-10-24T04:43:04.8019109Z\",\n\t\t\t\t\"name\": \"n\",\n\t\t\t\t\"rating\": 4,\n\t\t\t\t\"text\": \"this is the best antivirus\"\n\t\t\t}\n\t\t]\n\t */\n\tavm.define('avast.web.review', (function(data){\n\t\t\treturn {\n\t\t\t\treviews: data ? JSON.parse(data) : JSON.parse(document.getElementById('avast-adc-reviews').innerHTML),\n\t\t\t\tfetch: function(from, to){\n\t\t\t\t\tvar ratings = [],\n\t\t\t\t\t\tfrom = from || 0,\n\t\t\t\t\t\tto = to || this.reviews.length,\n\t\t\t\t\t\treviews = this.reviews.slice(from, to);\n\n\t\t\t\t\t\treviewsDOM = $.map(reviews, function(review){\n\t\t\t\t\t\t\tvar d = new Date(review.date)\n\t\t\t\t\t\t\t\tvar day = d.getDate();\n\t\t\t\t\t\t\t\tvar month = d.getMonth() + 1;\n\t\t\t\t\t\t\t\tvar year = d.getFullYear();\n\n\t\t\t\t\t\t\tvar prefix = 'slider-review-',\n\t\t\t\t\t\t\t\tslide = $('
').addClass(prefix + 'slide'),\n\n\t\t\t\t\t\t\t\tthing = $('
').addClass(prefix + 'thing').text('Avast Free Antivirus for Windows'),\n\t\t\t\t\t\t\t\tname = $('
').addClass(prefix + 'author').text(review.name),\n\t\t\t\t\t\t\t\trating = $('
').addClass(prefix + 'rating'),\n\t\t\t\t\t\t\t\tratingValue = $('').text(review.rating),\n\t\t\t\t\t\t\t\ttext = $('

').addClass(prefix + 'text').text(review.text),\n\t\t\t\t\t\t\t\tdate = $('').text(day + '/' + month + '/' + year).addClass(prefix + 'date');\n\n\t\t\t\t\t\t\tfor (var i = 0; i < parseInt(review.rating); i++){\n\t\t\t\t\t\t\t\trating.append('');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tslide.append([thing, name, date, rating.append(ratingValue), text]);\n\t\t\t\t\t\t\tratings.push(parseInt(review.rating));\n\n\t\t\t\t\t\t\treturn slide;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn reviewsDOM;\n\t\t\t\t}\n\n\t\t\t}\n\t})());\n\n\tvar router = avm.require('avast.web.router');\n\trouter.set({\n\t\trate: function(){\n\t\t\tvar $ = avm.require('jquery'),\n\t\t\t\ttimeout;\n\n\t\t\t$.colorbox({\n\t\t\t\tinline: true,\n\t\t\t\twidth: 570,\n\t\t\t\theight: 600,\n\t\t\t\tinitialHeight: 600,\n\t\t\t\thref: '#ratingPopup',\n\t\t\t\tclassName: 'rating-form',\n\n\t\t\t\tonLoad: function(){\n\n\t\t\t\t\tvar url = avastGlobals.web.RootPath ? avastGlobals.web.RootPath + locale + '/' + 'rating-form.php' : 'rating-form.php';\n\n\t\t\t\t\t$(\"#ratingForm\").load(url, function(){\n\t\t\t\t\t\tvar rating = avm.require('avast.web.rating')($('.rating-form').find('input[type=\"radio\"][name=\"rating\"]').get()),\n\t\t\t\t\t\t\tstars = rating.stars(),\n\t\t\t\t\t\t\ttarget = document.querySelector('#colorbox.rating-form .form-table');\n\n\t\t\t\t\t\tinitAvastForm();\n\n\t\t\t\t\t\t$('#colorbox.rating-form').find('input[type=\"radio\"][name=\"rating\"]')\n\t\t\t\t\t\t\t.closest('.form-item')\n\t\t\t\t\t\t\t.hide()\n\t\t\t\t\t\t\t.before($('

').addClass('form-item').append(stars));\n\n\t\t\t\t\t\t$.colorbox.resize();\n\t\t\t\t\t\t// Form tweaks\n\t\t\t\t\t\t$('#colorbox.rating-form').find('#frm-text').attr('maxlength', '300');\n\n\t\t\t\t\t\t//console.log('mutation target %o', target);\n\t\t\t\t\t\t// create an observer instance\n\t\t\t\t\t\tif(typeof MutationObserver === 'function') {\n\t\t\t\t\t\t\tvar observer = new MutationObserver(function(mutations) {\n\t\t\t\t\t\t\t\tmutations.forEach(function(mutation) {\n\t\t\t\t\t\t\t\t\t//console.log(mutation.type);\n\t\t\t\t\t\t\t\t\t//console.log($(target).has('.bubble'));\n\n\t\t\t\t\t\t\t\t\tif(mutation.type === 'childList' && $(target).has('.bubble')){\n\t\t\t\t\t\t\t\t\t\t// Autoclose\n\t\t\t\t\t\t\t\t\t\ttimeout = setTimeout(function() {\n\t\t\t\t\t\t\t\t\t\t\t$.colorbox.close();\n\t\t\t\t\t\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t\t\t\t\t\t}, 5000);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t// configuration of the observer:\n\t\t\t\t\t\t\tvar config = {\n\t\t\t\t\t\t\t\tchildList: true\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// pass in the target node, as well as the observer options\n\t\t\t\t\t\t\tvar oTimeout = setTimeout(function() {\n\t\t\t\t\t\t\t\t//console.log('mutation target %o', target);\n\t\t\t\t\t\t\t\tobserver.observe(target, config);\n\t\t\t\t\t\t\t\tclearTimeout(oTimeout)\n\t\t\t\t\t\t\t}, 0);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t},\n\t\t\t\tonClosed: function(){\n\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t// hash for tracking closed popup\n\t\t\t\t\twindow.location.hash = '!';\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n})();\n\n\n\n$(document).ready(function(){\n\t//console.time('buildSlides')\n\tvar reviewModule = avm.require('avast.web.review');\n\t\treviews = reviewModule.reviews;\n\t\tbxFetchSlide = 0,\n\t\tratingPoints = 5;\n\n\t// Open rating form\n\n\t// Slider\n\tvar bxslider = $('.js-slider')\n\t\t.empty()\n\t\t.append(reviewModule.fetch(0, 21))\n\t\t.bxSlider({\n\t\t\tauto: false,\n\t\t\tcontrols: true,\n\t\t\tpager: false,\n\t\t\tinfiniteLoop: true,\n\t\t\t//hideControlOnEnd: true,\n\t\t\tminSlides: 1,\n\t\t\tmaxSlides: 3,\n\t\t\tslideWidth: 330,\n\t\t\tnextSelector: '.arrow-box.arrow-right',\n\t\t\tnextText: '',\n\t\t\tprevSelector: '.arrow-box.arrow-left',\n\t\t\tprevText: '',\n\t\t\tonSlideNext: function(slider, index, oldIndex){\n\t\t\t\tvar last = bxslider.getSlideCount();\n\t\t\t\t\tfrom = (bxFetchSlide + 1) * 3;\n\t\t\t\t\tto = (bxFetchSlide + 8) * 3;\n\n\t\t\t\tif (bxFetchSlide) {\n\t\t\t\t\t//console.log('from: %s', from)\n\t\t\t\t\t//console.log('to: %s', to)\n\n\t\t\t\t\t$('.slider-reviews').addClass('is-loading')\n\t\t\t\t\t$('.js-slider').append(reviewModule.fetch(from, to));\n\t\t\t\t\tbxslider.reloadSlider();\n\t\t\t\t}\n\n\t\t\t\tif (((bxslider.getCurrentSlide() + 1) * 3) >= bxslider.getSlideCount()) {\n\t\t\t\t\t// Prepare to reload but reload with next slide\n\t\t\t\t\tbxFetchSlide = bxslider.getCurrentSlide();\n\t\t\t\t}\n\n\t\t\t},\n\t\t\tonSliderLoad: function(){\n\t\t\t\tvar timeout;\n\n\t\t\t\tif (bxFetchSlide) {\n\t\t\t\t\t//console.log('onSliderLoad')\n\t\t\t\t\t//console.log('onSliderLoad count: %s', bxslider.getSlideCount())\n\n\t\t\t\t\t// It's too early to move on correct position. For some reason the width is still not correctly recalculated.\n\t\t\t\t\ttimeout = setTimeout(function(){\n\t\t\t\t\t\tbxslider.goToSlide(bxFetchSlide + 1);\n\n\t\t\t\t\t\t// @todo: remove loader\n\n\t\t\t\t\t\t// Clear state\n\t\t\t\t\t\tbxFetchSlide = 0;\n\n\t\t\t\t\t\t// Clear timeout\n\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t}, 0)\n\t\t\t\t}\n\t\t\t},\n\t\t\tonSlideAfter: function(){\n\t\t\t\t$('.slider-reviews').removeClass('is-loading');\n\t\t\t}\n\t\t});\n\n\t// Total reviews and average rating to DOM\n\tvar totalRatings = reviews.reduce(function(pv, cv) { return pv + cv.rating; }, 0);\n\tvar avgRating = (totalRatings) / reviews.length;\n\tvar percentAvgRating = Math.floor((100 / ratingPoints) * avgRating);\n\n\t$('.rating-bar').width(30 * ratingPoints);\n\t$('.rating-bar-average').width(percentAvgRating + '%');\n\n\t$('.total-reviews').text(reviews.length)\n\t$('.average-rating').text(avgRating.toPrecision(2))\n\t//console.timeEnd('buildSlides')\n\n\t// next modification per GLOWEB-1970\n\t$('.slider-review-date').css('display', 'none');\n});\n\n\n"]}