\\\").addClass(\\\"jvectormap-container\\\"),this.params.container&&this.params.container.append(this.container),this.container.data(\\\"mapObject\\\",this),this.defaultWidth=this.mapData.width,this.defaultHeight=this.mapData.height,this.setBackgroundColor(this.params.backgroundColor),this.onResize=function(){map.updateSize()},jvm.$(window).resize(this.onResize);for(e in jvm.Map.apiEvents)this.params[e]&&this.container.bind(jvm.Map.apiEvents[e]+\\\".jvectormap\\\",this.params[e]);this.canvas=new jvm.VectorCanvas(this.container[0],this.width,this.height),this.params.bindTouchEvents&&(\\\"ontouchstart\\\"in window||window.DocumentTouch&&document instanceof DocumentTouch?this.bindContainerTouchEvents():window.MSGesture&&this.bindContainerPointerEvents()),this.bindContainerEvents(),this.bindElementEvents(),this.createTip(),this.params.zoomButtons&&this.bindZoomButtons(),this.createRegions(),this.createMarkers(this.params.markers||{}),this.updateSize(),this.params.focusOn&&(\\\"string\\\"==typeof this.params.focusOn?this.params.focusOn={region:this.params.focusOn}:jvm.$.isArray(this.params.focusOn)&&(this.params.focusOn={regions:this.params.focusOn}),this.setFocus(this.params.focusOn)),this.params.selectedRegions&&this.setSelectedRegions(this.params.selectedRegions),this.params.selectedMarkers&&this.setSelectedMarkers(this.params.selectedMarkers),this.legendCntHorizontal=jvm.$(\\\"
\\\").addClass(\\\"jvectormap-legend-cnt jvectormap-legend-cnt-h\\\"),this.legendCntVertical=jvm.$(\\\"
\\\").addClass(\\\"jvectormap-legend-cnt jvectormap-legend-cnt-v\\\"),this.container.append(this.legendCntHorizontal),this.container.append(this.legendCntVertical),this.params.series&&this.createSeries()},jvm.Map.prototype={transX:0,transY:0,scale:1,baseTransX:0,baseTransY:0,baseScale:1,width:0,height:0,setBackgroundColor:function(backgroundColor){this.container.css(\\\"background-color\\\",backgroundColor)},resize:function(){var curBaseScale=this.baseScale;this.width/this.height>this.defaultWidth/this.defaultHeight?(this.baseScale=this.height/this.defaultHeight,this.baseTransX=Math.abs(this.width-this.defaultWidth*this.baseScale)/(2*this.baseScale)):(this.baseScale=this.width/this.defaultWidth,this.baseTransY=Math.abs(this.height-this.defaultHeight*this.baseScale)/(2*this.baseScale)),this.scale*=this.baseScale/curBaseScale,this.transX*=this.baseScale/curBaseScale,this.transY*=this.baseScale/curBaseScale},updateSize:function(){this.width=this.container.width(),this.height=this.container.height(),this.resize(),this.canvas.setSize(this.width,this.height),this.applyTransform()},reset:function(){var key,i;for(key in this.series)for(i=0;i
maxTransY?this.transY=maxTransY:this.transYmaxTransX?this.transX=maxTransX:this.transXtouches[1].pageX?touches[1].pageX+(touches[0].pageX-touches[1].pageX)/2:touches[0].pageX+(touches[1].pageX-touches[0].pageX)/2,centerTouchY=touches[0].pageY>touches[1].pageY?touches[1].pageY+(touches[0].pageY-touches[1].pageY)/2:touches[0].pageY+(touches[1].pageY-touches[0].pageY)/2,centerTouchX-=offset.left,centerTouchY-=offset.top,touchStartScale=map.scale,touchStartDistance=Math.sqrt(Math.pow(touches[0].pageX-touches[1].pageX,2)+Math.pow(touches[0].pageY-touches[1].pageY,2)))),lastTouchesLength=touches.length};jvm.$(this.container).bind(\\\"touchstart\\\",handleTouchEvent),jvm.$(this.container).bind(\\\"touchmove\\\",handleTouchEvent)},bindContainerPointerEvents:function(){var map=this,gesture=new MSGesture,element=this.container[0],handlePointerDownEvent=function(e){gesture.addPointer(e.pointerId)},handleGestureEvent=function(e){var transXOld,transYOld;(0!=e.translationX||0!=e.translationY)&&(transXOld=map.transX,transYOld=map.transY,map.transX+=e.translationX/map.scale,map.transY+=e.translationY/map.scale,map.applyTransform(),map.tip.hide(),(transXOld!=map.transX||transYOld!=map.transY)&&e.preventDefault()),1!=e.scale&&(map.setScale(map.scale*e.scale,e.offsetX,e.offsetY),map.tip.hide(),e.preventDefault())};gesture.target=element,element.addEventListener(\\\"MSGestureChange\\\",handleGestureEvent,!1),element.addEventListener(\\\"pointerdown\\\",handlePointerDownEvent,!1)},bindElementEvents:function(){var pageX,pageY,mouseMoved,map=this;this.container.mousemove(function(e){Math.abs(pageX-e.pageX)+Math.abs(pageY-e.pageY)>2&&(mouseMoved=!0)}),this.container.delegate(\\\"[class~='jvectormap-element']\\\",\\\"mouseover mouseout\\\",function(e){var baseVal=jvm.$(this).attr(\\\"class\\\").baseVal||jvm.$(this).attr(\\\"class\\\"),type=-1===baseVal.indexOf(\\\"jvectormap-region\\\")?\\\"marker\\\":\\\"region\\\",code=jvm.$(this).attr(\\\"region\\\"==type?\\\"data-code\\\":\\\"data-index\\\"),element=\\\"region\\\"==type?map.regions[code].element:map.markers[code].element,tipText=\\\"region\\\"==type?map.mapData.paths[code].name:map.markers[code].config.name||\\\"\\\",tipShowEvent=jvm.$.Event(type+\\\"TipShow.jvectormap\\\"),overEvent=jvm.$.Event(type+\\\"Over.jvectormap\\\");\\\"mouseover\\\"==e.type?(map.container.trigger(overEvent,[code]),overEvent.isDefaultPrevented()||element.setHovered(!0),map.tip.text(tipText),map.container.trigger(tipShowEvent,[map.tip,code]),tipShowEvent.isDefaultPrevented()||(map.tip.show(),map.tipWidth=map.tip.width(),map.tipHeight=map.tip.height())):(element.setHovered(!1),map.tip.hide(),map.container.trigger(type+\\\"Out.jvectormap\\\",[code]))}),this.container.delegate(\\\"[class~='jvectormap-element']\\\",\\\"mousedown\\\",function(e){pageX=e.pageX,pageY=e.pageY,mouseMoved=!1}),this.container.delegate(\\\"[class~='jvectormap-element']\\\",\\\"mouseup\\\",function(){var baseVal=jvm.$(this).attr(\\\"class\\\").baseVal?jvm.$(this).attr(\\\"class\\\").baseVal:jvm.$(this).attr(\\\"class\\\"),type=-1===baseVal.indexOf(\\\"jvectormap-region\\\")?\\\"marker\\\":\\\"region\\\",code=jvm.$(this).attr(\\\"region\\\"==type?\\\"data-code\\\":\\\"data-index\\\"),clickEvent=jvm.$.Event(type+\\\"Click.jvectormap\\\"),element=\\\"region\\\"==type?map.regions[code].element:map.markers[code].element;mouseMoved||(map.container.trigger(clickEvent,[code]),(\\\"region\\\"===type&&map.params.regionsSelectable||\\\"marker\\\"===type&&map.params.markersSelectable)&&(clickEvent.isDefaultPrevented()||(map.params[type+\\\"sSelectableOne\\\"]&&map.clearSelected(type+\\\"s\\\"),element.setSelected(!element.isSelected))))})},bindZoomButtons:function(){var map=this;jvm.$(\\\"
\\\").addClass(\\\"jvectormap-zoomin\\\").text(\\\"+\\\").appendTo(this.container),jvm.$(\\\"
\\\").addClass(\\\"jvectormap-zoomout\\\").html(\\\"−\\\").appendTo(this.container),this.container.find(\\\".jvectormap-zoomin\\\").click(function(){map.setScale(map.scale*map.params.zoomStep,map.width/2,map.height/2,!1,map.params.zoomAnimate)}),this.container.find(\\\".jvectormap-zoomout\\\").click(function(){map.setScale(map.scale/map.params.zoomStep,map.width/2,map.height/2,!1,map.params.zoomAnimate)})},createTip:function(){var map=this;this.tip=jvm.$(\\\"
\\\").addClass(\\\"jvectormap-tip\\\").appendTo(jvm.$(\\\"body\\\")),this.container.mousemove(function(e){var left=e.pageX-15-map.tipWidth,top=e.pageY-15-map.tipHeight;5>left&&(left=e.pageX+15),5>top&&(top=e.pageY+15),map.tip.css({left:left,top:top})})},setScale:function(scale,anchorX,anchorY,isCentered,animate){var interval,scaleStart,scaleDiff,transXStart,transXDiff,transYStart,transYDiff,transX,transY,viewportChangeEvent=jvm.$.Event(\\\"zoom.jvectormap\\\"),that=this,i=0,count=Math.abs(Math.round(60*(scale-this.scale)/Math.max(scale,this.scale))),deferred=new jvm.$.Deferred;return scale>this.params.zoomMax*this.baseScale?scale=this.params.zoomMax*this.baseScale:scale0?(scaleStart=this.scale,scaleDiff=(scale-scaleStart)/count,transXStart=this.transX*this.scale,transYStart=this.transY*this.scale,transXDiff=(transX*scale-transXStart)/count,transYDiff=(transY*scale-transYStart)/count,interval=setInterval(function(){i+=1,that.scale=scaleStart+scaleDiff*i,that.transX=(transXStart+transXDiff*i)/that.scale,that.transY=(transYStart+transYDiff*i)/that.scale,that.applyTransform(),i==count&&(clearInterval(interval),that.container.trigger(viewportChangeEvent,[scale/that.baseScale]),deferred.resolve())},10)):(this.transX=transX,this.transY=transY,this.scale=scale,this.applyTransform(),this.container.trigger(viewportChangeEvent,[scale/this.baseScale]),deferred.resolve()),deferred},setFocus:function(config){var bbox,itemBbox,newBbox,codes,i,point;if(config=config||{},config.region?codes=[config.region]:config.regions&&(codes=config.regions),codes){for(i=0;ilng&&(lng+=360),point=jvm.Proj[proj.type](lat,lng,centralMeridian),inset=this.getInsetForPoint(point.x,point.y),inset?(bbox=inset.bbox,point.x=(point.x-bbox[0].x)/(bbox[1].x-bbox[0].x)*inset.width*this.scale,point.y=(point.y-bbox[0].y)/(bbox[1].y-bbox[0].y)*inset.height*this.scale,{x:point.x+this.transX*this.scale+inset.left*this.scale,y:point.y+this.transY*this.scale+inset.top*this.scale}):!1},pointToLatLng:function(x,y){var i,inset,bbox,nx,ny,proj=jvm.Map.maps[this.params.map].projection,centralMeridian=proj.centralMeridian,insets=jvm.Map.maps[this.params.map].insets;for(i=0;ibbox[0].x&&nxbbox[0].y&&nybbox[0].x&&xbbox[0].y&&y\\\").addClass(\\\"jvectormap-goback\\\").text(\\\"Back\\\").appendTo(this.params.container),this.backButton.hide(),this.backButton.click(function(){that.goBack()}),this.spinner=jvm.$(\\\"
\\\").addClass(\\\"jvectormap-spinner\\\").appendTo(this.params.container),this.spinner.hide()},jvm.MultiMap.prototype={addMap:function(name,config){var cnt=jvm.$(\\\"
\\\").css({width:\\\"100%\\\",height:\\\"100%\\\"});return this.params.container.append(cnt),this.maps[name]=new jvm.Map(jvm.$.extend(config,{container:cnt})),this.params.maxLevel>config.multiMapLevel&&this.maps[name].container.on(\\\"regionClick.jvectormap\\\",{scope:this},function(e,code){var multimap=e.data.scope,mapName=multimap.params.mapNameByCode(code,multimap);multimap.drillDownPromise&&\\\"pending\\\"===multimap.drillDownPromise.state()||multimap.drillDown(mapName,code)}),this.maps[name]},downloadMap:function(code){var that=this,deferred=jvm.$.Deferred();return this.mapsLoaded[code]?deferred.resolve():jvm.$.get(this.params.mapUrlByCode(code,this)).then(function(){that.mapsLoaded[code]=!0,deferred.resolve()},function(){deferred.reject()}),deferred},drillDown:function(name,code){var currentMap=this.history[this.history.length-1],that=this,focusPromise=currentMap.setFocus({region:code,animate:!0}),downloadPromise=this.downloadMap(code);focusPromise.then(function(){\\\"pending\\\"===downloadPromise.state()&&that.spinner.show()}),downloadPromise.always(function(){that.spinner.hide()}),this.drillDownPromise=jvm.$.when(downloadPromise,focusPromise),this.drillDownPromise.then(function(){currentMap.params.container.hide(),that.maps[name]?that.maps[name].params.container.show():that.addMap(name,{map:name,multiMapLevel:currentMap.params.multiMapLevel+1}),that.history.push(that.maps[name]),that.backButton.show()})},goBack:function(){var currentMap=this.history.pop(),prevMap=this.history[this.history.length-1],that=this;currentMap.setFocus({scale:1,x:.5,y:.5,animate:!0}).then(function(){currentMap.params.container.hide(),prevMap.params.container.show(),prevMap.updateSize(),1===that.history.length&&that.backButton.hide(),prevMap.setFocus({scale:1,x:.5,y:.5,animate:!0})})}},jvm.MultiMap.defaultParams={mapNameByCode:function(code,multiMap){return code.toLowerCase()+\\\"_\\\"+multiMap.defaultProjection+\\\"_en\\\"},mapUrlByCode:function(code,multiMap){return\\\"jquery-jvectormap-data-\\\"+code.toLowerCase()+\\\"-\\\"+multiMap.defaultProjection+\\\"-en.js\\\"}};\"","require(\"!!/Users/htamirepi/repo/stores.petit-bateau.com/src/node_modules/script-loader/addScript.js\")(require(\"!!/Users/htamirepi/repo/stores.petit-bateau.com/src/node_modules/raw-loader/index.js!/Users/htamirepi/repo/stores.petit-bateau.com/src/node_modules/jvectormap/jquery-jvectormap.min.js\"))","import 'script-loader!node_modules/jvectormap/jquery-jvectormap.min.js';\nimport './jquery-jvectormap-us-aea-en.js';\n\nexport class VectorMap {\n // You must call autorun manually\n static autorun(scope) {\n const queryScope = scope || document;\n this.instances = [];\n for (const el of queryScope.querySelectorAll('.VectorMap')) {\n el.yVectorMap = new VectorMap(el);\n VectorMap.instances.push(el);\n }\n }\n\n makeTextElement(type,contents) {\n const el = document.createElement(type);\n el.id = `${this.svgIDRoot()}-${type}`;\n const text = document.createTextNode(contents);\n el.appendChild(text);\n return el;\n }\n\n svgIDRoot() {\n return `${this.element.id}-map`;\n }\n\n makeAccessibile(mapContainerElement) {\n const skipMap = this.makeTextElement('a', 'Skip Map Navigation');\n skipMap.setAttribute('class', 'sr-only sr-only-focusable');\n skipMap.id = `${this.svgIDRoot()}-skip`;\n skipMap.href = `#${this.svgIDRoot()}-back`;\n const backToMap = this.makeTextElement('a', 'Back to Map Navigation');\n backToMap.href = `#${this.svgIDRoot()}-skip`;\n backToMap.id = `${this.svgIDRoot()}-back`;\n backToMap.setAttribute('class', 'sr-only sr-only-focusable');\n this.element.parentElement.insertBefore(skipMap, this.element);\n this.element.parentElement.insertBefore(backToMap, this.element.nextSibling);\n\n this.svg = mapContainerElement.querySelector('svg');\n\n const desc = this.makeTextElement('desc', this.mapDescription);\n const title = this.makeTextElement('title', this.mapTitle);\n this.svg.id = this.svgIDRoot();\n this.svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n this.svg.setAttribute('aria-labeledby', `${title.id} ${desc.id}`);\n this.svg.insertBefore(desc, this.svg.firstChild);\n this.svg.insertBefore(title, this.svg.firstChild);\n const existingClasses = this.svg.getAttribute('class');\n if (existingClasses) {\n this.svg.setAttribute('class', `${existingClasses} VectorMap-map`);\n } else {\n this.svg.setAttribute('class', 'VectorMap-map');\n }\n const pathGroup = this.svg.querySelector('g');\n\n const paths = Array.prototype.slice.call(pathGroup.querySelectorAll('path'));\n const changedElements = [];\n for (let i = 0; i < paths.length; i++) {\n const path = paths[i];\n const keyCode = path.getAttribute(\"data-code\");\n const info = this.keyInfo[keyCode];\n if (info) {\n const link = document.createElementNS('http://www.w3.org/2000/svg', 'a');\n link.setAttribute('href', info.fullUrl);\n link.setAttribute('xlink:href', info.fullUrl);\n link.setAttribute('title', info.name);\n link.setAttribute('aria-label', info.name);\n link.setAttribute('class', 'VectorMap-link');\n link.appendChild(path);\n // fix click problem in safari\n link.addEventListener('click', (e) => {\n e.preventDefault();\n window.location.href=link.getAttribute('href');\n });\n changedElements.push(link);\n } else {\n changedElements.push(path);\n pathGroup.removeChild(path);\n }\n }\n for (let newPath of changedElements) {\n pathGroup.appendChild(newPath);\n }\n }\n\n constructor(element, opts) {\n this.element = element;\n if (opts == null) { opts = {}; }\n this.opts = opts;\n let prefix = $(this.element).data('prefix');\n if (prefix == null) {\n prefix = \"\";\n }\n\n let dataOpts = {\n id: `#${$(this.element).attr('id')}`,\n mapKey: $(this.element).data('key-name'),\n keyPrefix: prefix,\n dataSource: `#${$(this.element).data('source')}`,\n autoRender: $(this.element).data('auto-render')\n };\n\n this.mapTitle = this.element.dataset.mapTitle;\n this.mapDescription = this.element.dataset.mapDescription;\n this.mapLabel = this.element.dataset.mapLabel;\n\n this.opts = $.extend(dataOpts, this.opts);\n\n this.keys = JSON.parse($(this.opts.dataSource).text());\n this.vals = {};\n this.keyInfo = {};\n\n for (let key of Array.from(this.keys)) {\n const vectorKey = `${this.opts.keyPrefix}${key.key}`;\n this.vals[vectorKey] = 1;\n this.keyInfo[vectorKey] = key;\n }\n\n this.mapRenderConfig = {\n map: this.opts.mapKey,\n backgroundColor: 'none',\n zoomOnScroll: false,\n zoomButtons: false,\n regionStyle: {\n initial: {\n fill: this.opts.fillColor,\n stroke: this.opts.strokeColor,\n \"stroke-width\": .5,\n cursor: \"pointer\"\n },\n\n hover: {\n fill: this.opts.hoverFillColor,\n stroke: this.opts.hoverStrokeColor,\n \"fill-opacity\": 1\n }\n },\n\n series: {\n regions: [{\n values: this.vals\n }\n ]\n },\n\n\n\n onRegionTipShow(e, tip, code) {\n $('.jvectormap-tip', '.jvectormap-label').hide(); // Needed to prevent the tip and label from showing on hover\n e.preventDefault();\n },\n };\n\n this.renderMap = function() {\n $(this.opts.id).vectorMap(this.mapRenderConfig);\n this.makeAccessibile(document.querySelector(this.opts.id));\n };\n\n if (this.opts.autoRender) {\n this.renderMap();\n }\n }\n}\n","module.exports = \"// This file was automatically generated from templates/components/Reviews/Reviews.soy.\\n// Please don't edit this file by hand.\\n\\nif (typeof components == 'undefined') { var components = {}; }\\n\\ncomponents.reviews = function(opt_data, opt_sb, opt_ijData) {\\n var output = '';\\n if (((((opt_data.reviews.recent) != null ? opt_data.reviews.recent : []).length) > (0))) {\\n var perSlideDesktopDefault1 = 4;\\n var perSlideMobileDefault2 = 2;\\n var mobileBreakpointDefault3 = 768;\\n output += '\\\\u003Cdiv class\\\\u003D\\\\\\\"c-Reviews\\\\\\\"\\\\u003E\\\\u003Cheader class\\\\u003D\\\\\\\"c-Reviews-header\\\\\\\"\\\\u003E';\\n var param4 = '';\\n if (opt_data.title!= null) {\\n param4 += nullSafe(opt_data.title);\\n } else {\\n param4 += 'Recent Reviews';\\n }\\n output += components.util.h_level(soy.$$augmentMap(opt_data, {class: 'c-Reviews-title', contents: param4, level: ((opt_data.hLevel) != null ? opt_data.hLevel : 2)}), opt_sb, opt_ijData);\\n output += '\\\\u003Cdiv class\\\\u003D\\\\\\\"c-Reviews-summary\\\\\\\"\\\\u003E';\\n var param5 = '';\\n param5 += '(Based on ';\\n param5 += nullSafe(opt_data.reviews.total);\\n param5 += ' Reviews)';\\n output += components.reviews_summary(soy.$$augmentMap(opt_data, {totalMessage: param5}), opt_sb, opt_ijData);\\n output += '\\\\u003C/div\\\\u003E\\\\u003C/header\\\\u003E\\\\u003Cdiv class\\\\u003D\\\\\\\"c-Reviews-list\\\\\\\"\\\\u003E';\\n output += components.reviews_list(soy.$$augmentMap(opt_data, {dateFormatString: ((opt_data.dateFormatString) ?opt_data.dateFormatString:'DateFormatShort'), reviewsPerSlideDesktop: ((opt_data.reviewsPerSlideDesktop) != null ? opt_data.reviewsPerSlideDesktop : perSlideDesktopDefault1), reviewsPerSlideMobile: ((opt_data.reviewsPerSlideMobile) != null ? opt_data.reviewsPerSlideMobile : perSlideMobileDefault2), mobileBreakpoint: ((opt_data.mobileBreakpoint) != null ? opt_data.mobileBreakpoint : mobileBreakpointDefault3)}), opt_sb, opt_ijData);\\n output += '\\\\u003C/div\\\\u003E\\\\u003Cdiv class\\\\u003D\\\\\\\"c-Reviews-paging\\\\\\\"\\\\u003E';\\n output += components.reviews_paging(soy.$$augmentMap(opt_data, {reviewsPerSlideDesktop: ((opt_data.reviewsPerSlideDesktop) != null ? opt_data.reviewsPerSlideDesktop : perSlideDesktopDefault1)}), opt_sb, opt_ijData);\\n output += '\\\\u003C/div\\\\u003E\\\\u003C/div\\\\u003E';\\n }\\n return output;\\n};\\n\\ncomponents.reviews_paging = function(opt_data, opt_sb, opt_ijData) {\\n var output = '';\\n output += '\\\\u003Cdiv class\\\\u003D\\\\\\\"c-ReviewsPaging\\\\\\\"\\\\u003E\\\\u003Cdiv class\\\\u003D\\\\\\\"c-ReviewsPaging-currentPage\\\\\\\"\\\\u003E';\\n output += components.reviews_page(opt_data, opt_sb, opt_ijData);\\n output += '\\\\u003C/div\\\\u003E\\\\u003Cdiv class\\\\u003D\\\\\\\"c-ReviewsPaging-controls\\\\\\\"\\\\u003E';\\n output += components.reviews_controls(opt_data, opt_sb, opt_ijData);\\n output += '\\\\u003C/div\\\\u003E\\\\u003C/div\\\\u003E';\\n return output;\\n};\\n\\ncomponents.reviews_page = function(opt_data, opt_sb, opt_ijData) {\\n var output = '';\\n output += '\\\\u003Cdiv class\\\\u003D\\\\\\\"c-ReviewsPage\\\\\\\"\\\\u003E';\\n if (((opt_data.reviews.total) > (2))) {\\n output += 'Displaying';\\n output += ' ';\\n output += '\\\\u003Cspan class\\\\u003D\\\\\\\"js-ReviewsPage-showing ReviewsPage-showing\\\\\\\"\\\\u003E';\\n if (((opt_data.reviews.recent.length) == (1))) {\\n output += 'recent review';\\n } else if (((opt_data.reviews.recent.length) < (opt_data.reviewsPerSlideDesktop))) {\\n output += 'reviews 1 - ';\\n output += nullSafe(opt_data.reviews.recent.length);\\n } else {\\n output += 'reviews 1 - ';\\n output += nullSafe(opt_data.reviewsPerSlideDesktop);\\n }\\n output += '\\\\u003C/span\\\\u003E';\\n if (((opt_data.reviews.recent.length) > (1))) {\\n output += ' ';\\n output += 'out of the';\\n output += ' ';\\n output += nullSafe(opt_data.reviews.recent.length);\\n output += ' ';\\n output += 'most recent';\\n }\\n }\\n output += '\\\\u003C/div\\\\u003E';\\n return output;\\n};\\n\\ncomponents.reviews_controls = function(opt_data, opt_sb, opt_ijData) {\\n var output = '';\\n output += '\\\\u003Cdiv class\\\\u003D\\\\\\\"c-ReviewsControls\\\\\\\"\\\\u003E\\\\u003C/div\\\\u003E';\\n return output;\\n};\\n\\ncomponents.reviews_controls_link_previous = function(opt_data, opt_sb, opt_ijData) {\\n opt_data = opt_data || {};\\n var output = '';\\n output += '\\\\u003Cbutton class\\\\u003D\\\\\\\"c-ReviewsControls-link c-ReviewsControls-link--previous\\\\\\\"\\\\u003E\\\\u003Cspan class\\\\u003D\\\\\\\"fa fa-angle-left\\\\\\\"\\\\u003E\\\\u003C/span\\\\u003E';\\n output += nullSafe(((opt_data.linkText) != null ? opt_data.linkText : 'Previous'));\\n output += '\\\\u003C/button\\\\u003E';\\n return output;\\n};\\n\\ncomponents.reviews_controls_link_next = function(opt_data, opt_sb, opt_ijData) {\\n opt_data = opt_data || {};\\n var output = '';\\n output += '\\\\u003Cbutton class\\\\u003D\\\\\\\"c-ReviewsControls-link c-ReviewsControls-link--next\\\\\\\"\\\\u003E';\\n output += nullSafe(((opt_data.linkText) != null ? opt_data.linkText : 'Next'));\\n output += '\\\\u003Cspan class\\\\u003D\\\\\\\"fa fa-angle-right\\\\\\\"\\\\u003E\\\\u003C/span\\\\u003E\\\\u003C/button\\\\u003E';\\n return output;\\n};\\n\\ncomponents.reviews_controls_link_separator = function(opt_data, opt_sb, opt_ijData) {\\n opt_data = opt_data || {};\\n var output = '';\\n output += '\\\\u003Cspan class\\\\u003D\\\\\\\"c-ReviewsControls-linkSeparator\\\\\\\"\\\\u003E';\\n output += nullSafe(((opt_data.separator) != null ? opt_data.separator : '|'));\\n output += '\\\\u003C/span\\\\u003E';\\n return output;\\n};\\n\\ncomponents.review_stars = function(opt_data, opt_sb, opt_ijData) {\\n var output = '';\\n output += '\\\\u003Cdiv class\\\\u003D\\\\\\\"c-ReviewStars\\\\\\\"\\\\u003E\\\\u003Cspan class\\\\u003D\\\\\\\"sr-only\\\\\\\"\\\\u003ERating ';\\n output += nullSafe(Math.floor(opt_data.rating));\\n output += '.';\\n output += nullSafe(Math.floor(((10) * (((opt_data.rating) - (Math.floor(opt_data.rating)))))));\\n output += '\\\\u003C/span\\\\u003E';\\n var iLimit6 = Math.floor(opt_data.rating);\\n for (var i6 = 0; i6 < iLimit6; i6 += 1) {\\n output += nullSafe(((opt_data.fullStarIcon) != null ? opt_data.fullStarIcon : '\\\\u003Cspan class\\\\u003D\\\\\\\"c-ReviewStars-star fa fa-star\\\\\\\" aria-hidden\\\\u003D\\\\\\\"true\\\\\\\"\\\\u003E\\\\u003C/span\\\\u003E'));\\n }\\n var remainder7 = ((opt_data.rating) - (Math.floor(opt_data.rating)));\\n if (((remainder7) > (0.75))) {\\n output += nullSafe(((opt_data.fullStarIcon) != null ? opt_data.fullStarIcon : '\\\\u003Cspan class\\\\u003D\\\\\\\"c-ReviewStars-star fa fa-star\\\\\\\" aria-hidden\\\\u003D\\\\\\\"true\\\\\\\"\\\\u003E\\\\u003C/span\\\\u003E'));\\n } else if (((((remainder7) >= (0.25))) && (((remainder7) <= (0.75))))) {\\n output += nullSafe(((opt_data.halfStarIcon) != null ? opt_data.halfStarIcon : '\\\\u003Cspan class\\\\u003D\\\\\\\"c-ReviewStars-star fa fa-star-half-o\\\\\\\" aria-hidden\\\\u003D\\\\\\\"true\\\\\\\"\\\\u003E\\\\u003C/span\\\\u003E'));\\n } else if (((((remainder7) < (0.25))) && (((remainder7) != (0))))) {\\n output += nullSafe(((opt_data.emptyStarIcon) != null ? opt_data.emptyStarIcon : '\\\\u003Cspan class\\\\u003D\\\\\\\"c-ReviewStars-star fa fa-star-o\\\\\\\" aria-hidden\\\\u003D\\\\\\\"true\\\\\\\"\\\\u003E\\\\u003C/span\\\\u003E'));\\n }\\n var iLimit8 = 5;\\n for (var i8 = Math.ceil(opt_data.rating); i8 < iLimit8; i8 += 1) {\\n output += nullSafe(((opt_data.emptyStarIcon) != null ? opt_data.emptyStarIcon : '\\\\u003Cspan class\\\\u003D\\\\\\\"c-ReviewStars-star fa fa-star-o\\\\\\\" aria-hidden\\\\u003D\\\\\\\"true\\\\\\\"font\\\\u003E\\\\u003C/span\\\\u003E'));\\n }\\n output += '\\\\u003C/div\\\\u003E';\\n return output;\\n};\\n\\ncomponents.reviews_list = function(opt_data, opt_sb, opt_ijData) {\\n var output = '';\\n output += '\\\\u003Cul class\\\\u003D\\\\\\\"c-ReviewsList\\\\\\\" data-total\\\\u003D\\\\\\\"';\\n output += nullSafe(opt_data.reviews.recent.length);\\n output += '\\\\\\\" data-showdesktop\\\\u003D\\\\\\\"';\\n output += nullSafe(opt_data.reviewsPerSlideDesktop);\\n output += '\\\\\\\"';\\n output += ' ';\\n output += 'data-showmobile\\\\u003D\\\\\\\"';\\n output += nullSafe(opt_data.reviewsPerSlideMobile);\\n output += '\\\\\\\" data-mobilebreakpoint\\\\u003D\\\\\\\"';\\n output += nullSafe(opt_data.mobileBreakpoint);\\n output += '\\\\\\\"\\\\u003E';\\n var reviewList9 = opt_data.reviews.recent;\\n var reviewLimit9 = reviewList9.length;\\n for (var reviewIndex9 = 0; reviewIndex9 < reviewLimit9; reviewIndex9++) {\\n var review9 = reviewList9[reviewIndex9];\\n output += '\\\\u003Cli class\\\\u003D\\\\\\\"c-ReviewsList-item\\\\\\\"\\\\u003E';\\n output += components.review(soy.$$augmentMap(review9, {dateFormatString: opt_data.dateFormatString, fullStarIcon: opt_data.fullStarIcon, halfStarIcon: opt_data.halfStarIcon, emptyStarIcon: opt_data.emptyStarIcon, brandName: opt_data.brandName}), opt_sb, opt_ijData);\\n output += '\\\\u003C/li\\\\u003E';\\n }\\n output += '\\\\u003C/ul\\\\u003E';\\n return output;\\n};\\n\\ncomponents.review = function(opt_data, opt_sb, opt_ijData) {\\n var output = '';\\n output += '\\\\u003Cdiv class\\\\u003D\\\\\\\"c-Review\\\\\\\" itemprop\\\\u003D\\\\\\\"review\\\\\\\" itemscope itemtype\\\\u003D\\\\\\\"http://schema.org/Review\\\\\\\"\\\\u003E\\\\u003Cdiv class\\\\u003D\\\\\\\"c-Review-body\\\\\\\"\\\\u003E\\\\u003Cdiv class\\\\u003D\\\\\\\"c-Review-author\\\\\\\" itemprop\\\\u003D\\\\\\\"author\\\\\\\" itemscope itemtype\\\\u003D\\\\\\\"http://schema.org/Person\\\\\\\"\\\\u003E\\\\u003Cspan itemprop\\\\u003D\\\\\\\"name\\\\\\\"\\\\u003E';\\n output += nullSafe(opt_data.authorName);\\n output += '\\\\u003C/span\\\\u003E\\\\u003C/div\\\\u003E\\\\u003Cdiv class\\\\u003D\\\\\\\"c-Review-stars\\\\\\\" itemprop\\\\u003D\\\\\\\"reviewRating\\\\\\\" itemscope itemtype\\\\u003D\\\\\\\"http://schema.org/Rating\\\\\\\"\\\\u003E\\\\u003Cmeta itemprop\\\\u003D\\\\\\\"worstRating\\\\\\\" content\\\\u003D\\\\\\\"1\\\\\\\"\\\\u003E\\\\u003Cmeta itemprop\\\\u003D\\\\\\\"bestRating\\\\\\\" content\\\\u003D\\\\\\\"5\\\\\\\"\\\\u003E\\\\u003Cmeta itemprop\\\\u003D\\\\\\\"ratingValue\\\\\\\" content\\\\u003D\\\\\\\"';\\n output += nullSafe(opt_data.rating);\\n output += '\\\\\\\"\\\\u003E';\\n output += components.review_stars(soy.$$augmentMap(opt_data, {rating: opt_data.rating}), opt_sb, opt_ijData);\\n output += '\\\\u003C/div\\\\u003E\\\\u003Cdiv class\\\\u003D\\\\\\\"c-Review-date\\\\\\\" itemprop\\\\u003D\\\\\\\"datePublished\\\\\\\"\\\\u003E';\\n var dateFormat10 = ((opt_data.dateFormatString) != null ? opt_data.dateFormatString : 'DateFormatLong');\\n output += nullSafe(Yext.Pages.Soy.Funcs.ltimestampf('en_US',dateFormat10,opt_data.reviewDate));\\n output += '\\\\u003C/div\\\\u003E\\\\u003Cdiv class\\\\u003D\\\\\\\"c-Review-content\\\\\\\" itemprop\\\\u003D\\\\\\\"reviewBody\\\\\\\"\\\\u003E';\\n output += soy.$$changeNewlineToBr(nullSafe(opt_data.content));\\n output += '\\\\u003C/div\\\\u003E\\\\u003C/div\\\\u003E';\\n if (((opt_data.comments.length) > (0))) {\\n output += '\\\\u003Cdiv class\\\\u003D\\\\\\\"c-Review-comment\\\\\\\"\\\\u003E';\\n var commentList11 = opt_data.comments;\\n var commentLimit11 = commentList11.length;\\n for (var commentIndex11 = 0; commentIndex11 < commentLimit11; commentIndex11++) {\\n var comment11 = commentList11[commentIndex11];\\n if (comment11.isOwnerResponse) {\\n output += components.review_comment(soy.$$augmentMap(opt_data, {comment: comment11}), opt_sb, opt_ijData);\\n }\\n }\\n output += '\\\\u003C/div\\\\u003E';\\n }\\n output += '\\\\u003C/div\\\\u003E';\\n return output;\\n};\\n\\ncomponents.review_comment = function(opt_data, opt_sb, opt_ijData) {\\n var output = '';\\n output += '\\\\u003Cdiv class\\\\u003D\\\\\\\"c-ReviewComment\\\\\\\" itemscope itemprop\\\\u003D\\\\\\\"comment\\\\\\\" itemtype\\\\u003D\\\\\\\"http://schema.org/Comment\\\\\\\"\\\\u003E\\\\u003Cdiv class\\\\u003D\\\\\\\"c-ReviewComment-title\\\\\\\" itemprop\\\\u003D\\\\\\\"name\\\\\\\"\\\\u003EResponse from ';\\n output += nullSafe(opt_data.brandName);\\n output += '\\\\u003C/div\\\\u003E\\\\u003Cdiv class\\\\u003D\\\\\\\"c-ReviewComment-author\\\\\\\" itemprop\\\\u003D\\\\\\\"author\\\\\\\" itemscope itemtype\\\\u003D\\\\\\\"http://schema.org/Organization\\\\\\\"\\\\u003E\\\\u003Cmeta itemprop\\\\u003D\\\\\\\"name\\\\\\\" content\\\\u003D\\\\\\\"';\\n output += nullSafe(opt_data.brandName);\\n output += '\\\\\\\" /\\\\u003E\\\\u003C/div\\\\u003E\\\\u003Cdiv class\\\\u003D\\\\\\\"c-ReviewComment-date\\\\\\\" itemprop\\\\u003D\\\\\\\"datePublished\\\\\\\"\\\\u003E';\\n var dateFormat12 = ((opt_data.dateFormatString) != null ? opt_data.dateFormatString : 'DateFormatLong');\\n output += nullSafe(Yext.Pages.Soy.Funcs.ltimestampf('en_US',dateFormat12,opt_data.comment.date));\\n output += '\\\\u003C/div\\\\u003E\\\\u003Cdiv class\\\\u003D\\\\\\\"c-ReviewComment-content\\\\\\\" itemprop\\\\u003D\\\\\\\"text\\\\\\\"\\\\u003E';\\n output += soy.$$changeNewlineToBr(nullSafe(opt_data.comment.content));\\n output += '\\\\u003C/div\\\\u003E\\\\u003C/div\\\\u003E';\\n return output;\\n};\\n\\ncomponents.reviews_summary = function(opt_data, opt_sb, opt_ijData) {\\n var output = '';\\n if (((opt_data.reviews.total) != null ? opt_data.reviews.total : ((0) > (0)))) {\\n output += '\\\\u003Cdiv class\\\\u003D\\\\\\\"c-ReviewsSummary\\\\\\\" ';\\n if (!(opt_data.hideSchema)) {\\n output += 'itemprop\\\\u003D\\\\\\\"aggregateRating\\\\\\\" itemscope itemtype\\\\u003D\\\\\\\"http://schema.org/AggregateRating\\\\\\\"';\\n }\\n output += '\\\\u003E\\\\u003Cspan class\\\\u003D\\\\\\\"c-ReviewsSummary-number\\\\\\\" ';\\n if (!(opt_data.hideSchema)) {\\n output += 'itemprop\\\\u003D\\\\\\\"ratingValue\\\\\\\"';\\n }\\n output += '\\\\u003E';\\n output += nullSafe(Math.floor(opt_data.reviews.averageRating));\\n output += '.';\\n output += nullSafe(Math.floor(((10) * (((opt_data.reviews.averageRating) - (Math.floor(opt_data.reviews.averageRating)))))));\\n output += '\\\\u003C/span\\\\u003E\\\\u003Cspan class\\\\u003D\\\\\\\"c-ReviewsSummary-stars\\\\\\\"\\\\u003E';\\n output += components.review_stars(soy.$$augmentMap(opt_data, {rating: opt_data.reviews.averageRating}), opt_sb, opt_ijData);\\n output += '\\\\u003C/span\\\\u003E\\\\u003Cspan class\\\\u003D\\\\\\\"c-ReviewsSummary-count\\\\\\\"\\\\u003E';\\n if (!(opt_data.hideSchema)) {\\n output += '\\\\u003Cmeta itemprop\\\\u003D\\\\\\\"reviewCount\\\\\\\" content\\\\u003D\\\\\\\"';\\n output += nullSafe(opt_data.reviews.total);\\n output += '\\\\\\\"\\\\u003E';\\n }\\n if (opt_data.totalMessage) {\\n output += nullSafe(opt_data.totalMessage);\\n } else {\\n output += nullSafe(opt_data.reviews.total);\\n output += ' ';\\n output += 'Total Reviews';\\n }\\n output += '\\\\u003C/span\\\\u003E\\\\u003C/div\\\\u003E';\\n }\\n return output;\\n};\\nvar nullSafe = function(x) {return x == null ? '' : x};\"","require(\"!!/Users/htamirepi/repo/stores.petit-bateau.com/src/node_modules/script-loader/addScript.js\")(require(\"!!/Users/htamirepi/repo/stores.petit-bateau.com/src/node_modules/raw-loader/index.js!/Users/htamirepi/repo/stores.petit-bateau.com/src/.tmp/js/templates/components/Reviews/Reviews.js\"))","module.exports = \"/*\\n _ _ _ _\\n ___| (_) ___| | __ (_)___\\n/ __| | |/ __| |/ / | / __|\\n\\\\__ \\\\ | | (__| < _ | \\\\__ \\\\\\n|___/_|_|\\\\___|_|\\\\_(_)/ |___/\\n |__/\\n\\n Version: 1.6.0\\n Author: Ken Wheeler\\n Website: http://kenwheeler.github.io\\n Docs: http://kenwheeler.github.io/slick\\n Repo: http://github.com/kenwheeler/slick\\n Issues: http://github.com/kenwheeler/slick/issues\\n\\n */\\n/* global window, document, define, jQuery, setInterval, clearInterval */\\n;(function(factory) {\\n 'use strict';\\n if (typeof define === 'function' && define.amd) {\\n define(['jquery'], factory);\\n } else if (typeof exports !== 'undefined') {\\n module.exports = factory(require('jquery'));\\n } else {\\n factory(jQuery);\\n }\\n\\n}(function($) {\\n 'use strict';\\n var Slick = window.Slick || {};\\n\\n Slick = (function() {\\n\\n var instanceUid = 0;\\n\\n function Slick(element, settings) {\\n\\n var _ = this, dataSettings;\\n\\n _.defaults = {\\n accessibility: true,\\n adaptiveHeight: false,\\n appendArrows: $(element),\\n appendDots: $(element),\\n arrows: true,\\n asNavFor: null,\\n prevArrow: 'Previous ',\\n nextArrow: 'Next ',\\n autoplay: false,\\n autoplaySpeed: 3000,\\n centerMode: false,\\n centerPadding: '50px',\\n cssEase: 'ease',\\n customPaging: function(slider, i) {\\n return $(' ').text(i + 1);\\n },\\n dots: false,\\n dotsClass: 'slick-dots',\\n draggable: true,\\n easing: 'linear',\\n edgeFriction: 0.35,\\n fade: false,\\n focusOnSelect: false,\\n infinite: true,\\n initialSlide: 0,\\n lazyLoad: 'ondemand',\\n mobileFirst: false,\\n pauseOnHover: true,\\n pauseOnFocus: true,\\n pauseOnDotsHover: false,\\n respondTo: 'window',\\n responsive: null,\\n rows: 1,\\n rtl: false,\\n slide: '',\\n slidesPerRow: 1,\\n slidesToShow: 1,\\n slidesToScroll: 1,\\n speed: 500,\\n swipe: true,\\n swipeToSlide: false,\\n touchMove: true,\\n touchThreshold: 5,\\n useCSS: true,\\n useTransform: true,\\n variableWidth: false,\\n vertical: false,\\n verticalSwiping: false,\\n waitForAnimate: true,\\n zIndex: 1000\\n };\\n\\n _.initials = {\\n animating: false,\\n dragging: false,\\n autoPlayTimer: null,\\n currentDirection: 0,\\n currentLeft: null,\\n currentSlide: 0,\\n direction: 1,\\n $dots: null,\\n listWidth: null,\\n listHeight: null,\\n loadIndex: 0,\\n $nextArrow: null,\\n $prevArrow: null,\\n scrolling: false,\\n slideCount: null,\\n slideWidth: null,\\n $slideTrack: null,\\n $slides: null,\\n sliding: false,\\n slideOffset: 0,\\n swipeLeft: null,\\n swiping: false,\\n $list: null,\\n touchObject: {},\\n transformsEnabled: false,\\n unslicked: false\\n };\\n\\n $.extend(_, _.initials);\\n\\n _.activeBreakpoint = null;\\n _.animType = null;\\n _.animProp = null;\\n _.breakpoints = [];\\n _.breakpointSettings = [];\\n _.cssTransitions = false;\\n _.focussed = false;\\n _.interrupted = false;\\n _.hidden = 'hidden';\\n _.paused = true;\\n _.positionProp = null;\\n _.respondTo = null;\\n _.rowCount = 1;\\n _.shouldClick = true;\\n _.$slider = $(element);\\n _.$slidesCache = null;\\n _.transformType = null;\\n _.transitionType = null;\\n _.visibilityChange = 'visibilitychange';\\n _.windowWidth = 0;\\n _.windowTimer = null;\\n\\n dataSettings = $(element).data('slick') || {};\\n\\n _.options = $.extend({}, _.defaults, settings, dataSettings);\\n\\n _.currentSlide = _.options.initialSlide;\\n\\n _.originalSettings = _.options;\\n\\n if (typeof document.mozHidden !== 'undefined') {\\n _.hidden = 'mozHidden';\\n _.visibilityChange = 'mozvisibilitychange';\\n } else if (typeof document.webkitHidden !== 'undefined') {\\n _.hidden = 'webkitHidden';\\n _.visibilityChange = 'webkitvisibilitychange';\\n }\\n\\n _.autoPlay = $.proxy(_.autoPlay, _);\\n _.autoPlayClear = $.proxy(_.autoPlayClear, _);\\n _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);\\n _.changeSlide = $.proxy(_.changeSlide, _);\\n _.clickHandler = $.proxy(_.clickHandler, _);\\n _.selectHandler = $.proxy(_.selectHandler, _);\\n _.setPosition = $.proxy(_.setPosition, _);\\n _.swipeHandler = $.proxy(_.swipeHandler, _);\\n _.dragHandler = $.proxy(_.dragHandler, _);\\n _.keyHandler = $.proxy(_.keyHandler, _);\\n\\n _.instanceUid = instanceUid++;\\n\\n // A simple way to check for HTML strings\\n // Strict HTML recognition (must start with <)\\n // Extracted from jQuery v1.11 source\\n _.htmlExpr = /^(?:\\\\s*(<[\\\\w\\\\W]+>)[^>]*)$/;\\n\\n\\n _.registerBreakpoints();\\n _.init(true);\\n\\n }\\n\\n return Slick;\\n\\n }());\\n\\n Slick.prototype.activateADA = function() {\\n var _ = this;\\n\\n _.$slideTrack.find('.slick-active').attr({\\n 'aria-hidden': 'false'\\n }).find('a, input, button, select').attr({\\n 'tabindex': '0'\\n });\\n\\n };\\n\\n Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {\\n\\n var _ = this;\\n\\n if (typeof(index) === 'boolean') {\\n addBefore = index;\\n index = null;\\n } else if (index < 0 || (index >= _.slideCount)) {\\n return false;\\n }\\n\\n _.unload();\\n\\n if (typeof(index) === 'number') {\\n if (index === 0 && _.$slides.length === 0) {\\n $(markup).appendTo(_.$slideTrack);\\n } else if (addBefore) {\\n $(markup).insertBefore(_.$slides.eq(index));\\n } else {\\n $(markup).insertAfter(_.$slides.eq(index));\\n }\\n } else {\\n if (addBefore === true) {\\n $(markup).prependTo(_.$slideTrack);\\n } else {\\n $(markup).appendTo(_.$slideTrack);\\n }\\n }\\n\\n _.$slides = _.$slideTrack.children(this.options.slide);\\n\\n _.$slideTrack.children(this.options.slide).detach();\\n\\n _.$slideTrack.append(_.$slides);\\n\\n _.$slides.each(function(index, element) {\\n $(element).attr('data-slick-index', index);\\n });\\n\\n _.$slidesCache = _.$slides;\\n\\n _.reinit();\\n\\n };\\n\\n Slick.prototype.animateHeight = function() {\\n var _ = this;\\n if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\\n var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\\n _.$list.animate({\\n height: targetHeight\\n }, _.options.speed);\\n }\\n };\\n\\n Slick.prototype.animateSlide = function(targetLeft, callback) {\\n\\n var animProps = {},\\n _ = this;\\n\\n _.animateHeight();\\n\\n if (_.options.rtl === true && _.options.vertical === false) {\\n targetLeft = -targetLeft;\\n }\\n if (_.transformsEnabled === false) {\\n if (_.options.vertical === false) {\\n _.$slideTrack.animate({\\n left: targetLeft\\n }, _.options.speed, _.options.easing, callback);\\n } else {\\n _.$slideTrack.animate({\\n top: targetLeft\\n }, _.options.speed, _.options.easing, callback);\\n }\\n\\n } else {\\n\\n if (_.cssTransitions === false) {\\n if (_.options.rtl === true) {\\n _.currentLeft = -(_.currentLeft);\\n }\\n $({\\n animStart: _.currentLeft\\n }).animate({\\n animStart: targetLeft\\n }, {\\n duration: _.options.speed,\\n easing: _.options.easing,\\n step: function(now) {\\n now = Math.ceil(now);\\n if (_.options.vertical === false) {\\n animProps[_.animType] = 'translate(' +\\n now + 'px, 0px)';\\n _.$slideTrack.css(animProps);\\n } else {\\n animProps[_.animType] = 'translate(0px,' +\\n now + 'px)';\\n _.$slideTrack.css(animProps);\\n }\\n },\\n complete: function() {\\n if (callback) {\\n callback.call();\\n }\\n }\\n });\\n\\n } else {\\n\\n _.applyTransition();\\n targetLeft = Math.ceil(targetLeft);\\n\\n if (_.options.vertical === false) {\\n animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';\\n } else {\\n animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';\\n }\\n _.$slideTrack.css(animProps);\\n\\n if (callback) {\\n setTimeout(function() {\\n\\n _.disableTransition();\\n\\n callback.call();\\n }, _.options.speed);\\n }\\n\\n }\\n\\n }\\n\\n };\\n\\n Slick.prototype.getNavTarget = function() {\\n\\n var _ = this,\\n asNavFor = _.options.asNavFor;\\n\\n if ( asNavFor && asNavFor !== null ) {\\n asNavFor = $(asNavFor).not(_.$slider);\\n }\\n\\n return asNavFor;\\n\\n };\\n\\n Slick.prototype.asNavFor = function(index) {\\n\\n var _ = this,\\n asNavFor = _.getNavTarget();\\n\\n if ( asNavFor !== null && typeof asNavFor === 'object' ) {\\n asNavFor.each(function() {\\n var target = $(this).slick('getSlick');\\n if(!target.unslicked) {\\n target.slideHandler(index, true);\\n }\\n });\\n }\\n\\n };\\n\\n Slick.prototype.applyTransition = function(slide) {\\n\\n var _ = this,\\n transition = {};\\n\\n if (_.options.fade === false) {\\n transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;\\n } else {\\n transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;\\n }\\n\\n if (_.options.fade === false) {\\n _.$slideTrack.css(transition);\\n } else {\\n _.$slides.eq(slide).css(transition);\\n }\\n\\n };\\n\\n Slick.prototype.autoPlay = function() {\\n\\n var _ = this;\\n\\n _.autoPlayClear();\\n\\n if ( _.slideCount > _.options.slidesToShow ) {\\n _.autoPlayTimer = setInterval( _.autoPlayIterator, _.options.autoplaySpeed );\\n }\\n\\n };\\n\\n Slick.prototype.autoPlayClear = function() {\\n\\n var _ = this;\\n\\n if (_.autoPlayTimer) {\\n clearInterval(_.autoPlayTimer);\\n }\\n\\n };\\n\\n Slick.prototype.autoPlayIterator = function() {\\n\\n var _ = this,\\n slideTo = _.currentSlide + _.options.slidesToScroll;\\n\\n if ( !_.paused && !_.interrupted && !_.focussed ) {\\n\\n if ( _.options.infinite === false ) {\\n\\n if ( _.direction === 1 && ( _.currentSlide + 1 ) === ( _.slideCount - 1 )) {\\n _.direction = 0;\\n }\\n\\n else if ( _.direction === 0 ) {\\n\\n slideTo = _.currentSlide - _.options.slidesToScroll;\\n\\n if ( _.currentSlide - 1 === 0 ) {\\n _.direction = 1;\\n }\\n\\n }\\n\\n }\\n\\n _.slideHandler( slideTo );\\n\\n }\\n\\n };\\n\\n Slick.prototype.buildArrows = function() {\\n\\n var _ = this;\\n\\n if (_.options.arrows === true ) {\\n\\n _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');\\n _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');\\n\\n if( _.slideCount > _.options.slidesToShow ) {\\n\\n _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');\\n _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');\\n\\n if (_.htmlExpr.test(_.options.prevArrow)) {\\n _.$prevArrow.prependTo(_.options.appendArrows);\\n }\\n\\n if (_.htmlExpr.test(_.options.nextArrow)) {\\n _.$nextArrow.appendTo(_.options.appendArrows);\\n }\\n\\n if (_.options.infinite !== true) {\\n _.$prevArrow\\n .addClass('slick-disabled')\\n .attr('aria-disabled', 'true');\\n }\\n\\n } else {\\n\\n _.$prevArrow.add( _.$nextArrow )\\n\\n .addClass('slick-hidden')\\n .attr({\\n 'aria-disabled': 'true',\\n 'tabindex': '-1'\\n });\\n\\n }\\n\\n }\\n\\n };\\n\\n Slick.prototype.buildDots = function() {\\n\\n var _ = this,\\n i, dot;\\n\\n if (_.options.dots === true) {\\n\\n _.$slider.addClass('slick-dotted');\\n\\n dot = $('').addClass(_.options.dotsClass);\\n\\n for (i = 0; i <= _.getDotCount(); i += 1) {\\n dot.append($(' ').append(_.options.customPaging.call(this, _, i)));\\n }\\n\\n _.$dots = dot.appendTo(_.options.appendDots);\\n\\n _.$dots.find('li').first().addClass('slick-active');\\n\\n }\\n\\n };\\n\\n Slick.prototype.buildOut = function() {\\n\\n var _ = this;\\n\\n _.$slides =\\n _.$slider\\n .children( _.options.slide + ':not(.slick-cloned)')\\n .addClass('slick-slide');\\n\\n _.slideCount = _.$slides.length;\\n\\n _.$slides.each(function(index, element) {\\n $(element)\\n .attr('data-slick-index', index)\\n .data('originalStyling', $(element).attr('style') || '');\\n });\\n\\n _.$slider.addClass('slick-slider');\\n\\n _.$slideTrack = (_.slideCount === 0) ?\\n $('').appendTo(_.$slider) :\\n _.$slides.wrapAll('
').parent();\\n\\n _.$list = _.$slideTrack.wrap(\\n '
').parent();\\n _.$slideTrack.css('opacity', 0);\\n\\n if (_.options.centerMode === true || _.options.swipeToSlide === true) {\\n _.options.slidesToScroll = 1;\\n }\\n\\n $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');\\n\\n _.setupInfinite();\\n\\n _.buildArrows();\\n\\n _.buildDots();\\n\\n _.updateDots();\\n\\n\\n _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);\\n\\n if (_.options.draggable === true) {\\n _.$list.addClass('draggable');\\n }\\n\\n };\\n\\n Slick.prototype.buildRows = function() {\\n\\n var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;\\n\\n newSlides = document.createDocumentFragment();\\n originalSlides = _.$slider.children();\\n\\n if(_.options.rows > 1) {\\n\\n slidesPerSection = _.options.slidesPerRow * _.options.rows;\\n numOfSlides = Math.ceil(\\n originalSlides.length / slidesPerSection\\n );\\n\\n for(a = 0; a < numOfSlides; a++){\\n var slide = document.createElement('div');\\n for(b = 0; b < _.options.rows; b++) {\\n var row = document.createElement('div');\\n for(c = 0; c < _.options.slidesPerRow; c++) {\\n var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));\\n if (originalSlides.get(target)) {\\n row.appendChild(originalSlides.get(target));\\n }\\n }\\n slide.appendChild(row);\\n }\\n newSlides.appendChild(slide);\\n }\\n\\n _.$slider.empty().append(newSlides);\\n _.$slider.children().children().children()\\n .css({\\n 'width':(100 / _.options.slidesPerRow) + '%',\\n 'display': 'inline-block'\\n });\\n\\n }\\n\\n };\\n\\n Slick.prototype.checkResponsive = function(initial, forceUpdate) {\\n\\n var _ = this,\\n breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;\\n var sliderWidth = _.$slider.width();\\n var windowWidth = window.innerWidth || $(window).width();\\n\\n if (_.respondTo === 'window') {\\n respondToWidth = windowWidth;\\n } else if (_.respondTo === 'slider') {\\n respondToWidth = sliderWidth;\\n } else if (_.respondTo === 'min') {\\n respondToWidth = Math.min(windowWidth, sliderWidth);\\n }\\n\\n if ( _.options.responsive &&\\n _.options.responsive.length &&\\n _.options.responsive !== null) {\\n\\n targetBreakpoint = null;\\n\\n for (breakpoint in _.breakpoints) {\\n if (_.breakpoints.hasOwnProperty(breakpoint)) {\\n if (_.originalSettings.mobileFirst === false) {\\n if (respondToWidth < _.breakpoints[breakpoint]) {\\n targetBreakpoint = _.breakpoints[breakpoint];\\n }\\n } else {\\n if (respondToWidth > _.breakpoints[breakpoint]) {\\n targetBreakpoint = _.breakpoints[breakpoint];\\n }\\n }\\n }\\n }\\n\\n if (targetBreakpoint !== null) {\\n if (_.activeBreakpoint !== null) {\\n if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {\\n _.activeBreakpoint =\\n targetBreakpoint;\\n if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\\n _.unslick(targetBreakpoint);\\n } else {\\n _.options = $.extend({}, _.originalSettings,\\n _.breakpointSettings[\\n targetBreakpoint]);\\n if (initial === true) {\\n _.currentSlide = _.options.initialSlide;\\n }\\n _.refresh(initial);\\n }\\n triggerBreakpoint = targetBreakpoint;\\n }\\n } else {\\n _.activeBreakpoint = targetBreakpoint;\\n if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\\n _.unslick(targetBreakpoint);\\n } else {\\n _.options = $.extend({}, _.originalSettings,\\n _.breakpointSettings[\\n targetBreakpoint]);\\n if (initial === true) {\\n _.currentSlide = _.options.initialSlide;\\n }\\n _.refresh(initial);\\n }\\n triggerBreakpoint = targetBreakpoint;\\n }\\n } else {\\n if (_.activeBreakpoint !== null) {\\n _.activeBreakpoint = null;\\n _.options = _.originalSettings;\\n if (initial === true) {\\n _.currentSlide = _.options.initialSlide;\\n }\\n _.refresh(initial);\\n triggerBreakpoint = targetBreakpoint;\\n }\\n }\\n\\n // only trigger breakpoints during an actual break. not on initialize.\\n if( !initial && triggerBreakpoint !== false ) {\\n _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);\\n }\\n }\\n\\n };\\n\\n Slick.prototype.changeSlide = function(event, dontAnimate) {\\n\\n var _ = this,\\n $target = $(event.currentTarget),\\n indexOffset, slideOffset, unevenOffset;\\n\\n // If target is a link, prevent default action.\\n if($target.is('a')) {\\n event.preventDefault();\\n }\\n\\n // If target is not the
element (ie: a child), find the .\\n if(!$target.is('li')) {\\n $target = $target.closest('li');\\n }\\n\\n unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);\\n indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;\\n\\n switch (event.data.message) {\\n\\n case 'previous':\\n slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;\\n if (_.slideCount > _.options.slidesToShow) {\\n _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);\\n }\\n break;\\n\\n case 'next':\\n slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;\\n if (_.slideCount > _.options.slidesToShow) {\\n _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);\\n }\\n break;\\n\\n case 'index':\\n var index = event.data.index === 0 ? 0 :\\n event.data.index || $target.index() * _.options.slidesToScroll;\\n\\n _.slideHandler(_.checkNavigable(index), false, dontAnimate);\\n $target.children().trigger('focus');\\n break;\\n\\n default:\\n return;\\n }\\n\\n };\\n\\n Slick.prototype.checkNavigable = function(index) {\\n\\n var _ = this,\\n navigables, prevNavigable;\\n\\n navigables = _.getNavigableIndexes();\\n prevNavigable = 0;\\n if (index > navigables[navigables.length - 1]) {\\n index = navigables[navigables.length - 1];\\n } else {\\n for (var n in navigables) {\\n if (index < navigables[n]) {\\n index = prevNavigable;\\n break;\\n }\\n prevNavigable = navigables[n];\\n }\\n }\\n\\n return index;\\n };\\n\\n Slick.prototype.cleanUpEvents = function() {\\n\\n var _ = this;\\n\\n if (_.options.dots && _.$dots !== null) {\\n\\n $('li', _.$dots)\\n .off('click.slick', _.changeSlide)\\n .off('mouseenter.slick', $.proxy(_.interrupt, _, true))\\n .off('mouseleave.slick', $.proxy(_.interrupt, _, false));\\n\\n if (_.options.accessibility === true) {\\n _.$dots.off('keydown.slick', _.keyHandler);\\n }\\n }\\n\\n _.$slider.off('focus.slick blur.slick');\\n\\n if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\\n _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);\\n _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);\\n\\n if (_.options.accessibility === true) {\\n _.$prevArrow.off('keydown.slick', _.keyHandler);\\n _.$nextArrow.off('keydown.slick', _.keyHandler);\\n }\\n }\\n\\n _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);\\n _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);\\n _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);\\n _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);\\n\\n _.$list.off('click.slick', _.clickHandler);\\n\\n $(document).off(_.visibilityChange, _.visibility);\\n\\n _.cleanUpSlideEvents();\\n\\n if (_.options.accessibility === true) {\\n _.$list.off('keydown.slick', _.keyHandler);\\n }\\n\\n if (_.options.focusOnSelect === true) {\\n $(_.$slideTrack).children().off('click.slick', _.selectHandler);\\n }\\n\\n $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);\\n\\n $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);\\n\\n $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);\\n\\n $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);\\n\\n };\\n\\n Slick.prototype.cleanUpSlideEvents = function() {\\n\\n var _ = this;\\n\\n _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true));\\n _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false));\\n\\n };\\n\\n Slick.prototype.cleanUpRows = function() {\\n\\n var _ = this, originalSlides;\\n\\n if(_.options.rows > 1) {\\n originalSlides = _.$slides.children().children();\\n originalSlides.removeAttr('style');\\n _.$slider.empty().append(originalSlides);\\n }\\n\\n };\\n\\n Slick.prototype.clickHandler = function(event) {\\n\\n var _ = this;\\n\\n if (_.shouldClick === false) {\\n event.stopImmediatePropagation();\\n event.stopPropagation();\\n event.preventDefault();\\n }\\n\\n };\\n\\n Slick.prototype.destroy = function(refresh) {\\n\\n var _ = this;\\n\\n _.autoPlayClear();\\n\\n _.touchObject = {};\\n\\n _.cleanUpEvents();\\n\\n $('.slick-cloned', _.$slider).detach();\\n\\n if (_.$dots) {\\n _.$dots.remove();\\n }\\n\\n if ( _.$prevArrow && _.$prevArrow.length ) {\\n\\n _.$prevArrow\\n .removeClass('slick-disabled slick-arrow slick-hidden')\\n .removeAttr('aria-hidden aria-disabled tabindex')\\n .css('display','');\\n\\n if ( _.htmlExpr.test( _.options.prevArrow )) {\\n _.$prevArrow.remove();\\n }\\n }\\n\\n if ( _.$nextArrow && _.$nextArrow.length ) {\\n\\n _.$nextArrow\\n .removeClass('slick-disabled slick-arrow slick-hidden')\\n .removeAttr('aria-hidden aria-disabled tabindex')\\n .css('display','');\\n\\n if ( _.htmlExpr.test( _.options.nextArrow )) {\\n _.$nextArrow.remove();\\n }\\n }\\n\\n\\n if (_.$slides) {\\n\\n _.$slides\\n .removeClass('slick-slide slick-active slick-center slick-visible slick-current')\\n .removeAttr('aria-hidden')\\n .removeAttr('data-slick-index')\\n .each(function(){\\n $(this).attr('style', $(this).data('originalStyling'));\\n });\\n\\n _.$slideTrack.children(this.options.slide).detach();\\n\\n _.$slideTrack.detach();\\n\\n _.$list.detach();\\n\\n _.$slider.append(_.$slides);\\n }\\n\\n _.cleanUpRows();\\n\\n _.$slider.removeClass('slick-slider');\\n _.$slider.removeClass('slick-initialized');\\n _.$slider.removeClass('slick-dotted');\\n\\n _.unslicked = true;\\n\\n if(!refresh) {\\n _.$slider.trigger('destroy', [_]);\\n }\\n\\n };\\n\\n Slick.prototype.disableTransition = function(slide) {\\n\\n var _ = this,\\n transition = {};\\n\\n transition[_.transitionType] = '';\\n\\n if (_.options.fade === false) {\\n _.$slideTrack.css(transition);\\n } else {\\n _.$slides.eq(slide).css(transition);\\n }\\n\\n };\\n\\n Slick.prototype.fadeSlide = function(slideIndex, callback) {\\n\\n var _ = this;\\n\\n if (_.cssTransitions === false) {\\n\\n _.$slides.eq(slideIndex).css({\\n zIndex: _.options.zIndex\\n });\\n\\n _.$slides.eq(slideIndex).animate({\\n opacity: 1\\n }, _.options.speed, _.options.easing, callback);\\n\\n } else {\\n\\n _.applyTransition(slideIndex);\\n\\n _.$slides.eq(slideIndex).css({\\n opacity: 1,\\n zIndex: _.options.zIndex\\n });\\n\\n if (callback) {\\n setTimeout(function() {\\n\\n _.disableTransition(slideIndex);\\n\\n callback.call();\\n }, _.options.speed);\\n }\\n\\n }\\n\\n };\\n\\n Slick.prototype.fadeSlideOut = function(slideIndex) {\\n\\n var _ = this;\\n\\n if (_.cssTransitions === false) {\\n\\n _.$slides.eq(slideIndex).animate({\\n opacity: 0,\\n zIndex: _.options.zIndex - 2\\n }, _.options.speed, _.options.easing);\\n\\n } else {\\n\\n _.applyTransition(slideIndex);\\n\\n _.$slides.eq(slideIndex).css({\\n opacity: 0,\\n zIndex: _.options.zIndex - 2\\n });\\n\\n }\\n\\n };\\n\\n Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {\\n\\n var _ = this;\\n\\n if (filter !== null) {\\n\\n _.$slidesCache = _.$slides;\\n\\n _.unload();\\n\\n _.$slideTrack.children(this.options.slide).detach();\\n\\n _.$slidesCache.filter(filter).appendTo(_.$slideTrack);\\n\\n _.reinit();\\n\\n }\\n\\n };\\n\\n Slick.prototype.focusHandler = function() {\\n\\n var _ = this;\\n\\n _.$slider\\n .off('focus.slick blur.slick')\\n .on('focus.slick blur.slick', '*', function(event) {\\n\\n event.stopImmediatePropagation();\\n var $sf = $(this);\\n\\n setTimeout(function() {\\n\\n if( _.options.pauseOnFocus ) {\\n _.focussed = $sf.is(':focus');\\n _.autoPlay();\\n }\\n\\n }, 0);\\n\\n });\\n };\\n\\n Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {\\n\\n var _ = this;\\n return _.currentSlide;\\n\\n };\\n\\n Slick.prototype.getDotCount = function() {\\n\\n var _ = this;\\n\\n var breakPoint = 0;\\n var counter = 0;\\n var pagerQty = 0;\\n\\n if (_.options.infinite === true) {\\n if (_.slideCount <= _.options.slidesToShow) {\\n ++pagerQty;\\n } else {\\n while (breakPoint < _.slideCount) {\\n ++pagerQty;\\n breakPoint = counter + _.options.slidesToScroll;\\n counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\\n }\\n }\\n } else if (_.options.centerMode === true) {\\n pagerQty = _.slideCount;\\n } else if(!_.options.asNavFor) {\\n pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);\\n }else {\\n while (breakPoint < _.slideCount) {\\n ++pagerQty;\\n breakPoint = counter + _.options.slidesToScroll;\\n counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\\n }\\n }\\n\\n return pagerQty - 1;\\n\\n };\\n\\n Slick.prototype.getLeft = function(slideIndex) {\\n\\n var _ = this,\\n targetLeft,\\n verticalHeight,\\n verticalOffset = 0,\\n targetSlide;\\n\\n _.slideOffset = 0;\\n verticalHeight = _.$slides.first().outerHeight(true);\\n\\n if (_.options.infinite === true) {\\n if (_.slideCount > _.options.slidesToShow) {\\n _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;\\n verticalOffset = (verticalHeight * _.options.slidesToShow) * -1;\\n }\\n if (_.slideCount % _.options.slidesToScroll !== 0) {\\n if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {\\n if (slideIndex > _.slideCount) {\\n _.slideOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth) * -1;\\n verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;\\n } else {\\n _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;\\n verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;\\n }\\n }\\n }\\n } else {\\n if (slideIndex + _.options.slidesToShow > _.slideCount) {\\n _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;\\n verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;\\n }\\n }\\n\\n if (_.slideCount <= _.options.slidesToShow) {\\n _.slideOffset = 0;\\n verticalOffset = 0;\\n }\\n\\n if (_.options.centerMode === true && _.slideCount <= _.options.slidesToShow) {\\n _.slideOffset = ((_.slideWidth * Math.floor(_.options.slidesToShow)) / 2) - ((_.slideWidth * _.slideCount) / 2);\\n } else if (_.options.centerMode === true && _.options.infinite === true) {\\n _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;\\n } else if (_.options.centerMode === true) {\\n _.slideOffset = 0;\\n _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);\\n }\\n\\n if (_.options.vertical === false) {\\n targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;\\n } else {\\n targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;\\n }\\n\\n if (_.options.variableWidth === true) {\\n\\n if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {\\n targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\\n } else {\\n targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);\\n }\\n\\n if (_.options.rtl === true) {\\n if (targetSlide[0]) {\\n targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;\\n } else {\\n targetLeft = 0;\\n }\\n } else {\\n targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\\n }\\n\\n if (_.options.centerMode === true) {\\n if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {\\n targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\\n } else {\\n targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);\\n }\\n\\n if (_.options.rtl === true) {\\n if (targetSlide[0]) {\\n targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;\\n } else {\\n targetLeft = 0;\\n }\\n } else {\\n targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\\n }\\n\\n targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;\\n }\\n }\\n\\n return targetLeft;\\n\\n };\\n\\n Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {\\n\\n var _ = this;\\n\\n return _.options[option];\\n\\n };\\n\\n Slick.prototype.getNavigableIndexes = function() {\\n\\n var _ = this,\\n breakPoint = 0,\\n counter = 0,\\n indexes = [],\\n max;\\n\\n if (_.options.infinite === false) {\\n max = _.slideCount;\\n } else {\\n breakPoint = _.options.slidesToScroll * -1;\\n counter = _.options.slidesToScroll * -1;\\n max = _.slideCount * 2;\\n }\\n\\n while (breakPoint < max) {\\n indexes.push(breakPoint);\\n breakPoint = counter + _.options.slidesToScroll;\\n counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\\n }\\n\\n return indexes;\\n\\n };\\n\\n Slick.prototype.getSlick = function() {\\n\\n return this;\\n\\n };\\n\\n Slick.prototype.getSlideCount = function() {\\n\\n var _ = this,\\n slidesTraversed, swipedSlide, centerOffset;\\n\\n centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;\\n\\n if (_.options.swipeToSlide === true) {\\n _.$slideTrack.find('.slick-slide').each(function(index, slide) {\\n if (slide.offsetLeft - centerOffset + ($(slide).outerWidth() / 2) > (_.swipeLeft * -1)) {\\n swipedSlide = slide;\\n return false;\\n }\\n });\\n\\n slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;\\n\\n return slidesTraversed;\\n\\n } else {\\n return _.options.slidesToScroll;\\n }\\n\\n };\\n\\n Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {\\n\\n var _ = this;\\n\\n _.changeSlide({\\n data: {\\n message: 'index',\\n index: parseInt(slide)\\n }\\n }, dontAnimate);\\n\\n };\\n\\n Slick.prototype.init = function(creation) {\\n\\n var _ = this;\\n\\n if (!$(_.$slider).hasClass('slick-initialized')) {\\n\\n $(_.$slider).addClass('slick-initialized');\\n\\n _.buildRows();\\n _.buildOut();\\n _.setProps();\\n _.startLoad();\\n _.loadSlider();\\n _.initializeEvents();\\n _.updateArrows();\\n _.updateDots();\\n _.checkResponsive(true);\\n _.focusHandler();\\n\\n }\\n\\n if (creation) {\\n _.$slider.trigger('init', [_]);\\n }\\n\\n if (_.options.accessibility === true) {\\n _.initADA();\\n }\\n\\n if ( _.options.autoplay ) {\\n\\n _.paused = false;\\n _.autoPlay();\\n\\n }\\n\\n };\\n\\n Slick.prototype.initADA = function() {\\n var _ = this,\\n numDotGroups = Math.ceil(_.slideCount / _.options.slidesToShow),\\n tabControlIndexes = _.getNavigableIndexes().filter(function(val) {\\n return (val >= 0) && (val < _.slideCount);\\n });\\n\\n _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({\\n 'aria-hidden': 'true',\\n 'tabindex': '-1'\\n }).find('a, input, button, select').attr({\\n 'tabindex': '-1'\\n });\\n\\n if (_.$dots !== null) {\\n _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {\\n var slideControlIndex = tabControlIndexes.indexOf(i);\\n\\n $(this).attr({\\n 'role': 'tabpanel',\\n 'id': 'slick-slide' + _.instanceUid + i,\\n 'tabindex': -1\\n }); \\n\\n if (slideControlIndex !== -1) {\\n $(this).attr({\\n 'aria-describedby': 'slick-slide-control' + _.instanceUid + slideControlIndex\\n });\\n }\\n });\\n\\n _.$dots.attr('role', 'tablist').find('li').each(function(i) {\\n var mappedSlideIndex = tabControlIndexes[i];\\n \\n $(this).attr({\\n 'role': 'presentation'\\n });\\n\\n $(this).find('button').first().attr({\\n 'role': 'tab',\\n 'id': 'slick-slide-control' + _.instanceUid + i,\\n 'aria-controls': 'slick-slide' + _.instanceUid + mappedSlideIndex,\\n 'aria-label': (i + 1) + ' of ' + numDotGroups,\\n 'aria-selected': null,\\n 'tabindex': '-1'\\n });\\n\\n }).eq(_.currentSlide).find('button').attr({\\n 'aria-selected': 'true',\\n 'tabindex': '0'\\n }).end();\\n }\\n\\n for (var i=_.currentSlide, max=i+_.options.slidesToShow; i < max; i++) {\\n _.$slides.eq(i).attr('tabindex', 0);\\n }\\n\\n _.activateADA();\\n\\n };\\n\\n Slick.prototype.initArrowEvents = function() {\\n\\n var _ = this;\\n\\n if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\\n _.$prevArrow\\n .off('click.slick')\\n .on('click.slick', {\\n message: 'previous'\\n }, _.changeSlide);\\n _.$nextArrow\\n .off('click.slick')\\n .on('click.slick', {\\n message: 'next'\\n }, _.changeSlide);\\n\\n if (_.options.accessibility === true) {\\n _.$prevArrow.on('keydown.slick', _.keyHandler);\\n _.$nextArrow.on('keydown.slick', _.keyHandler);\\n } \\n }\\n\\n };\\n\\n Slick.prototype.initDotEvents = function() {\\n\\n var _ = this;\\n\\n if (_.options.dots === true) {\\n $('li', _.$dots).on('click.slick', {\\n message: 'index'\\n }, _.changeSlide);\\n\\n if (_.options.accessibility === true) {\\n _.$dots.on('keydown.slick', _.keyHandler);\\n }\\n }\\n\\n if ( _.options.dots === true && _.options.pauseOnDotsHover === true ) {\\n\\n $('li', _.$dots)\\n .on('mouseenter.slick', $.proxy(_.interrupt, _, true))\\n .on('mouseleave.slick', $.proxy(_.interrupt, _, false));\\n\\n }\\n\\n };\\n\\n Slick.prototype.initSlideEvents = function() {\\n\\n var _ = this;\\n\\n if ( _.options.pauseOnHover ) {\\n\\n _.$list.on('mouseenter.slick', $.proxy(_.interrupt, _, true));\\n _.$list.on('mouseleave.slick', $.proxy(_.interrupt, _, false));\\n\\n }\\n\\n };\\n\\n Slick.prototype.initializeEvents = function() {\\n\\n var _ = this;\\n\\n _.initArrowEvents();\\n\\n _.initDotEvents();\\n _.initSlideEvents();\\n\\n _.$list.on('touchstart.slick mousedown.slick', {\\n action: 'start'\\n }, _.swipeHandler);\\n _.$list.on('touchmove.slick mousemove.slick', {\\n action: 'move'\\n }, _.swipeHandler);\\n _.$list.on('touchend.slick mouseup.slick', {\\n action: 'end'\\n }, _.swipeHandler);\\n _.$list.on('touchcancel.slick mouseleave.slick', {\\n action: 'end'\\n }, _.swipeHandler);\\n\\n _.$list.on('click.slick', _.clickHandler);\\n\\n $(document).on(_.visibilityChange, $.proxy(_.visibility, _));\\n\\n if (_.options.accessibility === true) {\\n _.$list.on('keydown.slick', _.keyHandler);\\n }\\n\\n if (_.options.focusOnSelect === true) {\\n $(_.$slideTrack).children().on('click.slick', _.selectHandler);\\n }\\n\\n $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));\\n\\n $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));\\n\\n $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);\\n\\n $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);\\n $(_.setPosition);\\n\\n };\\n\\n Slick.prototype.initUI = function() {\\n\\n var _ = this;\\n\\n if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\\n\\n _.$prevArrow.show();\\n _.$nextArrow.show();\\n\\n }\\n\\n if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\\n\\n _.$dots.show();\\n\\n }\\n\\n };\\n\\n Slick.prototype.keyHandler = function(event) {\\n\\n var _ = this;\\n //Dont slide if the cursor is inside the form fields and arrow keys are pressed\\n if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {\\n if (event.keyCode === 37 && _.options.accessibility === true) {\\n _.changeSlide({\\n data: {\\n message: _.options.rtl === true ? 'next' : 'previous'\\n }\\n });\\n } else if (event.keyCode === 39 && _.options.accessibility === true) {\\n _.changeSlide({\\n data: {\\n message: _.options.rtl === true ? 'previous' : 'next'\\n }\\n });\\n }\\n }\\n\\n };\\n\\n Slick.prototype.lazyLoad = function() {\\n\\n var _ = this,\\n loadRange, cloneRange, rangeStart, rangeEnd;\\n\\n function loadImages(imagesScope) {\\n\\n $('img[data-lazy]', imagesScope).each(function() {\\n\\n var image = $(this),\\n imageSource = $(this).attr('data-lazy'),\\n imageSrcSet = $(this).attr('data-srcset'),\\n imageSizes = $(this).attr('data-sizes') || _.$slider.attr('data-sizes'),\\n imageToLoad = document.createElement('img');\\n\\n imageToLoad.onload = function() {\\n\\n image\\n .animate({ opacity: 0 }, 100, function() {\\n\\n if (imageSrcSet) {\\n image\\n .attr('srcset', imageSrcSet );\\n\\n if (imageSizes) {\\n image\\n .attr('sizes', imageSizes );\\n }\\n }\\n\\n image\\n .attr('src', imageSource)\\n .animate({ opacity: 1 }, 200, function() {\\n image\\n .removeAttr('data-lazy data-srcset data-sizes')\\n .removeClass('slick-loading');\\n });\\n _.$slider.trigger('lazyLoaded', [_, image, imageSource]);\\n });\\n\\n };\\n\\n imageToLoad.onerror = function() {\\n\\n image\\n .removeAttr( 'data-lazy' )\\n .removeClass( 'slick-loading' )\\n .addClass( 'slick-lazyload-error' );\\n\\n _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);\\n\\n };\\n\\n imageToLoad.src = imageSource;\\n\\n });\\n\\n }\\n\\n if (_.options.centerMode === true) {\\n if (_.options.infinite === true) {\\n rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);\\n rangeEnd = rangeStart + _.options.slidesToShow + 2;\\n } else {\\n rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));\\n rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;\\n }\\n } else {\\n rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;\\n rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);\\n if (_.options.fade === true) {\\n if (rangeStart > 0) rangeStart--;\\n if (rangeEnd <= _.slideCount) rangeEnd++;\\n }\\n }\\n\\n loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);\\n\\n if (_.options.lazyLoad === 'anticipated') {\\n var prevSlide = rangeStart - 1,\\n nextSlide = rangeEnd,\\n $slides = _.$slider.find('.slick-slide');\\n\\n for (var i = 0; i < _.options.slidesToScroll; i++) {\\n if (prevSlide < 0) prevSlide = _.slideCount - 1;\\n loadRange = loadRange.add($slides.eq(prevSlide));\\n loadRange = loadRange.add($slides.eq(nextSlide));\\n prevSlide--;\\n nextSlide++;\\n }\\n }\\n\\n loadImages(loadRange);\\n\\n if (_.slideCount <= _.options.slidesToShow) {\\n cloneRange = _.$slider.find('.slick-slide');\\n loadImages(cloneRange);\\n } else\\n if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {\\n cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);\\n loadImages(cloneRange);\\n } else if (_.currentSlide === 0) {\\n cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);\\n loadImages(cloneRange);\\n }\\n\\n };\\n\\n Slick.prototype.loadSlider = function() {\\n\\n var _ = this;\\n\\n _.setPosition();\\n\\n _.$slideTrack.css({\\n opacity: 1\\n });\\n\\n _.$slider.removeClass('slick-loading');\\n\\n _.initUI();\\n\\n if (_.options.lazyLoad === 'progressive') {\\n _.progressiveLazyLoad();\\n }\\n\\n };\\n\\n Slick.prototype.next = Slick.prototype.slickNext = function() {\\n\\n var _ = this;\\n\\n _.changeSlide({\\n data: {\\n message: 'next'\\n }\\n });\\n\\n };\\n\\n Slick.prototype.orientationChange = function() {\\n\\n var _ = this;\\n\\n _.checkResponsive();\\n _.setPosition();\\n\\n };\\n\\n Slick.prototype.pause = Slick.prototype.slickPause = function() {\\n\\n var _ = this;\\n\\n _.autoPlayClear();\\n _.paused = true;\\n\\n };\\n\\n Slick.prototype.play = Slick.prototype.slickPlay = function() {\\n\\n var _ = this;\\n\\n _.autoPlay();\\n _.options.autoplay = true;\\n _.paused = false;\\n _.focussed = false;\\n _.interrupted = false;\\n\\n };\\n\\n Slick.prototype.postSlide = function(index) {\\n\\n var _ = this;\\n\\n if( !_.unslicked ) {\\n\\n _.$slider.trigger('afterChange', [_, index]);\\n\\n _.animating = false;\\n\\n if (_.slideCount > _.options.slidesToShow) {\\n _.setPosition();\\n }\\n\\n _.swipeLeft = null;\\n\\n if ( _.options.autoplay ) {\\n _.autoPlay();\\n }\\n\\n if (_.options.accessibility === true) {\\n _.initADA();\\n // for non-autoplay: once active slide (group) has updated, set focus on first newly showing slide \\n if (!_.options.autoplay) {\\n var $currentSlide = $(_.$slides.get(_.currentSlide));\\n $currentSlide.attr('tabindex', 0).focus();\\n }\\n }\\n\\n }\\n\\n };\\n\\n Slick.prototype.prev = Slick.prototype.slickPrev = function() {\\n\\n var _ = this;\\n\\n _.changeSlide({\\n data: {\\n message: 'previous'\\n }\\n });\\n\\n };\\n\\n Slick.prototype.preventDefault = function(event) {\\n\\n event.preventDefault();\\n\\n };\\n\\n Slick.prototype.progressiveLazyLoad = function( tryCount ) {\\n\\n tryCount = tryCount || 1;\\n\\n var _ = this,\\n $imgsToLoad = $( 'img[data-lazy]', _.$slider ),\\n image,\\n imageSource,\\n imageSrcSet,\\n imageSizes,\\n imageToLoad;\\n\\n if ( $imgsToLoad.length ) {\\n\\n image = $imgsToLoad.first();\\n imageSource = image.attr('data-lazy');\\n imageSrcSet = image.attr('data-srcset');\\n imageSizes = image.attr('data-sizes') || _.$slider.attr('data-sizes');\\n imageToLoad = document.createElement('img');\\n\\n imageToLoad.onload = function() {\\n\\n if (imageSrcSet) {\\n image\\n .attr('srcset', imageSrcSet );\\n\\n if (imageSizes) {\\n image\\n .attr('sizes', imageSizes );\\n }\\n }\\n\\n image\\n .attr( 'src', imageSource )\\n .removeAttr('data-lazy data-srcset data-sizes')\\n .removeClass('slick-loading');\\n\\n if ( _.options.adaptiveHeight === true ) {\\n _.setPosition();\\n }\\n\\n _.$slider.trigger('lazyLoaded', [ _, image, imageSource ]);\\n _.progressiveLazyLoad();\\n\\n };\\n\\n imageToLoad.onerror = function() {\\n\\n if ( tryCount < 3 ) {\\n\\n /**\\n * try to load the image 3 times,\\n * leave a slight delay so we don't get\\n * servers blocking the request.\\n */\\n setTimeout( function() {\\n _.progressiveLazyLoad( tryCount + 1 );\\n }, 500 );\\n\\n } else {\\n\\n image\\n .removeAttr( 'data-lazy' )\\n .removeClass( 'slick-loading' )\\n .addClass( 'slick-lazyload-error' );\\n\\n _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);\\n\\n _.progressiveLazyLoad();\\n\\n }\\n\\n };\\n\\n imageToLoad.src = imageSource;\\n\\n } else {\\n\\n _.$slider.trigger('allImagesLoaded', [ _ ]);\\n\\n }\\n\\n };\\n\\n Slick.prototype.refresh = function( initializing ) {\\n\\n var _ = this, currentSlide, lastVisibleIndex;\\n\\n lastVisibleIndex = _.slideCount - _.options.slidesToShow;\\n\\n // in non-infinite sliders, we don't want to go past the\\n // last visible index.\\n if( !_.options.infinite && ( _.currentSlide > lastVisibleIndex )) {\\n _.currentSlide = lastVisibleIndex;\\n }\\n\\n // if less slides than to show, go to start.\\n if ( _.slideCount <= _.options.slidesToShow ) {\\n _.currentSlide = 0;\\n\\n }\\n\\n currentSlide = _.currentSlide;\\n\\n _.destroy(true);\\n\\n $.extend(_, _.initials, { currentSlide: currentSlide });\\n\\n _.init();\\n\\n if( !initializing ) {\\n\\n _.changeSlide({\\n data: {\\n message: 'index',\\n index: currentSlide\\n }\\n }, false);\\n\\n }\\n\\n };\\n\\n Slick.prototype.registerBreakpoints = function() {\\n\\n var _ = this, breakpoint, currentBreakpoint, l,\\n responsiveSettings = _.options.responsive || null;\\n\\n if ( $.type(responsiveSettings) === 'array' && responsiveSettings.length ) {\\n\\n _.respondTo = _.options.respondTo || 'window';\\n\\n for ( breakpoint in responsiveSettings ) {\\n\\n l = _.breakpoints.length-1;\\n\\n if (responsiveSettings.hasOwnProperty(breakpoint)) {\\n currentBreakpoint = responsiveSettings[breakpoint].breakpoint;\\n\\n // loop through the breakpoints and cut out any existing\\n // ones with the same breakpoint number, we don't want dupes.\\n while( l >= 0 ) {\\n if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) {\\n _.breakpoints.splice(l,1);\\n }\\n l--;\\n }\\n\\n _.breakpoints.push(currentBreakpoint);\\n _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;\\n\\n }\\n\\n }\\n\\n _.breakpoints.sort(function(a, b) {\\n return ( _.options.mobileFirst ) ? a-b : b-a;\\n });\\n\\n }\\n\\n };\\n\\n Slick.prototype.reinit = function() {\\n\\n var _ = this;\\n\\n _.$slides =\\n _.$slideTrack\\n .children(_.options.slide)\\n .addClass('slick-slide');\\n\\n _.slideCount = _.$slides.length;\\n\\n if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {\\n _.currentSlide = _.currentSlide - _.options.slidesToScroll;\\n }\\n\\n if (_.slideCount <= _.options.slidesToShow) {\\n _.currentSlide = 0;\\n }\\n\\n _.registerBreakpoints();\\n\\n _.setProps();\\n _.setupInfinite();\\n _.buildArrows();\\n _.updateArrows();\\n _.initArrowEvents();\\n _.buildDots();\\n _.updateDots();\\n _.initDotEvents();\\n _.cleanUpSlideEvents();\\n _.initSlideEvents();\\n\\n _.checkResponsive(false, true);\\n\\n if (_.options.focusOnSelect === true) {\\n $(_.$slideTrack).children().on('click.slick', _.selectHandler);\\n }\\n\\n _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);\\n\\n _.setPosition();\\n _.focusHandler();\\n\\n _.paused = !_.options.autoplay;\\n _.autoPlay();\\n\\n _.$slider.trigger('reInit', [_]);\\n\\n };\\n\\n Slick.prototype.resize = function() {\\n\\n var _ = this;\\n\\n if ($(window).width() !== _.windowWidth) {\\n clearTimeout(_.windowDelay);\\n _.windowDelay = window.setTimeout(function() {\\n _.windowWidth = $(window).width();\\n _.checkResponsive();\\n if( !_.unslicked ) { _.setPosition(); }\\n }, 50);\\n }\\n };\\n\\n Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {\\n\\n var _ = this;\\n\\n if (typeof(index) === 'boolean') {\\n removeBefore = index;\\n index = removeBefore === true ? 0 : _.slideCount - 1;\\n } else {\\n index = removeBefore === true ? --index : index;\\n }\\n\\n if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {\\n return false;\\n }\\n\\n _.unload();\\n\\n if (removeAll === true) {\\n _.$slideTrack.children().remove();\\n } else {\\n _.$slideTrack.children(this.options.slide).eq(index).remove();\\n }\\n\\n _.$slides = _.$slideTrack.children(this.options.slide);\\n\\n _.$slideTrack.children(this.options.slide).detach();\\n\\n _.$slideTrack.append(_.$slides);\\n\\n _.$slidesCache = _.$slides;\\n\\n _.reinit();\\n\\n };\\n\\n Slick.prototype.setCSS = function(position) {\\n\\n var _ = this,\\n positionProps = {},\\n x, y;\\n\\n if (_.options.rtl === true) {\\n position = -position;\\n }\\n x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';\\n y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';\\n\\n positionProps[_.positionProp] = position;\\n\\n if (_.transformsEnabled === false) {\\n _.$slideTrack.css(positionProps);\\n } else {\\n positionProps = {};\\n if (_.cssTransitions === false) {\\n positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';\\n _.$slideTrack.css(positionProps);\\n } else {\\n positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';\\n _.$slideTrack.css(positionProps);\\n }\\n }\\n\\n };\\n\\n Slick.prototype.setDimensions = function() {\\n\\n var _ = this;\\n\\n if (_.options.vertical === false) {\\n if (_.options.centerMode === true) {\\n _.$list.css({\\n padding: ('0px ' + _.options.centerPadding)\\n });\\n }\\n } else {\\n _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);\\n if (_.options.centerMode === true) {\\n _.$list.css({\\n padding: (_.options.centerPadding + ' 0px')\\n });\\n }\\n }\\n\\n _.listWidth = _.$list.width();\\n _.listHeight = _.$list.height();\\n\\n\\n if (_.options.vertical === false && _.options.variableWidth === false) {\\n _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);\\n _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));\\n\\n } else if (_.options.variableWidth === true) {\\n _.$slideTrack.width(5000 * _.slideCount);\\n } else {\\n _.slideWidth = Math.ceil(_.listWidth);\\n _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));\\n }\\n\\n var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();\\n if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);\\n\\n };\\n\\n Slick.prototype.setFade = function() {\\n\\n var _ = this,\\n targetLeft;\\n\\n _.$slides.each(function(index, element) {\\n targetLeft = (_.slideWidth * index) * -1;\\n if (_.options.rtl === true) {\\n $(element).css({\\n position: 'relative',\\n right: targetLeft,\\n top: 0,\\n zIndex: _.options.zIndex - 2,\\n opacity: 0\\n });\\n } else {\\n $(element).css({\\n position: 'relative',\\n left: targetLeft,\\n top: 0,\\n zIndex: _.options.zIndex - 2,\\n opacity: 0\\n });\\n }\\n });\\n\\n _.$slides.eq(_.currentSlide).css({\\n zIndex: _.options.zIndex - 1,\\n opacity: 1\\n });\\n\\n };\\n\\n Slick.prototype.setHeight = function() {\\n\\n var _ = this;\\n\\n if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\\n var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\\n _.$list.css('height', targetHeight);\\n }\\n\\n };\\n\\n Slick.prototype.setOption =\\n Slick.prototype.slickSetOption = function() {\\n\\n /**\\n * accepts arguments in format of:\\n *\\n * - for changing a single option's value:\\n * .slick(\\\"setOption\\\", option, value, refresh )\\n *\\n * - for changing a set of responsive options:\\n * .slick(\\\"setOption\\\", 'responsive', [{}, ...], refresh )\\n *\\n * - for updating multiple values at once (not responsive)\\n * .slick(\\\"setOption\\\", { 'option': value, ... }, refresh )\\n */\\n\\n var _ = this, l, item, option, value, refresh = false, type;\\n\\n if( $.type( arguments[0] ) === 'object' ) {\\n\\n option = arguments[0];\\n refresh = arguments[1];\\n type = 'multiple';\\n\\n } else if ( $.type( arguments[0] ) === 'string' ) {\\n\\n option = arguments[0];\\n value = arguments[1];\\n refresh = arguments[2];\\n\\n if ( arguments[0] === 'responsive' && $.type( arguments[1] ) === 'array' ) {\\n\\n type = 'responsive';\\n\\n } else if ( typeof arguments[1] !== 'undefined' ) {\\n\\n type = 'single';\\n\\n }\\n\\n }\\n\\n if ( type === 'single' ) {\\n\\n _.options[option] = value;\\n\\n\\n } else if ( type === 'multiple' ) {\\n\\n $.each( option , function( opt, val ) {\\n\\n _.options[opt] = val;\\n\\n });\\n\\n\\n } else if ( type === 'responsive' ) {\\n\\n for ( item in value ) {\\n\\n if( $.type( _.options.responsive ) !== 'array' ) {\\n\\n _.options.responsive = [ value[item] ];\\n\\n } else {\\n\\n l = _.options.responsive.length-1;\\n\\n // loop through the responsive object and splice out duplicates.\\n while( l >= 0 ) {\\n\\n if( _.options.responsive[l].breakpoint === value[item].breakpoint ) {\\n\\n _.options.responsive.splice(l,1);\\n\\n }\\n\\n l--;\\n\\n }\\n\\n _.options.responsive.push( value[item] );\\n\\n }\\n\\n }\\n\\n }\\n\\n if ( refresh ) {\\n\\n _.unload();\\n _.reinit();\\n\\n }\\n\\n };\\n\\n Slick.prototype.setPosition = function() {\\n\\n var _ = this;\\n\\n _.setDimensions();\\n\\n _.setHeight();\\n\\n if (_.options.fade === false) {\\n _.setCSS(_.getLeft(_.currentSlide));\\n } else {\\n _.setFade();\\n }\\n\\n _.$slider.trigger('setPosition', [_]);\\n\\n };\\n\\n Slick.prototype.setProps = function() {\\n\\n var _ = this,\\n bodyStyle = document.body.style;\\n\\n _.positionProp = _.options.vertical === true ? 'top' : 'left';\\n\\n if (_.positionProp === 'top') {\\n _.$slider.addClass('slick-vertical');\\n } else {\\n _.$slider.removeClass('slick-vertical');\\n }\\n\\n if (bodyStyle.WebkitTransition !== undefined ||\\n bodyStyle.MozTransition !== undefined ||\\n bodyStyle.msTransition !== undefined) {\\n if (_.options.useCSS === true) {\\n _.cssTransitions = true;\\n }\\n }\\n\\n if ( _.options.fade ) {\\n if ( typeof _.options.zIndex === 'number' ) {\\n if( _.options.zIndex < 3 ) {\\n _.options.zIndex = 3;\\n }\\n } else {\\n _.options.zIndex = _.defaults.zIndex;\\n }\\n }\\n\\n if (bodyStyle.OTransform !== undefined) {\\n _.animType = 'OTransform';\\n _.transformType = '-o-transform';\\n _.transitionType = 'OTransition';\\n if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\\n }\\n if (bodyStyle.MozTransform !== undefined) {\\n _.animType = 'MozTransform';\\n _.transformType = '-moz-transform';\\n _.transitionType = 'MozTransition';\\n if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;\\n }\\n if (bodyStyle.webkitTransform !== undefined) {\\n _.animType = 'webkitTransform';\\n _.transformType = '-webkit-transform';\\n _.transitionType = 'webkitTransition';\\n if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\\n }\\n if (bodyStyle.msTransform !== undefined) {\\n _.animType = 'msTransform';\\n _.transformType = '-ms-transform';\\n _.transitionType = 'msTransition';\\n if (bodyStyle.msTransform === undefined) _.animType = false;\\n }\\n if (bodyStyle.transform !== undefined && _.animType !== false) {\\n _.animType = 'transform';\\n _.transformType = 'transform';\\n _.transitionType = 'transition';\\n }\\n _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false);\\n };\\n\\n\\n Slick.prototype.setSlideClasses = function(index) {\\n\\n var _ = this,\\n centerOffset, allSlides, indexOffset, remainder;\\n\\n allSlides = _.$slider\\n .find('.slick-slide')\\n .removeClass('slick-active slick-center slick-current')\\n .attr('aria-hidden', 'true');\\n\\n _.$slides\\n .eq(index)\\n .addClass('slick-current');\\n\\n if (_.options.centerMode === true) {\\n\\n centerOffset = Math.floor(_.options.slidesToShow / 2);\\n\\n if (_.options.infinite === true) {\\n\\n if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {\\n\\n _.$slides\\n .slice(index - centerOffset, index + centerOffset + 1)\\n .addClass('slick-active')\\n .attr('aria-hidden', 'false');\\n\\n } else {\\n\\n indexOffset = _.options.slidesToShow + index;\\n allSlides\\n .slice(indexOffset - centerOffset + 1, indexOffset + centerOffset + 2)\\n .addClass('slick-active')\\n .attr('aria-hidden', 'false');\\n\\n }\\n\\n if (index === 0) {\\n\\n allSlides\\n .eq(allSlides.length - 1 - _.options.slidesToShow)\\n .addClass('slick-center');\\n\\n } else if (index === _.slideCount - 1) {\\n\\n allSlides\\n .eq(_.options.slidesToShow)\\n .addClass('slick-center');\\n\\n }\\n\\n }\\n\\n _.$slides\\n .eq(index)\\n .addClass('slick-center');\\n\\n } else {\\n\\n if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {\\n\\n _.$slides\\n .slice(index, index + _.options.slidesToShow)\\n .addClass('slick-active')\\n .attr('aria-hidden', 'false');\\n\\n } else if (allSlides.length <= _.options.slidesToShow) {\\n\\n allSlides\\n .addClass('slick-active')\\n .attr('aria-hidden', 'false');\\n\\n } else {\\n\\n remainder = _.slideCount % _.options.slidesToShow;\\n indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;\\n\\n if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {\\n\\n allSlides\\n .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder)\\n .addClass('slick-active')\\n .attr('aria-hidden', 'false');\\n\\n } else {\\n\\n allSlides\\n .slice(indexOffset, indexOffset + _.options.slidesToShow)\\n .addClass('slick-active')\\n .attr('aria-hidden', 'false');\\n\\n }\\n\\n }\\n\\n }\\n\\n if (_.options.lazyLoad === 'ondemand' || _.options.lazyLoad === 'anticipated') {\\n _.lazyLoad();\\n }\\n };\\n\\n Slick.prototype.setupInfinite = function() {\\n\\n var _ = this,\\n i, slideIndex, infiniteCount;\\n\\n if (_.options.fade === true) {\\n _.options.centerMode = false;\\n }\\n\\n if (_.options.infinite === true && _.options.fade === false) {\\n\\n slideIndex = null;\\n\\n if (_.slideCount > _.options.slidesToShow) {\\n\\n if (_.options.centerMode === true) {\\n infiniteCount = _.options.slidesToShow + 1;\\n } else {\\n infiniteCount = _.options.slidesToShow;\\n }\\n\\n for (i = _.slideCount; i > (_.slideCount -\\n infiniteCount); i -= 1) {\\n slideIndex = i - 1;\\n $(_.$slides[slideIndex]).clone(true).attr('id', '')\\n .attr('data-slick-index', slideIndex - _.slideCount)\\n .prependTo(_.$slideTrack).addClass('slick-cloned');\\n }\\n for (i = 0; i < infiniteCount; i += 1) {\\n slideIndex = i;\\n $(_.$slides[slideIndex]).clone(true).attr('id', '')\\n .attr('data-slick-index', slideIndex + _.slideCount)\\n .appendTo(_.$slideTrack).addClass('slick-cloned');\\n }\\n _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {\\n $(this).attr('id', '');\\n });\\n\\n }\\n\\n }\\n\\n };\\n\\n Slick.prototype.interrupt = function( toggle ) {\\n\\n var _ = this;\\n\\n if( !toggle ) {\\n _.autoPlay();\\n }\\n _.interrupted = toggle;\\n\\n };\\n\\n Slick.prototype.selectHandler = function(event) {\\n\\n var _ = this;\\n\\n var targetElement =\\n $(event.target).is('.slick-slide') ?\\n $(event.target) :\\n $(event.target).parents('.slick-slide');\\n\\n var index = parseInt(targetElement.attr('data-slick-index'));\\n\\n if (!index) index = 0;\\n\\n if (_.slideCount <= _.options.slidesToShow) {\\n\\n _.slideHandler(index, false, true);\\n return;\\n\\n }\\n\\n _.slideHandler(index);\\n\\n };\\n\\n Slick.prototype.slideHandler = function(index, sync, dontAnimate) {\\n\\n var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,\\n _ = this, navTarget;\\n\\n sync = sync || false;\\n\\n if (_.animating === true && _.options.waitForAnimate === true) {\\n return;\\n }\\n\\n if (_.options.fade === true && _.currentSlide === index) {\\n return;\\n }\\n\\n if (sync === false) {\\n _.asNavFor(index);\\n }\\n\\n targetSlide = index;\\n targetLeft = _.getLeft(targetSlide);\\n slideLeft = _.getLeft(_.currentSlide);\\n\\n _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;\\n\\n if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {\\n if (_.options.fade === false) {\\n targetSlide = _.currentSlide;\\n if (dontAnimate !== true) {\\n _.animateSlide(slideLeft, function() {\\n _.postSlide(targetSlide);\\n });\\n } else {\\n _.postSlide(targetSlide);\\n }\\n }\\n return;\\n } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {\\n if (_.options.fade === false) {\\n targetSlide = _.currentSlide;\\n if (dontAnimate !== true) {\\n _.animateSlide(slideLeft, function() {\\n _.postSlide(targetSlide);\\n });\\n } else {\\n _.postSlide(targetSlide);\\n }\\n }\\n return;\\n }\\n\\n if ( _.options.autoplay ) {\\n clearInterval(_.autoPlayTimer);\\n }\\n\\n if (targetSlide < 0) {\\n if (_.slideCount % _.options.slidesToScroll !== 0) {\\n animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);\\n } else {\\n animSlide = _.slideCount + targetSlide;\\n }\\n } else if (targetSlide >= _.slideCount) {\\n if (_.slideCount % _.options.slidesToScroll !== 0) {\\n animSlide = 0;\\n } else {\\n animSlide = targetSlide - _.slideCount;\\n }\\n } else {\\n animSlide = targetSlide;\\n }\\n\\n _.animating = true;\\n\\n _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);\\n\\n oldSlide = _.currentSlide;\\n _.currentSlide = animSlide;\\n\\n _.setSlideClasses(_.currentSlide);\\n\\n if ( _.options.asNavFor ) {\\n\\n navTarget = _.getNavTarget();\\n navTarget = navTarget.slick('getSlick');\\n\\n if ( navTarget.slideCount <= navTarget.options.slidesToShow ) {\\n navTarget.setSlideClasses(_.currentSlide);\\n }\\n\\n }\\n\\n _.updateDots();\\n _.updateArrows();\\n\\n if (_.options.fade === true) {\\n if (dontAnimate !== true) {\\n\\n _.fadeSlideOut(oldSlide);\\n\\n _.fadeSlide(animSlide, function() {\\n _.postSlide(animSlide);\\n });\\n\\n } else {\\n _.postSlide(animSlide);\\n }\\n _.animateHeight();\\n return;\\n }\\n\\n if (dontAnimate !== true) {\\n _.animateSlide(targetLeft, function() {\\n _.postSlide(animSlide);\\n });\\n } else {\\n _.postSlide(animSlide);\\n }\\n\\n };\\n\\n Slick.prototype.startLoad = function() {\\n\\n var _ = this;\\n\\n if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\\n\\n _.$prevArrow.hide();\\n _.$nextArrow.hide();\\n\\n }\\n\\n if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\\n\\n _.$dots.hide();\\n\\n }\\n\\n _.$slider.addClass('slick-loading');\\n\\n };\\n\\n Slick.prototype.swipeDirection = function() {\\n\\n var xDist, yDist, r, swipeAngle, _ = this;\\n\\n xDist = _.touchObject.startX - _.touchObject.curX;\\n yDist = _.touchObject.startY - _.touchObject.curY;\\n r = Math.atan2(yDist, xDist);\\n\\n swipeAngle = Math.round(r * 180 / Math.PI);\\n if (swipeAngle < 0) {\\n swipeAngle = 360 - Math.abs(swipeAngle);\\n }\\n\\n if ((swipeAngle <= 45) && (swipeAngle >= 0)) {\\n return (_.options.rtl === false ? 'left' : 'right');\\n }\\n if ((swipeAngle <= 360) && (swipeAngle >= 315)) {\\n return (_.options.rtl === false ? 'left' : 'right');\\n }\\n if ((swipeAngle >= 135) && (swipeAngle <= 225)) {\\n return (_.options.rtl === false ? 'right' : 'left');\\n }\\n if (_.options.verticalSwiping === true) {\\n if ((swipeAngle >= 35) && (swipeAngle <= 135)) {\\n return 'down';\\n } else {\\n return 'up';\\n }\\n }\\n\\n return 'vertical';\\n\\n };\\n\\n Slick.prototype.swipeEnd = function(event) {\\n\\n var _ = this,\\n slideCount,\\n direction;\\n\\n _.dragging = false;\\n _.swiping = false;\\n\\n if (_.scrolling) {\\n _.scrolling = false;\\n return false;\\n }\\n\\n _.interrupted = false;\\n _.shouldClick = ( _.touchObject.swipeLength > 10 ) ? false : true;\\n\\n if ( _.touchObject.curX === undefined ) {\\n return false;\\n }\\n\\n if ( _.touchObject.edgeHit === true ) {\\n _.$slider.trigger('edge', [_, _.swipeDirection() ]);\\n }\\n\\n if ( _.touchObject.swipeLength >= _.touchObject.minSwipe ) {\\n\\n direction = _.swipeDirection();\\n\\n switch ( direction ) {\\n\\n case 'left':\\n case 'down':\\n\\n slideCount =\\n _.options.swipeToSlide ?\\n _.checkNavigable( _.currentSlide + _.getSlideCount() ) :\\n _.currentSlide + _.getSlideCount();\\n\\n _.currentDirection = 0;\\n\\n break;\\n\\n case 'right':\\n case 'up':\\n\\n slideCount =\\n _.options.swipeToSlide ?\\n _.checkNavigable( _.currentSlide - _.getSlideCount() ) :\\n _.currentSlide - _.getSlideCount();\\n\\n _.currentDirection = 1;\\n\\n break;\\n\\n default:\\n\\n\\n }\\n\\n if( direction != 'vertical' ) {\\n\\n _.slideHandler( slideCount );\\n _.touchObject = {};\\n _.$slider.trigger('swipe', [_, direction ]);\\n\\n }\\n\\n } else {\\n\\n if ( _.touchObject.startX !== _.touchObject.curX ) {\\n\\n _.slideHandler( _.currentSlide );\\n _.touchObject = {};\\n\\n }\\n\\n }\\n\\n };\\n\\n Slick.prototype.swipeHandler = function(event) {\\n\\n var _ = this;\\n\\n if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {\\n return;\\n } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {\\n return;\\n }\\n\\n _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?\\n event.originalEvent.touches.length : 1;\\n\\n _.touchObject.minSwipe = _.listWidth / _.options\\n .touchThreshold;\\n\\n if (_.options.verticalSwiping === true) {\\n _.touchObject.minSwipe = _.listHeight / _.options\\n .touchThreshold;\\n }\\n\\n switch (event.data.action) {\\n\\n case 'start':\\n _.swipeStart(event);\\n break;\\n\\n case 'move':\\n _.swipeMove(event);\\n break;\\n\\n case 'end':\\n _.swipeEnd(event);\\n break;\\n\\n }\\n\\n };\\n\\n Slick.prototype.swipeMove = function(event) {\\n\\n var _ = this,\\n edgeWasHit = false,\\n curLeft, swipeDirection, swipeLength, positionOffset, touches, verticalSwipeLength;\\n\\n touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;\\n\\n if (!_.dragging || _.scrolling || touches && touches.length !== 1) {\\n return false;\\n }\\n\\n curLeft = _.getLeft(_.currentSlide);\\n\\n _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;\\n _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;\\n\\n _.touchObject.swipeLength = Math.round(Math.sqrt(\\n Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));\\n\\n verticalSwipeLength = Math.round(Math.sqrt(\\n Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));\\n\\n if (!_.options.verticalSwiping && !_.swiping && verticalSwipeLength > 4) {\\n _.scrolling = true;\\n return false;\\n }\\n\\n if (_.options.verticalSwiping === true) {\\n _.touchObject.swipeLength = verticalSwipeLength;\\n }\\n\\n swipeDirection = _.swipeDirection();\\n\\n if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {\\n _.swiping = true;\\n event.preventDefault();\\n }\\n\\n positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);\\n if (_.options.verticalSwiping === true) {\\n positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;\\n }\\n\\n\\n swipeLength = _.touchObject.swipeLength;\\n\\n _.touchObject.edgeHit = false;\\n\\n if (_.options.infinite === false) {\\n if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) {\\n swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;\\n _.touchObject.edgeHit = true;\\n }\\n }\\n\\n if (_.options.vertical === false) {\\n _.swipeLeft = curLeft + swipeLength * positionOffset;\\n } else {\\n _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;\\n }\\n if (_.options.verticalSwiping === true) {\\n _.swipeLeft = curLeft + swipeLength * positionOffset;\\n }\\n\\n if (_.options.fade === true || _.options.touchMove === false) {\\n return false;\\n }\\n\\n if (_.animating === true) {\\n _.swipeLeft = null;\\n return false;\\n }\\n\\n _.setCSS(_.swipeLeft);\\n\\n };\\n\\n Slick.prototype.swipeStart = function(event) {\\n\\n var _ = this,\\n touches;\\n\\n _.interrupted = true;\\n\\n if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {\\n _.touchObject = {};\\n return false;\\n }\\n\\n if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {\\n touches = event.originalEvent.touches[0];\\n }\\n\\n _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;\\n _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;\\n\\n _.dragging = true;\\n\\n };\\n\\n Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {\\n\\n var _ = this;\\n\\n if (_.$slidesCache !== null) {\\n\\n _.unload();\\n\\n _.$slideTrack.children(this.options.slide).detach();\\n\\n _.$slidesCache.appendTo(_.$slideTrack);\\n\\n _.reinit();\\n\\n }\\n\\n };\\n\\n Slick.prototype.unload = function() {\\n\\n var _ = this;\\n\\n $('.slick-cloned', _.$slider).remove();\\n\\n if (_.$dots) {\\n _.$dots.remove();\\n }\\n\\n if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {\\n _.$prevArrow.remove();\\n }\\n\\n if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {\\n _.$nextArrow.remove();\\n }\\n\\n _.$slides\\n .removeClass('slick-slide slick-active slick-visible slick-current')\\n .attr('aria-hidden', 'true')\\n .css('width', '');\\n\\n };\\n\\n Slick.prototype.unslick = function(fromBreakpoint) {\\n\\n var _ = this;\\n _.$slider.trigger('unslick', [_, fromBreakpoint]);\\n _.destroy();\\n\\n };\\n\\n Slick.prototype.updateArrows = function() {\\n\\n var _ = this,\\n centerOffset;\\n\\n centerOffset = Math.floor(_.options.slidesToShow / 2);\\n\\n if ( _.options.arrows === true &&\\n _.slideCount > _.options.slidesToShow &&\\n !_.options.infinite ) {\\n\\n _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\\n _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\\n\\n if (_.currentSlide === 0) {\\n\\n _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\\n _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\\n\\n } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {\\n\\n _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\\n _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\\n\\n } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {\\n\\n _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\\n _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\\n\\n }\\n\\n }\\n\\n };\\n\\n Slick.prototype.updateDots = function() {\\n\\n var _ = this;\\n\\n if (_.$dots !== null) {\\n\\n _.$dots\\n .find('li')\\n .removeClass('slick-active')\\n .end();\\n\\n _.$dots\\n .find('li')\\n .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))\\n .addClass('slick-active');\\n\\n }\\n\\n };\\n\\n Slick.prototype.visibility = function() {\\n\\n var _ = this;\\n\\n if ( _.options.autoplay ) {\\n\\n if ( document[_.hidden] ) {\\n\\n _.interrupted = true;\\n\\n } else {\\n\\n _.interrupted = false;\\n\\n }\\n\\n }\\n\\n };\\n\\n $.fn.slick = function() {\\n var _ = this,\\n opt = arguments[0],\\n args = Array.prototype.slice.call(arguments, 1),\\n l = _.length,\\n i,\\n ret;\\n for (i = 0; i < l; i++) {\\n if (typeof opt == 'object' || typeof opt == 'undefined')\\n _[i].slick = new Slick(_[i], opt);\\n else\\n ret = _[i].slick[opt].apply(_[i].slick, args);\\n if (typeof ret != 'undefined') return ret;\\n }\\n return _;\\n };\\n\\n}));\\n\"","require(\"!!/Users/htamirepi/repo/stores.petit-bateau.com/src/node_modules/script-loader/addScript.js\")(require(\"!!/Users/htamirepi/repo/stores.petit-bateau.com/src/node_modules/raw-loader/index.js!/Users/htamirepi/repo/stores.petit-bateau.com/src/node_modules/slick-carousel/slick/slick.js\"))","import 'script-loader!node_modules/slick-carousel/slick/slick.js';\nimport 'script-loader!.tmp/js/templates/components/Reviews/Reviews.js';\n\nexport class ReviewsCarousel {\n constructor(element, opts) {\n this.element = element;\n this.carouselElement = element.querySelector('.c-ReviewsList')\n this.opts = opts || {};\n\n\n let elOpts = {\n showDesktop: this.carouselElement.dataset.showdesktop,\n showMobile: this.carouselElement.dataset.showmobile,\n total: this.carouselElement.dataset.total,\n mobileBreakpoint: this.carouselElement.dataset.mobilebreakpoint,\n };\n\n this.opts = Object.assign(this.opts, elOpts);\n }\n\n initCarousel() {\n $(this.carouselElement).slick({\n rows: this.opts.showDesktop,\n cssEase: 'ease-in-out',\n draggable: true,\n fade: false,\n infinite: false,\n adaptiveHeight: true,\n appendArrows: this.element.querySelector('.c-ReviewsControls'),\n prevArrow: components.reviews_controls_link_previous(),\n nextArrow: components.reviews_controls_link_separator() + components.reviews_controls_link_next(),\n responsive: [\n {\n breakpoint: this.opts.mobileBreakpoint,\n settings: {\n rows: this.opts.showMobile\n }\n }\n ]}\n );\n }\n\n processCarouselPaging() {\n const element = this.element;\n if (window.screen.width < this.opts.mobileBreakpoint) {\n element.querySelector('.js-ReviewsPage-showing').innerHTML = \"1 -\" + this.opts.showMobile;\n }\n\n $(this.carouselElement).on('afterChange', (event, slick, currentSlide) => {\n let currRows = slick.slickGetOption('rows');\n let small = (currRows * currentSlide) + 1;\n let large = currRows * (currentSlide + 1);\n if (this.opts.total < large) { large = this.opts.total; }\n if (small == large) {\n element.querySelector('.js-ReviewsPage-showing').innerHTML = \"review \" + this.opts.total;\n } else {\n element.querySelector('.js-ReviewsPage-showing').innerHTML = \"reviews \" + small + \" - \" + large;\n }\n });\n }\n\n run() {\n this.initCarousel()\n this.processCarouselPaging()\n }\n}\n","import { ReviewsCarousel } from './ReviewsCarousel.js';\n\nexport class Reviews {\n static initClass(domScope) {\n this.autoRunInstances = true;\n this.instances = [];\n this.dom = domScope || document;\n }\n\n static loadReviewsData() {\n for (let el of this.dom.querySelectorAll('.c-Reviews')) {\n el.reviewsCarousel = new ReviewsCarousel(el);\n this.instances.push(el);\n }\n }\n\n static runInstances() {\n return Array.from(this.instances).map((instanceElement) =>\n instanceElement.reviewsCarousel.run());\n }\n\n static loadAndRun() {\n this.loadReviewsData();\n this.runInstances();\n }\n}\n\nReviews.initClass();\n","import { LeafletBase } from './LeafletBase.js';\n\nexport class MapQuestLeaflet extends LeafletBase {\n static initClass() {\n this.instances = [];\n this.providerLoaded = false;\n this.className = \"Yext.Maps.MapQuestLeaflet\";\n }\n\n appendScript() {\n let leafletBaseUrl = \"https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.5/leaflet\";\n let link = document.createElement('link');\n let mapScriptBase = document.createElement('script');\n let mapScriptApi = document.createElement('script');\n link.rel = 'stylesheet';\n link.href = `${leafletBaseUrl}.css`;\n mapScriptBase.src = `${leafletBaseUrl}.js`;\n mapScriptBase.onload = () => {\n mapScriptApi.src = `https://www.mapquestapi.com/sdk/leaflet/v2.s/mq-map.js?key=${this.config.apiID}`;\n mapScriptApi.onload = () => {\n this.constructor.providerCallback();\n }\n document.head.appendChild(mapScriptApi);\n };\n document.body.appendChild(link);\n document.head.appendChild(mapScriptBase);\n }\n\n initializeMap() {\n let map;\n return map = L.map(this.config.mapId, $.extend(this.mapOptions,\n {layers: MQ.mapLayer()})\n );\n }\n}\n\nMapQuestLeaflet.initClass();\n","import { BaseMap } from './BaseMap.js';\n\nexport class MapQuest extends BaseMap {\n static initClass() {\n this.instances = [];\n this.providerLoaded = false;\n this.className = \"Yext.Maps.MapQuest\";\n }\n constructor(args) {\n super(args);\n this.mapOptions = {\n elt: this.config.mapId,\n zoom: this.config.zoom,\n mtype: 'map',\n bestFitMargin: 100,\n zoomOnDoubleClick: !this.config.disableMapControl\n };\n }\n\n appendScript() {\n let endpoint = '//www.mapquestapi.com/sdk/js/v7.2.s/mqa.toolkit.js?key='; // Enterprise endpoint\n if (this.config.apiID === 'Fmjtd%7Cluu829urnh%2Cbn%3Do5-9w1ghy') {\n endpoint = '//open.mapquestapi.com/sdk/js/v7.2.s/mqa.toolkit.js?key='; // Developer \"Open\" endpoint\n }\n let mapScript = document.createElement('script');\n mapScript.src = `${endpoint}${this.config.apiID}`;\n mapScript.onload = () => {\n this.constructor.providerCallback();\n };\n document.head.appendChild(mapScript);\n }\n\n preparePin(loc, i) {\n let pin = new MQA.Poi({\n lat: loc.latitude,\n lng: loc.longitude\n });\n\n MQA.EventManager.addListener(pin, 'click', evt => {\n return this.clickHandler(loc, pin, i);\n });\n let icon = new MQA.Icon(this.iconImage(loc, i), 26, 37);\n pin.setIcon(icon);\n return pin;\n }\n\n prepareMap() {\n let sc = new MQA.ShapeCollection();\n let index = 0;\n for (let location of Array.from(this.allLocations)) {\n index++;\n let pin = this.preparePin(location, index);\n sc.add(pin);\n }\n\n if (this.allLocations.length > 0) {\n this.mapOptions.collection = sc;\n }\n\n let map = new MQA.TileMap(this.mapOptions);\n map.setDraggable(!this.config.disableMapControl);\n map.setZoomLevel(this.config.zoom);\n\n if (this.allLocations.length > 1) {\n map.bestFit(true, 2, 18); // [2 - 18] range is [min - max] zoom level allowed.\n }\n\n if (this.allLocations.length === 0) {\n map.setCenter({lat: this.latitude, lng: this.longitude}); // display map of American continent.\n map.setZoomLevel(2);\n }\n\n if (!this.config.disableMapControl) {\n MQA.withModule('smallzoom', () =>\n map.addControl(\n new MQA.SmallZoom(),\n new MQA.MapCornerPlacement(MQA.MapCorner.TOP_LEFT, new MQA.Size(5,5))\n )\n );\n }\n return map;\n }\n}\n\nMapQuest.initClass();\n","import { BaseMap } from './BaseMap.js';\nimport { OptimizedResizeInstance } from 'js/components/Util/OptimizedResize.js';\n\nexport class MapboxGL extends BaseMap {\n static initClass() {\n this.instances = [];\n this.providerLoaded = false;\n this.className = \"Yext.Maps.MapboxGL\";\n }\n constructor(args) {\n super(args);\n this.mapstyle = 'mapbox://styles/mapbox/streets-v9';\n this.options = {\n container: this.element.id,\n style: this.mapstyle,\n zoom: this.config.zoom,\n interactive: !this.config.disableMapControl\n };\n this.boundsOptions = {\n linear: true,\n duration: 0,\n animate: false,\n padding: this.BUFFER,\n maxZoom: 14\n };\n this.pins = [];\n this.bounds = [];\n }\n\n appendScript() {\n let baseUrl = \"https://api.mapbox.com/mapbox-gl-js/v0.44.1/mapbox-gl\";\n let link = document.createElement('link');\n let mapScript = document.createElement('script');\n link.rel = 'stylesheet';\n link.href = `${baseUrl}.css`;\n mapScript.src = `${baseUrl}.js`;\n mapScript.onload = () => {\n mapboxgl.accessToken = this.config.apiID;\n this.constructor.providerCallback();\n };\n document.head.appendChild(link);\n document.head.appendChild(mapScript);\n }\n\n localizeMap(map) {\n if (document.documentElement.hasAttribute('lang')) {\n const whiteList = [\n 'en',\n 'es',\n 'fr',\n 'de',\n 'ru',\n 'zh'\n ];\n const language = document.documentElement.getAttribute('lang');\n if (whiteList.indexOf(language) > -1) {\n const locale = `{name_${language}}`;\n for (let layer of Array.from(map.getStyle().layers)) {\n // HACK: As of v0.37.0 setting the localization label on road labels deletes the labels\n // Therefore, string check to just avoid setting the locale on road labels.\n if (((layer.layout != null ? layer.layout['text-field'] : undefined) != null) && (layer.id.indexOf('road') === -1)) {\n map.setLayoutProperty(layer.id, 'text-field', locale);\n }\n }\n }\n }\n }\n\n preparePin(i, loc, map, lngLat) {\n let icon = this.iconImage(loc, i);\n\n let wrapper = document.createElement('div');\n let link = document.createElement('a');\n link.className = 'custom-icon-link';\n let url = `${this.config.baseUrl}${loc.url}`;\n if (this.config.linkToGetDirections) {\n url = loc.get_directions_url;\n link.setAttribute('target', '_blank');\n link.setAttribute('rel', 'nofollow noopener noreferrer');\n }\n link.setAttribute('href', url);\n link.setAttribute('data-ya-track', 'drivingdirection');\n\n let image = document.createElement('img');\n image.setAttribute('alt', `${loc.altTagText}`);\n image.src = icon;\n image.setAttribute('width', `${this.pinWidth}`);\n image.setAttribute('height', `${this.pinHeight}`);\n\n link.appendChild(image);\n wrapper.appendChild(link);\n wrapper.setAttribute('data-lon', loc.longitude);\n wrapper.setAttribute('data-lat', loc.latitude);\n wrapper.className = 'custom-icon js-custom-icon';\n\n let marker = new mapboxgl.Marker(wrapper, {offset: new mapboxgl.Point(-this.pinWidth/2, -this.pinHeight/2)}).setLngLat(lngLat);\n return marker;\n }\n\n prepareMap() {\n let marker;\n let map = new mapboxgl.Map(this.options);\n this.bounds = new mapboxgl.LngLatBounds();\n let idx = 0;\n for (let location of Array.from(this.allLocations)) {\n let coord = new mapboxgl.LngLat(location.longitude, location.latitude);\n marker = this.preparePin(idx, location, map, coord);\n this.pins.push(marker);\n this.bounds.extend(coord);\n idx++;\n }\n\n if (this.allLocations.length > 0) {\n this.options.center = this.bounds.getCenter();\n } else {\n this.options.center = new mapboxgl.LngLat(this.longitude, this.latitude);\n this.options.zomm = 3;\n\n map.setCenter(this.options.center);\n map.setZoom(this.options.zoom);\n }\n\n if (!this.config.disableMapControl) {\n map.addControl(new mapboxgl.NavigationControl());\n }\n\n map.on('load', () => {\n if (this.pins.length > 0) {\n for (marker of Array.from(this.pins)) {\n marker.addTo(map);\n }\n map.fitBounds(this.bounds, this.boundsOptions);\n }\n\n this.localizeMap(map);\n\n this.mapLoaded();\n });\n\n OptimizedResizeInstance.on( () => {\n if (this.allLocations.length == 0) return;\n return map.fitBounds(this.bounds, this.boundsOptions);\n });\n\n return map;\n }\n}\n\nMapboxGL.initClass();\n","import { LeafletBase } from './LeafletBase.js';\n\nexport class Mapbox extends LeafletBase {\n static initClass() {\n this.instances = [];\n this.providerLoaded = false;\n this.className = \"Yext.Maps.Mapbox\";\n this.version = \"v3.1.1\";\n }\n\n appendScript() {\n let mapboxBaseUrl = `https://api.tiles.mapbox.com/mapbox.js/${this.constructor.version}/mapbox`;\n let link = document.createElement('link');\n let mapScript = document.createElement('script');\n link.rel = 'stylesheet';\n link.href = `${mapboxBaseUrl}.css`;\n mapScript.src = `${mapboxBaseUrl}.js`;\n mapScript.onload = () => {\n L.mapbox.accessToken = this.config.apiID;\n return this.constructor.providerCallback();\n };\n document.head.appendChild(link);\n document.head.appendChild(mapScript);\n }\n\n initializeMap() {\n let map;\n return map = L.mapbox.map(this.config.mapId, this.config.mapboxMapIdentifier, this.mapOptions);\n }\n}\n\nMapbox.initClass();\n","import { BaseMap } from './BaseMap.js';\n\nexport class Bing extends BaseMap {\n static initClass() {\n this.instances = [];\n this.providerLoaded = false;\n this.className = \"Yext.Maps.Bing\";\n\n window.initializeBing = () => {\n return this.providerCallback();\n };\n }\n\n constructor(args) {\n super(args);\n this.mapOptions = {\n credentials: this.config.apiID,\n zoom: this.config.zoom,\n disableZooming: this.config.disableMapControl,\n disablePanning: this.config.disableMapControl,\n showScalebar: !this.config.disableMapControl,\n showMapTypeSelector: false,\n showDashboard: !this.config.disableMapControl,\n enableSearchLogo: false\n };\n }\n\n appendScript() {\n let script = document.createElement('script');\n script.type = \"text/javascript\";\n script.src = \"//ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0&onScriptLoad=initializeBing&s=1\";\n return document.body.appendChild(script);\n }\n\n preparePin(bingLoc, location, i) {\n let pin = new Microsoft.Maps.Pushpin(bingLoc, {\n icon: this.iconImage(location, i),\n height: \"37px\",\n width: \"26px\",\n anchor: new Microsoft.Maps.Point(13, 37)\n }\n );\n pin.locationData = location;\n return pin;\n }\n\n prepareMap() {\n this.mapOptions.center = new Microsoft.Maps.Location(this.allLocations[0].latitude, this.allLocations[0].longitude);\n this.mapOptions.mapTypeId = Microsoft.Maps.MapTypeId.road;\n\n let pinLayer = new Microsoft.Maps.EntityCollection();\n let map = new Microsoft.Maps.Map(this.element, this.mapOptions);\n let options = map.getOptions();\n let locations = [];\n\n let index = 0;\n for (let location of Array.from(this.allLocations)) {\n let loc = new Microsoft.Maps.Location(location.latitude, location.longitude);\n let pin = this.preparePin(loc, location, index);\n pinLayer.push(pin);\n locations.push(loc);\n\n index++;\n if (index > 100) {\n break;\n }\n\n map.setView({bounds: Microsoft.Maps.LocationRect.fromLocations(locations)});\n map.entities.push(pinLayer);\n }\n\n Microsoft.Maps.Events.addHandler(map, 'click', e => {\n if (e.targetType === 'pushpin') {\n return this.clickHandler(e.target.locationData);\n }\n });\n return map;\n }\n}\n\nBing.initClass();\n","export function isVisible (element: HTMLElement): boolean {\n if (element == null) return false;\n let bounds: ClientRect = element.getBoundingClientRect();\n\n return 0 < (\n (bounds.left || 0)\n + (bounds.top || 0)\n + (bounds.height || element.offsetHeight)\n + (bounds.width || element.offsetWidth)\n + bounds.top\n + bounds.right\n + bounds.bottom\n + bounds.left\n );\n};\n","class Hours {\n static initClass(domScope) {\n this.autoRunInstances = true;\n this.instances = [];\n this.dom = domScope || document;\n }\n\n static loadHoursData() {\n for (let el of this.dom.querySelectorAll('.js-location-hours')) {\n el.locationHours = new this(el);\n this.instances.push(el);\n }\n }\n static runInstances() {\n return Array.from(this.instances).map((instanceElement) =>\n instanceElement.locationHours.run());\n }\n\n static loadAndRun() {\n this.loadHoursData();\n this.runInstances();\n }\n\n constructor(element, opts) {\n this.element = element;\n this.opts = opts || {};\n this.days = JSON.parse(this.element.dataset.days);\n\n let elOpts = {\n showOpenToday: this.element.dataset.showopentoday,\n todayFirst: this.element.dataset.todayfirst\n };\n\n let today = new Date();\n\n this.opts = Object.assign(this.opts, elOpts);\n\n // JS day of week -> Pages day of week\n // 0 -> 6\n // 1 -> 0\n // 2 -> 1\n // 3 -> 2\n\n this.todayIndex = today.getDay() === 0 ? 6 : today.getDay() - 1;\n this.currentTimeStamp = (today.getHours()*100) + today.getMinutes();\n }\n\n isOpenNow() {\n let currentDayData = this.days[this.todayIndex];\n let openNow = false;\n\n for (let interval of Array.from(currentDayData.intervals)) {\n if (interval.start === interval.end && interval.end === 0) {\n openNow = true;\n break;\n } else if (interval.start <= this.currentTimeStamp) {\n if (interval.end === 0) {\n openNow = true;\n break;\n } else if (interval.end >=this.currentTimeStamp) {\n openNow = true;\n break;\n }\n }\n }\n\n return openNow;\n }\n\n applyOpenToday() {\n for (let row of this.element.querySelectorAll('.js-day-of-week-row')) {\n let startIndex = row.dataset.dayOfWeekStartIndex;\n let endIndex = row.dataset.dayOfWeekEndIndex;\n\n if ((this.todayIndex >= startIndex) && (this.todayIndex <= endIndex)) {\n row.classList.add('is-today');\n row.classList.add('js-is-today');\n\n if (this.opts.showOpenToday != null) {\n let openTodayTarget = this.element.querySelector('.js-opentoday');\n if (openTodayTarget) {\n openTodayTarget.styles.display = 'block';\n }\n }\n }\n }\n }\n\n sortFromToday() {\n let bodies = this.element.querySelectorAll('.c-location-hours-details tbody');\n for (let table of this.element.querySelectorAll('.c-location-hours-details tbody')) {\n let rows = Array.from(table.childNodes);\n rows.reverse();\n let sortedRows = rows.slice(0, 7-this.todayIndex).reverse().concat(rows.slice(7-this.todayIndex).reverse());\n\n while (table.firstChild) {\n table.firstChild.parentElement.removeChild(table.firstChild);\n }\n sortedRows.forEach((elt) => {\n table.appendChild(elt);\n });\n }\n }\n\n applyOpenNow() {\n if ((this.opts.openNowTarget != null) && this.isOpenNow) {\n this.domScope.querySelector(this.opts.openNowTarget).classList.add('is-open-now');\n }\n }\n\n getTimeStamp(yextTime, twentyFourHourClock) {\n let hour = Math.floor(yextTime/100);\n let minutes = `00${yextTime%100}`;\n\n let timeStamp = \"\";\n if (twentyFourHourClock) {\n timeStamp = `${hour}:${minutes.slice(-2)}`;\n } else {\n timeStamp = `${hour}:${minutes.slice(-2)} AM`;\n if (hour === 12) { timeStamp = `12:${minutes.slice(-2)} PM`; }\n if (hour >= 13) { timeStamp = `${hour-12}:${minutes.slice(-2)} PM`; }\n if (hour === 0) { timeStamp = `12:${minutes.slice(-2)} AM`; }\n }\n\n return timeStamp\n }\n\n greenDot() {\n // Turn Dot Green\n if (this.element.classList.contains('c-location-hours-today')) {\n this.element.querySelector('.c-location-hours-today-dot').classList.add('js-is-open');\n }\n }\n\n greenText() {\n // Turn Dot Green\n if (this.element.classList.contains('c-location-hours-today')) {\n this.element.classList.add('js-is-open');\n }\n }\n\n processTodayHours() {\n for (let instance of this.element.querySelectorAll('.js-is-today .js-location-hours-interval-instance')) {\n let twentyFourHourClock = (instance.dataset.twentyFourHourClock === 'true');\n let start = parseInt(instance.dataset.openIntervalStart);\n let end = parseInt(instance.dataset.openIntervalEnd);\n let startTimeStamp = this.getTimeStamp(start, twentyFourHourClock);\n let endTimeStamp = this.getTimeStamp(end, twentyFourHourClock);\n\n let today = new Date();\n let currentHour = (today.getHours()*100) + today.getMinutes();\n\n let endTime = '' +\n endTimeStamp +\n ' ';\n let startTime = '' +\n startTimeStamp +\n ' ';\n\n let greenDot = false;\n let colorText = false;\n\n if (this.element.classList.contains('js-dot')) {\n greenDot = true;\n this.element.querySelector('.c-location-hours-today-dot').classList.add('js-dot');\n } else if (this.element.classList.contains('js-color')) {\n colorText = true;\n }\n\n\n if ((start !== end) && ((start !== 0) || (end !== 0))) { // Not Open 24 hours\n if ((end === 0) && (currentHour > start)) {\n if (greenDot) {\n this.greenDot();\n } else if (colorText) {\n this.greenText();\n }\n return instance.innerHTML = instance.dataset.midnightText;\n } else if (start < end) {\n if ((currentHour > start) && (currentHour < end)) {\n if (greenDot) {\n this.greenDot();\n } else if (colorText) {\n this.greenText();\n }\n return instance.innerHTML = instance.dataset.openUntilText + ` ${endTime}`;\n } else if ((currentHour > end) && (end !== 0)) {\n instance.innerHTML = instance.dataset.closeAtText + ` ${endTime}`;\n return Array.from(instance.children).forEach(el => el.classList.add('currentlyClosed'));\n } else {\n if (instance.dataset.opensAtText) {\n return instance.innerHTML = instance.dataset.opensAtText + ` ${startTime}`;\n }\n }\n } else { // Open past midnight\n if (currentHour > start) {\n if (greenDot) {\n this.greenDot();\n } else if (colorText) {\n this.greenText();\n }\n return instance.innerHTML = instance.dataset.openUntilText + ` ${endTime}`;\n }\n }\n }\n }\n }\n\n run() {\n this.applyOpenNow();\n this.applyOpenToday();\n this.processTodayHours();\n if (this.opts.todayFirst) {\n this.sortFromToday();\n }\n }\n}\n\nHours.initClass();\n\nexport const LocationHours = Hours;\n","export const Autorun = function() {\n for (let el of document.querySelectorAll(\".c-instagram [data-userId]\")) {\n let target = el.id;\n let accessToken = el.dataset.accesstoken;\n let userId = parseInt(el.dataset.userid);\n let limit = el.dataset.limit;\n let resolution = el.dataset.resolution;\n\n // TODO: move to soy2js?\n let template = \"{{likes}}
\";\n\n if (window.instagramTemplates && window.instagramTemplates[target]) {\n template = window.instagramTemplates[target];\n }\n\n let after = null;\n\n if (window.instagramCallbacks && window.instagramCallbacks[target]) {\n after = window.instagramCallbacks[target];\n }\n\n let feed = new Instafeed({\n get: \"user\",\n target,\n accessToken,\n userId,\n limit,\n resolution,\n template,\n after\n });\n\n return feed.run();\n }\n};\n\n// From https://github.com/stevenschobert/instafeed.js/tree/f6d241fea5056187966736e898a5be5a8d8ab059\nexport class Instafeed {\n constructor(params, context) {\n // default options\n this.options = {\n target: 'instafeed',\n get: 'popular',\n resolution: 'thumbnail',\n sortBy: 'none',\n links: true,\n mock: false,\n useHttp: false\n };\n\n // if an object is passed in, override the default options\n if (typeof params === 'object') {\n for (let option in params) { let value = params[option]; this.options[option] = value; }\n }\n\n // save a reference to context, which defaults to curr scope\n // this will be used to cache data from parsing to the real\n // instance the user interacts with (for pagination)\n this.context = (context != null) ? context : this;\n\n // generate a unique key for the instance\n this.unique = this._genKey();\n }\n\n // method to check if there are more results to load\n hasNext() {\n return (typeof this.context.nextUrl === 'string') && (this.context.nextUrl.length > 0);\n }\n\n // method to display next results using the pagination\n // data from API. Manually passing a url to .run() will\n // bypass the URL creation from options.\n next() {\n // check for a valid next url first\n if (!this.hasNext()) { return false; }\n\n // call run with the next results\n return this.run(this.context.nextUrl);\n }\n\n // MAKE IT GO!\n run(url) {\n // make sure either a client id or access token is set\n if (typeof this.options.clientId !== 'string') {\n if (typeof this.options.accessToken !== 'string') {\n throw new Error(\"Missing clientId or accessToken.\");\n }\n }\n if (typeof this.options.accessToken !== 'string') {\n if (typeof this.options.clientId !== 'string') {\n throw new Error(\"Missing clientId or accessToken.\");\n }\n }\n\n // run the before() callback, if one is set\n if ((this.options.before != null) && (typeof this.options.before === 'function')) {\n this.options.before.call(this);\n }\n\n // to make it easier to test various parts of the class,\n // any DOM manipulation first checks for the DOM to exist\n if (typeof document !== 'undefined' && document !== null) {\n // make a new script element\n let script = document.createElement('script');\n\n // give the script an id so it can removed later\n script.id = 'instafeed-fetcher';\n\n // assign the script src using _buildUrl(), or by\n // using the argument passed to the function\n script.src = url || this._buildUrl();\n\n // add the new script object to the header\n let header = document.getElementsByTagName('head');\n header[0].appendChild(script);\n\n // create a global object to cache the options\n let instanceName = `instafeedCache${this.unique}`;\n window[instanceName] = new Instafeed(this.options, this);\n window[instanceName].unique = this.unique;\n }\n\n // return true if everything ran\n return true;\n }\n\n // Data parser (must be a json object)\n parse(response) {\n // throw an error if not an object\n if (typeof response !== 'object') {\n // either throw an error or call the error callback\n if ((this.options.error != null) && (typeof this.options.error === 'function')) {\n this.options.error.call(this, 'Invalid JSON data');\n return false;\n } else {\n throw new Error('Invalid JSON response');\n }\n }\n\n // check if the api returned an error code\n if (response.meta.code !== 200) {\n // either throw an error or call the error callback\n if ((this.options.error != null) && (typeof this.options.error === 'function')) {\n this.options.error.call(this, response.meta.error_message);\n return false;\n } else {\n throw new Error(`Error from Instagram: ${response.meta.error_message}`);\n }\n }\n\n // check if the returned data is empty\n if (response.data.length === 0) {\n // either throw an error or call the error callback\n if ((this.options.error != null) && (typeof this.options.error === 'function')) {\n this.options.error.call(this, 'No images were returned from Instagram');\n return false;\n } else {\n throw new Error('No images were returned from Instagram');\n }\n }\n\n // call the success callback if no errors in response\n if ((this.options.success != null) && (typeof this.options.success === 'function')) {\n this.options.success.call(this, response);\n }\n\n // cache the pagination data, if it exists. Apply the value\n // to the \"context\" object, which will be a true reference\n // if this instance was created just for parsing\n this.context.nextUrl = '';\n if (response.pagination != null) {\n this.context.nextUrl = response.pagination.next_url;\n }\n\n // before images are inserted into the DOM, check for sorting\n if (this.options.sortBy !== 'none') {\n // if sort is set to random, don't check for polarity\n let sortSettings;\n if (this.options.sortBy === 'random') {\n sortSettings = ['', 'random'];\n } else {\n // get the sort settings from @options\n sortSettings = this.options.sortBy.split('-');\n }\n\n // determine if the order should be inverse\n let reverse = sortSettings[0] === 'least' ? true : false;\n\n // handle the case for sorting\n switch (sortSettings[1]) {\n case 'random':\n response.data.sort(() => 0.5 - Math.random());\n break;\n\n case 'recent':\n response.data = this._sortBy(response.data, 'created_time', reverse);\n break;\n\n case 'liked':\n response.data = this._sortBy(response.data, 'likes.count', reverse);\n break;\n\n case 'commented':\n response.data = this._sortBy(response.data, 'comments.count', reverse);\n break;\n\n default: throw new Error(`Invalid option for sortBy: '${this.options.sortBy}'.`);\n }\n }\n\n // to make it easier to test various parts of the class,\n // any DOM manipulation first checks for the DOM to exist\n if ((typeof document !== 'undefined' && document !== null) && (this.options.mock === false)) {\n // limit the number of images if needed\n let image, imageUrl, node, tmpEl;\n let images = response.data;\n if (this.options.limit != null) {\n if (images.length > this.options.limit) { images = images.slice(0, +this.options.limit + 1 || undefined); }\n }\n\n // create the document fragment\n let fragment = document.createDocumentFragment();\n\n // filter the results\n if ((this.options.filter != null) && (typeof this.options.filter === 'function')) {\n images = this._filter(images, this.options.filter);\n }\n\n if ((this.options.template != null) && (typeof this.options.template === 'function')) {\n // create a temp dom node that will hold the html\n tmpEl = document.createElement('div');\n\n // add the html string generated from soy to the temp node\n tmpEl.innerHTML = this.options.template(images);\n\n // loop through the contents of the temp node\n // and append them to the fragment\n for (node of Array.from([].slice.call(tmpEl.childNodes))) {\n fragment.appendChild(node);\n }\n\n // determine whether to parse a template, or use html fragments\n } else if ((this.options.template != null) && (typeof this.options.template === 'string')) {\n // create an html string\n let htmlString = '';\n let imageString = '';\n let imgUrl = '';\n\n // create a temp dom node that will hold the html\n tmpEl = document.createElement('div');\n\n // loop through the images\n for (image of Array.from(images)) {\n // use protocol relative image url\n imageUrl = image.images[this.options.resolution].url;\n if (!this.options.useHttp) { imageUrl = imageUrl.replace('http://', '//'); }\n\n // parse the template\n imageString = this._makeTemplate(this.options.template, {\n model: image,\n id: image.id,\n link: image.link,\n image: imageUrl,\n caption: this._getObjectProperty(image, 'caption.text'),\n likes: image.likes.count,\n comments: image.comments.count,\n location: this._getObjectProperty(image, 'location.name')\n }\n );\n\n // add the image partial to the html string\n htmlString += imageString;\n }\n\n // add the final html string to the temp node\n tmpEl.innerHTML = htmlString;\n\n // loop through the contents of the temp node\n // and append them to the fragment\n for (node of Array.from([].slice.call(tmpEl.childNodes))) {\n fragment.appendChild(node);\n }\n } else {\n // loop through the images\n for (image of Array.from(images)) {\n // create the image using the @options's resolution\n let img = document.createElement('img');\n\n // use protocol relative image url\n imageUrl = image.images[this.options.resolution].url;\n if (!this.options.useHttp) { imageUrl = imageUrl.replace('http://', '//'); }\n img.src = imageUrl;\n\n // wrap the image in an anchor tag, unless turned off\n if (this.options.links === true) {\n // create an anchor link\n let anchor = document.createElement('a');\n anchor.href = image.link;\n\n // add the image to it\n anchor.appendChild(img);\n\n // add the anchor to the fragment\n fragment.appendChild(anchor);\n } else {\n // add the image (without link) to the fragment\n fragment.appendChild(img);\n }\n }\n }\n\n // Add the fragment to the DOM\n document.getElementById(this.options.target).appendChild(fragment);\n\n // remove the injected script tag\n let header = document.getElementsByTagName('head')[0];\n header.removeChild(document.getElementById('instafeed-fetcher'));\n\n // delete the cached instance of the class\n let instanceName = `instafeedCache${this.unique}`;\n window[instanceName] = undefined;\n try {\n delete window[instanceName];\n } catch (error) {}\n }\n // END if document?\n\n // run after callback function, if one is set\n if ((this.options.after != null) && (typeof this.options.after === 'function')) {\n this.options.after.call(this);\n }\n\n // return true if everything ran\n return true;\n }\n\n // helper function that structures a url for the run()\n // function to inject into the document hearder\n _buildUrl() {\n // set the base API URL\n let endpoint;\n let base = \"https://doxta90bkl.execute-api.us-east-1.amazonaws.com/prod/v1\";\n\n // get the endpoint based on @options.get\n switch (this.options.get) {\n case \"popular\": endpoint = \"media/popular\"; break;\n case \"tagged\":\n // make sure a tag is defined\n if (typeof this.options.tagName !== 'string') {\n throw new Error(\"No tag name specified. Use the 'tagName' option.\");\n }\n\n // set the endpoint\n endpoint = `tags/${this.options.tagName}/media/recent`;\n break;\n\n case \"location\":\n // make sure a location id is defined\n if (typeof this.options.locationId !== 'number') {\n throw new Error(\"No location specified. Use the 'locationId' option.\");\n }\n\n // set the endpoint\n endpoint = `locations/${this.options.locationId}/media/recent`;\n break;\n\n case \"user\":\n // make sure there is a user id set\n if (typeof this.options.userId !== 'number') {\n throw new Error(\"No user specified. Use the 'userId' option.\");\n }\n\n // make sure there is an access token\n if (typeof this.options.accessToken !== 'string') {\n throw new Error(\"No access token. Use the 'accessToken' option.\");\n }\n\n endpoint = `users/${this.options.userId}/media/recent`;\n break;\n // throw an error if any other option is given\n default: throw new Error(`Invalid option for get: '${this.options.get}'.`);\n }\n\n // build the final url (uses the instance name)\n let final = `${base}/${endpoint}`;\n\n // use the access token for auth when it's available\n // otherwise fall back to the client id\n if (this.options.accessToken != null) {\n final += `?access_token=${this.options.accessToken}`;\n } else {\n final += `?client_id=${this.options.clientId}`;\n }\n\n // add the count limit\n if (this.options.limit != null) {\n final += `&count=${this.options.limit}`;\n }\n\n // add the jsonp callback\n final += `&callback=instafeedCache${this.unique}.parse`;\n\n // return the final url\n return final;\n }\n\n // helper function to generate a unique key\n _genKey() {\n let S4 = () => (((1+Math.random())*0x10000)|0).toString(16).substring(1);\n return `${S4()}${S4()}${S4()}${S4()}`;\n }\n\n // helper function to parse a template\n _makeTemplate(template, data) {\n // regex pattern\n let pattern = new RegExp(`\\\n(?:\\\\{{2})\\\n([\\\\w\\\\[\\\\]\\\\.]+)\\\n(?:\\\\}{2})\\\n`);\n\n // copy the template\n let output = template;\n\n // process the template (null defaults to empty strings)\n while (pattern.test(output)) {\n var left;\n let varName = output.match(pattern)[1];\n let varValue = (left = this._getObjectProperty(data, varName)) != null ? left : '';\n output = output.replace(pattern, `${varValue}`);\n }\n\n // send back the new string\n return output;\n }\n\n // helper function to access an object property by string\n _getObjectProperty(object, property) {\n // convert [] to dot-syntax\n property = property.replace(/\\[(\\w+)\\]/g, '.$1');\n\n // split the object into arrays\n let pieces = property.split('.');\n\n // run through the array to find the\n // nested property\n while (pieces.length) {\n // move down the property chain\n let piece = pieces.shift();\n\n // if they key exists, copy the value\n // into 'object', otherwise return null\n if ((object != null) && piece in object) {\n object = object[piece];\n } else {\n return null;\n }\n }\n\n // send back the final object\n return object;\n }\n\n // helper function to sort an array objects by an\n // object property (sorts highest to lowest)\n _sortBy(data, property, reverse) {\n // comparator function\n let sorter = function(a, b) {\n let valueA = this._getObjectProperty(a, property);\n let valueB = this._getObjectProperty(b, property);\n // sort lowest-to-highest if reverse is true\n if (reverse) {\n if (valueA > valueB) { return 1; } else { return -1; }\n }\n\n // otherwise sort highest to lowest\n if (valueA < valueB) { return 1; } else { return -1; }\n };\n\n // sort the data\n data.sort(sorter.bind(this));\n\n return data;\n }\n\n // helper method to filter out images\n _filter(images, filter) {\n let filteredImages = [];\n for (let image of Array.from(images)) {\n (function(image) {\n if (filter(image)) { return filteredImages.push(image); }\n })(image);\n }\n return filteredImages;\n }\n}\n","module.exports = \"(function(){var g,aa=\\\"function\\\"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(c.get||c.set)throw new TypeError(\\\"ES3 does not support getters and setters.\\\");a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)},k=\\\"undefined\\\"!=typeof window&&window===this?this:\\\"undefined\\\"!=typeof global&&null!=global?global:this;function l(){l=function(){};k.Symbol||(k.Symbol=ba)}var ca=0;function ba(a){return\\\"jscomp_symbol_\\\"+(a||\\\"\\\")+ca++}\\nfunction m(){l();var a=k.Symbol.iterator;a||(a=k.Symbol.iterator=k.Symbol(\\\"iterator\\\"));\\\"function\\\"!=typeof Array.prototype[a]&&aa(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return da(this)}});m=function(){}}function da(a){var b=0;return ea(function(){return b>b/4).toString(16):\\\"10000000-1000-4000-8000-100000000000\\\".replace(/[018]/g,wa)};\\nfunction G(a,b){var c=window.GoogleAnalyticsObject||\\\"ga\\\";window[c]=window[c]||function(a){for(var b=[],d=0;dwindow.gaDevIds.indexOf(\\\"i5iSjo\\\")&&window.gaDevIds.push(\\\"i5iSjo\\\");window[c](\\\"provide\\\",a,b);window.gaplugins=window.gaplugins||{};window.gaplugins[a.charAt(0).toUpperCase()+a.slice(1)]=b}var H={T:1,U:2,V:3,X:4,Y:5,Z:6,$:7,aa:8,ba:9,W:10},I=Object.keys(H).length;\\nfunction J(a,b){a.set(\\\"\\\\x26_av\\\",\\\"2.4.1\\\");var c=a.get(\\\"\\\\x26_au\\\"),c=parseInt(c||\\\"0\\\",16).toString(2);if(c.lengthb.getAttribute(c+\\\"on\\\").split(/\\\\s*,\\\\s*/).indexOf(a.type))){var c=B(b,c),d=A({},this.a.fieldsObj,c);this.f.send(c.hitType||\\\"event\\\",z({transport:\\\"beacon\\\"},d,this.f,this.a.hitFilter,b,a))}};L.prototype.remove=function(){var a=this;Object.keys(this.b).forEach(function(b){a.b[b].j()})};G(\\\"eventTracker\\\",L);\\nfunction za(a,b){var c=this;J(a,H.V);window.IntersectionObserver&&window.MutationObserver&&(this.a=A({rootMargin:\\\"0px\\\",fieldsObj:{},attributePrefix:\\\"ga-\\\"},b),this.c=a,this.M=this.M.bind(this),this.O=this.O.bind(this),this.K=this.K.bind(this),this.L=this.L.bind(this),this.b=null,this.items=[],this.i={},this.h={},sa(function(){c.a.elements&&c.observeElements(c.a.elements)}))}g=za.prototype;\\ng.observeElements=function(a){var b=this;a=M(this,a);this.items=this.items.concat(a.items);this.i=A({},a.i,this.i);this.h=A({},a.h,this.h);a.items.forEach(function(a){var c=b.h[a.threshold]=b.h[a.threshold]||new IntersectionObserver(b.O,{rootMargin:b.a.rootMargin,threshold:[+a.threshold]});(a=b.i[a.id]||(b.i[a.id]=document.getElementById(a.id)))&&c.observe(a)});this.b||(this.b=new MutationObserver(this.M),this.b.observe(document.body,{childList:!0,subtree:!0}));requestAnimationFrame(function(){})};\\ng.unobserveElements=function(a){var b=[],c=[];this.items.forEach(function(d){a.some(function(a){a=Aa(a);return a.id===d.id&&a.threshold===d.threshold&&a.trackFirstImpressionOnly===d.trackFirstImpressionOnly})?c.push(d):b.push(d)});if(b.length){var d=M(this,b),e=M(this,c);this.items=d.items;this.i=d.i;this.h=d.h;c.forEach(function(a){if(!d.i[a.id]){var b=e.h[a.threshold],c=e.i[a.id];c&&b.unobserve(c);d.h[a.threshold]||e.h[a.threshold].disconnect()}})}else this.unobserveAllElements()};\\ng.unobserveAllElements=function(){var a=this;Object.keys(this.h).forEach(function(b){a.h[b].disconnect()});this.b.disconnect();this.b=null;this.items=[];this.i={};this.h={}};function M(a,b){var c=[],d={},e={};b.length&&b.forEach(function(b){b=Aa(b);c.push(b);e[b.id]=a.i[b.id]||null;d[b.threshold]=a.h[b.threshold]||null});return{items:c,i:e,h:d}}g.M=function(a){for(var b=0,c;c=a[b];b++){for(var d=0,e;e=c.removedNodes[d];d++)N(this,e,this.L);for(d=0;e=c.addedNodes[d];d++)N(this,e,this.K)}};\\nfunction N(a,b,c){1==b.nodeType&&b.id in a.i&&c(b.id);for(var d=0,e;e=b.childNodes[d];d++)N(a,e,c)}\\ng.O=function(a){for(var b=[],c=0,d;d=a[c];c++)for(var e=0,h;h=this.items[e];e++){var f;if(f=d.target.id===h.id)(f=h.threshold)?f=d.intersectionRatio>=f:(f=d.intersectionRect,f=06E4*this.timeout||this.c&&this.c.format(a)!=this.c.format(b))?!0:!1};U.prototype.b=function(a){var b=this;return function(c){a(c);var d=c.get(\\\"sessionControl\\\");c=\\\"start\\\"==d||b.isExpired();var d=\\\"end\\\"==d,e=b.a.get();e.hitTime=+new Date;c&&(e.isExpired=!1,e.id=E());d&&(e.isExpired=!0);b.a.set(e)}};\\nU.prototype.j=function(){y(this.f,\\\"sendHitTask\\\",this.b);this.a.j();delete T[this.f.get(\\\"trackingId\\\")]};var Ha=30;function W(a,b){J(a,H.W);window.addEventListener&&(this.b=A({increaseThreshold:20,sessionTimeout:Ha,fieldsObj:{}},b),this.f=a,this.c=Ja(this),this.g=ta(this.g.bind(this),500),this.o=this.o.bind(this),this.a=S(a.get(\\\"trackingId\\\"),\\\"plugins/max-scroll-tracker\\\"),this.m=Ia(a,this.b.sessionTimeout,this.b.timeZone),x(a,\\\"set\\\",this.o),Ka(this))}\\nfunction Ka(a){100>(a.a.get()[a.c]||0)&&window.addEventListener(\\\"scroll\\\",a.g)}\\nW.prototype.g=function(){var a=document.documentElement,b=document.body,a=Math.min(100,Math.max(0,Math.round(window.pageYOffset/(Math.max(a.offsetHeight,a.scrollHeight,b.offsetHeight,b.scrollHeight)-window.innerHeight)*100))),b=V(this.m);b!=this.a.get().sessionId&&(Ga(this.a),this.a.set({sessionId:b}));if(this.m.isExpired(this.a.get().sessionId))Ga(this.a);else if(b=this.a.get()[this.c]||0,a>b&&(100!=a&&100!=b||window.removeEventListener(\\\"scroll\\\",this.g),b=a-b,100==a||b>=this.b.increaseThreshold)){var c=\\n{};this.a.set((c[this.c]=a,c.sessionId=V(this.m),c));a={transport:\\\"beacon\\\",eventCategory:\\\"Max Scroll\\\",eventAction:\\\"increase\\\",eventValue:b,eventLabel:String(a),nonInteraction:!0};this.b.maxScrollMetricIndex&&(a[\\\"metric\\\"+this.b.maxScrollMetricIndex]=b);this.f.send(\\\"event\\\",z(a,this.b.fieldsObj,this.f,this.b.hitFilter))}};W.prototype.o=function(a){var b=this;return function(c,d){a(c,d);var e={};(D(c)?c:(e[c]=d,e)).page&&(c=b.c,b.c=Ja(b),b.c!=c&&Ka(b))}};\\nfunction Ja(a){a=u(a.f.get(\\\"page\\\")||a.f.get(\\\"location\\\"));return a.pathname+a.search}W.prototype.remove=function(){this.m.j();window.removeEventListener(\\\"scroll\\\",this.g);y(this.f,\\\"set\\\",this.o)};G(\\\"maxScrollTracker\\\",W);var La={};function Ma(a,b){J(a,H.X);window.matchMedia&&(this.a=A({changeTemplate:this.changeTemplate,changeTimeout:1E3,fieldsObj:{}},b),D(this.a.definitions)&&(b=this.a.definitions,this.a.definitions=Array.isArray(b)?b:[b],this.b=a,this.c=[],Oa(this)))}\\nfunction Oa(a){a.a.definitions.forEach(function(b){if(b.name&&b.dimensionIndex){var c=Pa(b);a.b.set(\\\"dimension\\\"+b.dimensionIndex,c);Qa(a,b)}})}function Pa(a){var b;a.items.forEach(function(a){Ra(a.media).matches&&(b=a)});return b?b.name:\\\"(not set)\\\"}\\nfunction Qa(a,b){b.items.forEach(function(c){c=Ra(c.media);var d=ta(function(){var c=Pa(b),d=a.b.get(\\\"dimension\\\"+b.dimensionIndex);c!==d&&(a.b.set(\\\"dimension\\\"+b.dimensionIndex,c),c={transport:\\\"beacon\\\",eventCategory:b.name,eventAction:\\\"change\\\",eventLabel:a.a.changeTemplate(d,c),nonInteraction:!0},a.b.send(\\\"event\\\",z(c,a.a.fieldsObj,a.b,a.a.hitFilter)))},a.a.changeTimeout);c.addListener(d);a.c.push({fa:c,da:d})})}Ma.prototype.remove=function(){for(var a=0,b;b=this.c[a];a++)b.fa.removeListener(b.da)};\\nMa.prototype.changeTemplate=function(a,b){return a+\\\" \\\\x3d\\\\x3e \\\"+b};G(\\\"mediaQueryTracker\\\",Ma);function Ra(a){return La[a]||(La[a]=window.matchMedia(a))}function X(a,b){J(a,H.Y);window.addEventListener&&(this.a=A({formSelector:\\\"form\\\",shouldTrackOutboundForm:this.shouldTrackOutboundForm,fieldsObj:{},attributePrefix:\\\"ga-\\\"},b),this.b=a,this.c=q(\\\"submit\\\",this.a.formSelector,this.f.bind(this)))}\\nX.prototype.f=function(a,b){var c={transport:\\\"beacon\\\",eventCategory:\\\"Outbound Form\\\",eventAction:\\\"submit\\\",eventLabel:u(b.action).href};if(this.a.shouldTrackOutboundForm(b,u)){navigator.sendBeacon||(a.preventDefault(),c.hitCallback=ua(function(){b.submit()}));var d=A({},this.a.fieldsObj,B(b,this.a.attributePrefix));this.b.send(\\\"event\\\",z(c,d,this.b,this.a.hitFilter,b,a))}};\\nX.prototype.shouldTrackOutboundForm=function(a,b){a=b(a.action);return a.hostname!=location.hostname&&\\\"http\\\"==a.protocol.slice(0,4)};X.prototype.remove=function(){this.c.j()};G(\\\"outboundFormTracker\\\",X);\\nfunction Y(a,b){var c=this;J(a,H.Z);window.addEventListener&&(this.a=A({events:[\\\"click\\\"],linkSelector:\\\"a, area\\\",shouldTrackOutboundLink:this.shouldTrackOutboundLink,fieldsObj:{},attributePrefix:\\\"ga-\\\"},b),this.c=a,this.f=this.f.bind(this),this.b={},this.a.events.forEach(function(a){c.b[a]=q(a,c.a.linkSelector,c.f)}))}\\nY.prototype.f=function(a,b){var c=this;if(this.a.shouldTrackOutboundLink(b,u)){var d=b.getAttribute(\\\"href\\\")||b.getAttribute(\\\"xlink:href\\\"),e=u(d),e={transport:\\\"beacon\\\",eventCategory:\\\"Outbound Link\\\",eventAction:a.type,eventLabel:e.href},h=A({},this.a.fieldsObj,B(b,this.a.attributePrefix)),f=z(e,h,this.c,this.a.hitFilter,b,a);if(navigator.sendBeacon||\\\"click\\\"!=a.type||\\\"_blank\\\"==b.target||a.metaKey||a.ctrlKey||a.shiftKey||a.altKey||1=a.a.visibleThreshold&&(b=Math.round(b/1E3),d={transport:\\\"beacon\\\",nonInteraction:!0,eventCategory:\\\"Page Visibility\\\",eventAction:\\\"track\\\",eventValue:b,eventLabel:\\\"(not set)\\\"},c&&(d.queueTime=+new Date-c),a.a.visibleMetricIndex&&(d[\\\"metric\\\"+a.a.visibleMetricIndex]=b),a.b.send(\\\"event\\\",z(d,a.a.fieldsObj,a.b,a.a.hitFilter)))}\\nfunction Ta(a,b){var c=b?b:{};b=c.hitTime;var c=c.ea,d={transport:\\\"beacon\\\"};b&&(d.queueTime=+new Date-b);c&&a.a.pageLoadsMetricIndex&&(d[\\\"metric\\\"+a.a.pageLoadsMetricIndex]=1);a.b.send(\\\"pageview\\\",z(d,a.a.fieldsObj,a.b,a.a.hitFilter))}g.v=function(a){var b=this;return function(c,d){var e={},e=D(c)?c:(e[c]=d,e);e.page&&e.page!==b.b.get(\\\"page\\\")&&\\\"visible\\\"==b.g&&b.s();a(c,d)}};g.N=function(a,b){a.time!=b.time&&(b.pageId!=Z||\\\"visible\\\"!=b.state||this.f.isExpired(b.sessionId)||Va(this,b,{hitTime:a.time}))};\\ng.G=function(){\\\"hidden\\\"!=this.g&&this.s()};g.remove=function(){this.c.j();this.f.j();y(this.b,\\\"set\\\",this.v);window.removeEventListener(\\\"unload\\\",this.G);document.removeEventListener(\\\"visibilitychange\\\",this.s)};G(\\\"pageVisibilityTracker\\\",Sa);\\nfunction Wa(a,b){J(a,H.aa);window.addEventListener&&(this.a=A({fieldsObj:{},hitFilter:null},b),this.b=a,this.u=this.u.bind(this),this.J=this.J.bind(this),this.D=this.D.bind(this),this.A=this.A.bind(this),this.B=this.B.bind(this),this.F=this.F.bind(this),\\\"complete\\\"!=document.readyState?window.addEventListener(\\\"load\\\",this.u):this.u())}g=Wa.prototype;\\ng.u=function(){if(window.FB)try{window.FB.Event.subscribe(\\\"edge.create\\\",this.B),window.FB.Event.subscribe(\\\"edge.remove\\\",this.F)}catch(a){}window.twttr&&this.J()};g.J=function(){var a=this;try{window.twttr.ready(function(){window.twttr.events.bind(\\\"tweet\\\",a.D);window.twttr.events.bind(\\\"follow\\\",a.A)})}catch(b){}};function Xa(a){try{window.twttr.ready(function(){window.twttr.events.unbind(\\\"tweet\\\",a.D);window.twttr.events.unbind(\\\"follow\\\",a.A)})}catch(b){}}\\ng.D=function(a){if(\\\"tweet\\\"==a.region){var b={transport:\\\"beacon\\\",socialNetwork:\\\"Twitter\\\",socialAction:\\\"tweet\\\",socialTarget:a.data.url||a.target.getAttribute(\\\"data-url\\\")||location.href};this.b.send(\\\"social\\\",z(b,this.a.fieldsObj,this.b,this.a.hitFilter,a.target,a))}};\\ng.A=function(a){if(\\\"follow\\\"==a.region){var b={transport:\\\"beacon\\\",socialNetwork:\\\"Twitter\\\",socialAction:\\\"follow\\\",socialTarget:a.data.screen_name||a.target.getAttribute(\\\"data-screen-name\\\")};this.b.send(\\\"social\\\",z(b,this.a.fieldsObj,this.b,this.a.hitFilter,a.target,a))}};g.B=function(a){this.b.send(\\\"social\\\",z({transport:\\\"beacon\\\",socialNetwork:\\\"Facebook\\\",socialAction:\\\"like\\\",socialTarget:a},this.a.fieldsObj,this.b,this.a.hitFilter))};\\ng.F=function(a){this.b.send(\\\"social\\\",z({transport:\\\"beacon\\\",socialNetwork:\\\"Facebook\\\",socialAction:\\\"unlike\\\",socialTarget:a},this.a.fieldsObj,this.b,this.a.hitFilter))};g.remove=function(){window.removeEventListener(\\\"load\\\",this.u);try{window.FB.Event.unsubscribe(\\\"edge.create\\\",this.B),window.FB.Event.unsubscribe(\\\"edge.remove\\\",this.F)}catch(a){}Xa(this)};G(\\\"socialWidgetTracker\\\",Wa);\\nfunction Ya(a,b){J(a,H.ba);history.pushState&&window.addEventListener&&(this.a=A({shouldTrackUrlChange:this.shouldTrackUrlChange,trackReplaceState:!1,fieldsObj:{},hitFilter:null},b),this.b=a,this.c=location.pathname+location.search,this.H=this.H.bind(this),this.I=this.I.bind(this),this.C=this.C.bind(this),x(history,\\\"pushState\\\",this.H),x(history,\\\"replaceState\\\",this.I),window.addEventListener(\\\"popstate\\\",this.C))}g=Ya.prototype;\\ng.H=function(a){var b=this;return function(c){for(var d=[],e=0;e\n window.google_trackConversion({\n google_conversion_id: coversionId,\n google_conversion_label: conversionLabel,\n google_custom_params: customParams,\n google_remarketing_only: remarketingOnly\n })\n ;\n }\n}\n","class CalendarEvent {\n constructor(el) {\n this.startDate = new Date(el.dataset.eventStart*1000);\n this.endDate = new Date(el.dataset.eventEnd*1000);\n if(this.endDate.getTime() === new Date(0).getTime()) {\n this.endDate = new Date(this.startDate.getTime());\n this.endDate.setHours(23,59,59,9999);\n }\n this.element = el;\n }\n\n shouldDisplay(currentDate) {\n return currentDate < this.endDate;\n }\n}\n\nexport class CalendarEventList {\n static autorun(domScope) {\n const scope = domScope || document;\n for (let list of scope.querySelectorAll('.c-events-wrapper')) {\n list.CalendarEventList = new CalendarEventList(list);\n }\n }\n\n constructor(el) {\n this.eventsToDisplay = el.dataset.eventsToDisplay;\n if (this.eventsToDisplay == null) {\n this.eventsToDisplay = 1000; // display them all by default (within reason)\n }\n this.eventsDisplayed = 0;\n this.events = [];\n this.today = new Date();\n this.element = el;\n for (let e of el.querySelectorAll('.c-events-event')) {\n e.CalendarEvent = new CalendarEvent(e);\n\n let remove = !e.CalendarEvent.shouldDisplay(this.today) || this.eventsDisplayed >= this.eventsToDisplay;\n\n if (remove) {\n e.parentElement.removeChild(e);\n } else {\n this.eventsDisplayed++;\n }\n }\n if (this.eventsDisplayed === 0) {\n this.element.parentElement.removeChild(this.element);\n }\n }\n}\n\nCalendarEventList.autorun();\n","export class Description {\n static autorun(scope = document) {\n for (let el of scope.querySelectorAll('.c-description')) {\n el.Description = new Description(el);\n }\n }\n\n constructor(element) {\n this.element = element;\n Array.from(this.element.querySelectorAll('.js-show-more, .js-show-less'))\n .forEach((toggler) => {\n toggler.addEventListener('click', (e) => {\n this.element.classList.toggle('show-full-description');\n e.preventDefault();\n });\n });\n }\n}\n\nDescription.autorun();\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a