{"version":3,"sources":["animations.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"all.js","sourcesContent":["\n\n // ASSUME JQUERY ELEMENTS. Todo: don't assume. (String would also have length)\n\nfunction animateCountWithBackground($foreground, $background, triggerElement, name) {\n /*\n * This function takes a foreground and background element\n * and creates a GSAP animation for counts.\n */\n\n // init controller\n var controller = new ScrollMagic.Controller();\n\n // Defaults\n $background.removeAttr('style');\n if (!$foreground.attr('data-number')) {\n $foreground.attr('data-number', $foreground.find('span').html());\n }\n var number = $foreground.attr('data-number');\n var comma = number.indexOf(',') > 0 ? true : false;\n var fontSize = $background.css('font-size');\n var count = {\n val: 0,\n end: number.replace(',','')\n }\n\n // Set initial values.\n TweenLite.set($background, {fontSize: '0'});\n $foreground.find('span').html('0');\n\n // Create timeline.\n var timeline = new TimelineMax();\n\n timeline.to($background, 2, {fontSize: fontSize})\n .to(count, 2, { val: count.end, roundProps:\"val\", onUpdate: function() {\n \n if (comma) {\n // Count the number of characters.\n // Add commas.\n // e.g. 4,500 | 12,342,234 | 230\n var loops = Math.ceil( count.val.toString().length / 3 );\n var number = \n (loops > 2 ? count.val.toString().slice(-9,-6) + '.' : '') +\n (loops > 1 ? count.val.toString().slice(-6,-3) + ',' : '') +\n count.val.toString().slice(-3);\n } else {\n var number = count.val;\n }\n\n $foreground.find('span').html(number);\n }, onUpdateParams: [count]}, '-=2'); \n\n var stat = new ScrollMagic.Scene({triggerElement: triggerElement, duration: 0})\n .setTween(timeline)\n // .addIndicators({name: name})\n .addTo(controller)\n .reverse(false);\n}\n\n\nfunction animateCount($foreground, triggerElement, duration, name) {\n /*\n * This function takes a foreground element\n * and creates a GSAP animation for counts.\n */\n\n var duration = duration ? duration : 2;\n // init controller\n var controller = new ScrollMagic.Controller();\n\n // Because we want to be able to reflow, and we're just tracking this data\n // in the DOM, let's store it there independently.\n if (!$foreground.attr('data-number')) {\n $foreground.attr('data-number', $foreground.children('span').html());\n }\n\n var number = $foreground.attr('data-number');\n\n var comma = number.indexOf(',') > 0 ? true : false;\n var count = {\n val: 0,\n end: number.replace(/,/g,'')\n }\n // Set initial values.\n $foreground.children('span').html('0');\n\n // Create timeline.\n var timeline = new TimelineMax();\n\n timeline.to(count, duration, { val: count.end, roundProps:\"val\", onUpdate: function() { \n if (comma) {\n // Count the number of characters.\n // Add commas.\n // e.g. 4,500 | 12,342,234 | 230\n var loops = Math.ceil( count.val.toString().length / 3 );\n var number = \n (loops > 2 ? count.val.toString().slice(-9,-6) + ',' : '') +\n (loops > 1 ? count.val.toString().slice(-6,-3) + ',' : '') +\n count.val.toString().slice(-3);\n } else {\n var number = count.val;\n }\n\n $foreground.find('span').html(number);\n }, onUpdateParams: [count]}, '-=2'); \n\n var stat = new ScrollMagic.Scene({triggerElement: triggerElement, duration: 0})\n .setTween(timeline)\n // .addIndicators({name: name})\n .addTo(controller)\n .reverse(false);\n}\n\nfunction animateHeight($element, triggerElement, name, defaultHeight, position) {\n\n // init controller\n var controller = new ScrollMagic.Controller();\n\n position ? position = position : \"+=0\";\n\n // Create timeline.\n var timeline = new TimelineMax();\n\n // Defaults\n $element.removeAttr('style');\n var height = $element.outerHeight(true);\n \n // save space\n $element.parents('.height-wrap').removeAttr('style');\n $element.parents('.height-wrap').css('min-height', height);\n\n $element.css('overflow', 'hidden'); // Just in case.\n $element.css('flex-grow', '0'); // Makes it graceful.\n defaultHeight === 0 ? $element.height('0') : $element.height('10px');\n\n // if ($element.length > 1) {\n // // We have more than one element, let's stagger!\n // timeline.staggerFromTo($element, 2, { height: defaultHeight === 0 ? '0' : '10px' }, { height: height }, 1, position);\n // } else {\n timeline.fromTo($element, 1, { height: defaultHeight === 0 ? '0' : '10px' }, { height: height }, position);\n // }\n\n var stat = new ScrollMagic.Scene({triggerElement: triggerElement, duration: 0})\n .setTween(timeline)\n // .addIndicators({name: name})\n .addTo(controller)\n .reverse(false);\n}\n\n\nfunction animateHorizontalSwipe($element, triggerElement, name, duration) {\n\n // init controller\n var controller = new ScrollMagic.Controller();\n\n duration ? duration = duration : duration = 2;\n\n // Create timeline.\n var timeline = new TimelineMax();\n\n // Get the size of the underlying asset,\n // which we can use to set the size of both.\n // Ensures that they line up.\n $mask = $element.find('.swipe__mask');\n $mask.removeAttr('style');\n\n var $swipeBackground = $element.find('.swipe__background');\n var bgWidth = $swipeBackground.outerWidth();\n var bgHeight = $swipeBackground.outerHeight(true);\n\n // Set the top layer to the same size.\n $mask.find('img').height(bgHeight);\n $mask.find('img').width(bgWidth);\n\n $mask.width('0');\n \n timeline.to($mask, duration, { width: bgWidth });\n\n var stat = new ScrollMagic.Scene({triggerElement: triggerElement, duration: 0})\n .setTween(timeline)\n // .addIndicators({name: name})\n .addTo(controller)\n .reverse(false);\n}\n\nfunction animateHorizontalSlide($element, triggerElement, delay, name, position) {\n // init controller\n var controller = new ScrollMagic.Controller();\n\n // Create timeline.\n var timeline = new TimelineMax();\n // Set element width even it is hidden;\n $element.removeAttr('style');\n \n var width = $element.outerWidth();\n $element.width(width)\n var from = { left: -width, opacity:0 };\n var to = {left: 0, delay:delay, opacity:1, ease: Power2.easeOut};\n timeline.fromTo($element, 1, from, to, \"+=1\")\n\n var stat = new ScrollMagic.Scene({ triggerElement: triggerElement, duration: 0 })\n .setTween(timeline)\n // .addIndicators({ name: name })\n .addTo(controller)\n .reverse(false);\n}\n\nfunction animateGrow($element, triggerElement, name, position) {\n // init controller\n var controller = new ScrollMagic.Controller();\n\n // Create timeline.\n var timeline = new TimelineMax();\n\n $element.removeAttr('style');\n\n var from = { transform: 'scale(0.6, 0.6)'};\n var to = { transform: 'scale(1, 1)' };\n\n timeline.fromTo($element, 2, from, to, position);\n\n var stat = new ScrollMagic.Scene({ triggerElement: triggerElement, duration: 0 })\n .setTween(timeline)\n // .addIndicators({ name: name })\n .addTo(controller)\n .reverse(false);\n}\n\nfunction animateSwipe($element, triggerElement, name, position) {\n // init controller\n var controller = new ScrollMagic.Controller();\n\n // Create timeline.\n var timeline = new TimelineMax();\n $element.removeAttr('style');\n\n var from = { width:'100%' };\n var to = { width: 0 };\n\n timeline.fromTo($element, 1, from, to, position);\n\n var stat = new ScrollMagic.Scene({ triggerElement: triggerElement, duration: 0 })\n .setTween(timeline)\n // .addIndicators({ name: name })\n .addTo(controller)\n .reverse(false);\n}\n\nfunction animateRadialSwipe($element, triggerElement, name) {\n var RAD = Math.PI / 180;\n var PI_2 = Math.PI / 2;\n\n var clipPath = document.querySelector(\"#\" + name + \"__arcPath\");\n\n var clipCircle = document.querySelector('#' + name + '__clipCircle');\n var image = document.querySelector('#' + name + '__image');\n\n\n // Find the original img.\n var defaultImg = $element.find('img.chart');\n defaultImg.show();\n var svg = $element.find('svg');\n var height = defaultImg.outerHeight();\n var width = defaultImg.outerWidth();\n defaultImg.hide(); // hide the img.\n\n // Set the SVG to the height that the image would occupy.\n image.setAttribute(\"width\", width);\n image.setAttribute(\"height\", height);\n svg.css(\"width\", width);\n svg.css(\"height\", height);\n\n // And the cropCircle\n clipCircle.setAttribute(\"cx\", width/2);\n clipCircle.setAttribute(\"cy\", height/2);\n clipCircle.setAttribute(\"r\", height/2);\n\n\n var arc = { \n start: 0,\n end: 0,\n cx: (width / 2),\n cy: (height / 2),\n r: (width / 2)\n };\n\n updatePath();\n\n function updatePath() {\n clipPath.setAttribute(\"d\", getPath(arc.cx, arc.cy, arc.r, arc.start, arc.end)); \n // $element.css(\"clip-path\", getPath(arc.cx, arc.cy, arc.r, arc.start, arc.end)); \n }\n\n function getPath(cx, cy, r, a1, a2) {\n \n var delta = a2 - a1;\n \n if (delta === 360) { \n return \"M \" + (cx - r) + \" \" + cy + \" a \" + r + \" \" + r + \" 0 1 0 \" + r * 2 + \" 0 a \" + r + \" \" + r + \" 0 1 0 \" + -r * 2 + \" 0z\"; \n }\n \n var largeArc = delta > 180 ? 1 : 0;\n \n a1 = a1 * RAD - PI_2;\n a2 = a2 * RAD - PI_2;\n\n var x1 = cx + r * Math.cos(a2); \n var y1 = cy + r * Math.sin(a2);\n\n var x2 = cx + r * Math.cos(a1); \n var y2 = cy + r * Math.sin(a1);\n \n return \"M \" + x1 + \" \" + y1 + \" A \" + r + \" \" + r + \" 0 \" + largeArc + \" 0 \" + x2 + \" \" + y2 + \" L \" + cx + \" \" + cy + \"z\";\n }\n\n // init controller\n var controller = new ScrollMagic.Controller();\n\n // Create timeline.\n var timeline = new TimelineMax();\n\n timeline.to(arc, 2, {\n end: 360,\n ease: Linear.easeNone,\n onUpdate: updatePath,\n // repeat: -1, \n repeatDelay: 0.25,\n });\n\n //\n var stat = new ScrollMagic.Scene({triggerElement: triggerElement, duration: 0})\n .setTween(timeline)\n // .addIndicators({name: name})\n .addTo(controller)\n .reverse(false);\n\n}\n\n\nfunction animateFade($element, triggerElement, delay, name, position) {\n // E.g. stat 09, 11, \n\n position ? position = position : \"+=0\";\n \n // init controller\n var controller = new ScrollMagic.Controller();\n\n // Create timeline.\n var timeline = new TimelineMax();\n\n $element.removeAttr('style');\n\n var duration = 1;\n var from = { opacity: 0, ease: Linear.ease };\n var to = { opacity: 1, delay: delay};\n\n // if ($element.length > 1) {\n // // Array of elements\n // timeline.staggerFromTo($element, duration, from, to, 0.5, position);\n // } else {\n timeline.fromTo($element, duration, from, to, position);\n // }\n\n var stat = new ScrollMagic.Scene({ triggerElement: triggerElement, duration: 0 })\n .setTween(timeline)\n // .addIndicators({ name: name })\n .addTo(controller)\n .reverse(false);\n}\n\nfunction animateFadeSet($element, triggerElement, delay, name) {\n // E.g. stat 09, 11, \n\n // init controller\n var controller = new ScrollMagic.Controller();\n\n // Create timeline.\n var timeline = new TimelineMax();\n\n $element.removeAttr('style');\n\n var duration = 2;\n var from = { opacity: 0, ease: Linear.ease };\n var to = { opacity: 1, delay: delay};\n\n if ($element.length > 1) {\n // Array of elements\n timeline.fromTo($element, duration, from, to);\n } else {\n timeline.fromTo($element, duration, from, to);\n }\n var stat = new ScrollMagic.Scene({ triggerElement: triggerElement, duration: 0 })\n .setTween(timeline)\n // .addIndicators({ name: name })\n .addTo(controller)\n .reverse(false);\n}\n\nfunction animateTextSizeWithFade($element, triggerElement) {\n // init controller\n var controller = new ScrollMagic.Controller();\n\n // Create timeline.\n var timeline = new TimelineMax();\n $element.removeAttr('style');\n\n var fontSize = $element.css('font-size');\n\n var from = { fontSize: 0, opacity: 0 };\n var to = { fontSize: fontSize, opacity: 1};\n\n timeline.fromTo($element, 2, from, to);\n\n var stat = new ScrollMagic.Scene({triggerElement: triggerElement, duration: 0})\n .setTween(timeline)\n // .addIndicators({name: name})\n .addTo(controller)\n .reverse(false);\n}\n\n\n\nfunction aroundTheWorld($element, triggerElement, name) {\n var RAD = Math.PI / 180;\n var PI_2 = Math.PI / 2;\n\n var clipPath = document.querySelector(\"#\" + name + \"__arcPath\");\n\n var clipCircle = document.querySelector('#' + name + '__clipCircle');\n var image = document.querySelector('#' + name + '__image');\n\n\n // Find the original img.\n var defaultImg = $element.find('img.chart');\n var svg = $element.find('svg');\n var height = defaultImg.outerHeight();\n var width = defaultImg.outerWidth();\n defaultImg.hide(); // hide the img.\n\n // Set the SVG to the height that the image would occupy.\n image.setAttribute(\"width\", width);\n image.setAttribute(\"height\", height);\n svg.css(\"width\", width);\n svg.css(\"height\", height);\n\n // And the cropCircle\n clipCircle.setAttribute(\"cx\", width/2);\n clipCircle.setAttribute(\"cy\", height/2);\n clipCircle.setAttribute(\"r\", height/2);\n\n\n var arc = { \n start: 360,\n end: 190, \n cx: (width / 2),\n cy: (height / 2),\n r: (height / 2)\n };\n\n updatePath();\n\n function updatePath() {\n clipPath.setAttribute(\"d\", getPath(arc.cx, arc.cy, arc.r, arc.end, arc.start));\n }\n\n function getPath(cx, cy, r, a1, a2) {\n \n var delta = a2 - a1;\n \n if (delta === 360) { \n return \"M \" + (cx - r) + \" \" + cy + \" a \" + r + \" \" + r + \" 0 1 0 \" + r * 2 + \" 0 a \" + r + \" \" + r + \" 0 1 0 \" + -r * 2 + \" 0z\"; \n }\n \n var largeArc = delta > 180 ? 1 : 0;\n \n a1 = a1 * RAD - PI_2;\n a2 = a2 * RAD - PI_2;\n\n var x1 = cx + r * Math.cos(a2); \n var y1 = cy + r * Math.sin(a2);\n\n var x2 = cx + r * Math.cos(a1); \n var y2 = cy + r * Math.sin(a1);\n \n return \"M \" + x1 + \" \" + y1 + \" A \" + r + \" \" + r + \" 0 \" + largeArc + \" 0 \" + x2 + \" \" + y2 + \" L \" + cx + \" \" + cy + \"z\";\n }\n\n // init controller\n var controller = new ScrollMagic.Controller();\n\n // Create timeline.\n var timeline = new TimelineMax();\n\n timeline.to(arc, 2, {\n end: 0,\n ease: Linear.easeNone,\n onUpdate: updatePath,\n });\n\n // Rotate plane.\n $plane = $element.find('.stat19__plane img');\n TweenMax.set($plane, {rotation: 200, transformOrigin: \"center\"});\n timeline.to($plane, 2, {\n rotation: 0,\n transformOrigin: \"center\",\n ease: Linear.easeNone,\n }, '');\n\n //\n var stat = new ScrollMagic.Scene({triggerElement: triggerElement, duration: 0})\n .setTween(timeline)\n // .addIndicators({name: name})\n .addTo(controller)\n .reverse(false);\n\n}\n\n\n\n// Resets\nfunction resetAnimateRadialSwipe() {\n\n}\n\n\n// jQuery plugins\n\n(function($,sr){\n\n // debouncing function from John Hann\n // http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/\n var debounce = function (func, threshold, execAsap) {\n var timeout;\n \n return function debounced () {\n var obj = this, args = arguments;\n function delayed () {\n if (!execAsap)\n func.apply(obj, args);\n timeout = null;\n };\n \n if (timeout)\n clearTimeout(timeout);\n else if (execAsap)\n func.apply(obj, args);\n \n timeout = setTimeout(delayed, threshold || 750);\n };\n }\n // smartresize \n jQuery.fn[sr] = function(fn){ return fn ? this.bind('resize', debounce(fn)) : this.trigger(sr); };\n \n })(jQuery,'smartresize');\n"]}