{"version":3,"sources":["webpack:///./js/modules/analytics/init-scroll-depth.js","webpack:///../node_modules/scroll-depth/jquery.scrolldepth.js"],"names":["__webpack_require__","r","__webpack_exports__","$","document","ready","scrollDepth","minHeight","percentage","userTiming","pixelDepth","nonInteraction","eventHandler","data","window","ga","gtag","event_category","event_label","value","parseInt","eventLabel","logActivity","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","undefined","universalGA","classicGA","gaGlobal","standardEventHandler","defaults","elements","gtmOverride","trackerName","dataLayer","$window","cache","scrollEventBound","lastPixelDepth","options","startTime","Date","sendEvent","action","label","scrollDistance","timing","command","event","eventCategory","eventAction","eventValue","eventNonInteraction","arguments","length","rounded","eventTiming","_gaq","push","Math","floor","toString","bindScrollDepth","func","wait","context","args","result","timeout","previous","later","on","docHeight","height","winHeight","innerHeight","scrollTop","marks","25%","50%","75%","100%","calculateMarks","off","each","index","elem","inArray","offset","top","checkElements","key","val","checkMarks","apply","now","remaining","this","clearTimeout","setTimeout","extend","__gaTracker","reset","addElements","elems","isArray","merge","removeElements","inElementsArray","inCacheArray","splice","exports","module"],"mappings":"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","file":"scroll-depth-1171b537d2119668be5b.js","sourcesContent":["import 'scroll-depth';\r\n\r\n$(document).ready(() => {\r\n $.scrollDepth({\r\n minHeight: 2000,\r\n percentage: true,\r\n userTiming: false,\r\n pixelDepth: false,\r\n nonInteraction: false,\r\n eventHandler: data => logActivity(data),\r\n });\r\n});\r\n\r\nfunction logActivity(data) {\r\n if (!window.ga) { return; }\r\n\r\n if (!window.gtag) { return; }\r\n\r\n window.gtag('event', 'Scroll', {\r\n event_category: 'Scroll',\r\n event_label: 'Scroll Depth',\r\n value: parseInt(data.eventLabel, 10),\r\n });\r\n}\r\n","/*!\n * @preserve\n * jquery.scrolldepth.js | v1.0\n * Copyright (c) 2016 Rob Flaherty (@robflaherty)\n * Licensed under the MIT and GPL licenses.\n */\n\n/* Universal module definition */\n\n(function(factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD\n define(['jquery'], factory);\n } else if (typeof module === 'object' && module.exports) {\n // CommonJS\n module.exports = factory(require('jquery'));\n } else {\n // Browser globals\n factory(jQuery);\n }\n}(function($) {\n\n/* Scroll Depth */\n\n \"use strict\";\n\n var defaults = {\n minHeight: 0,\n elements: [],\n percentage: true,\n userTiming: true,\n pixelDepth: true,\n nonInteraction: true,\n gaGlobal: false,\n gtmOverride: false,\n trackerName: false,\n dataLayer: 'dataLayer'\n };\n\n var $window = $(window),\n cache = [],\n scrollEventBound = false,\n lastPixelDepth = 0,\n universalGA,\n classicGA,\n gaGlobal,\n standardEventHandler;\n\n /*\n * Plugin\n */\n\n $.scrollDepth = function(options) {\n\n var startTime = +new Date;\n\n options = $.extend({}, defaults, options);\n\n // Return early if document height is too small\n if ( $(document).height() < options.minHeight ) {\n return;\n }\n\n /*\n * Determine which version of GA is being used\n * \"ga\", \"__gaTracker\", _gaq\", and \"dataLayer\" are the possible globals\n */\n\n if (options.gaGlobal) {\n universalGA = true;\n gaGlobal = options.gaGlobal;\n } else if (typeof ga === \"function\") {\n universalGA = true;\n gaGlobal = 'ga';\n } else if (typeof __gaTracker === \"function\") {\n universalGA = true;\n gaGlobal = '__gaTracker';\n }\n\n if (typeof _gaq !== \"undefined\" && typeof _gaq.push === \"function\") {\n classicGA = true;\n }\n\n if (typeof options.eventHandler === \"function\") {\n standardEventHandler = options.eventHandler;\n } else if (typeof window[options.dataLayer] !== \"undefined\" && typeof window[options.dataLayer].push === \"function\" && !options.gtmOverride) {\n\n standardEventHandler = function(data) {\n window[options.dataLayer].push(data);\n };\n }\n\n /*\n * Functions\n */\n\n function sendEvent(action, label, scrollDistance, timing) {\n\n var command = options.trackerName ? (options.trackerName + '.send') : 'send';\n\n if (standardEventHandler) {\n\n standardEventHandler({'event': 'ScrollDistance', 'eventCategory': 'Scroll Depth', 'eventAction': action, 'eventLabel': label, 'eventValue': 1, 'eventNonInteraction': options.nonInteraction});\n\n if (options.pixelDepth && arguments.length > 2 && scrollDistance > lastPixelDepth) {\n lastPixelDepth = scrollDistance;\n standardEventHandler({'event': 'ScrollDistance', 'eventCategory': 'Scroll Depth', 'eventAction': 'Pixel Depth', 'eventLabel': rounded(scrollDistance), 'eventValue': 1, 'eventNonInteraction': options.nonInteraction});\n }\n\n if (options.userTiming && arguments.length > 3) {\n standardEventHandler({'event': 'ScrollTiming', 'eventCategory': 'Scroll Depth', 'eventAction': action, 'eventLabel': label, 'eventTiming': timing});\n }\n\n } else {\n\n if (universalGA) {\n\n window[gaGlobal](command, 'event', 'Scroll Depth', action, label, 1, {'nonInteraction': options.nonInteraction});\n\n if (options.pixelDepth && arguments.length > 2 && scrollDistance > lastPixelDepth) {\n lastPixelDepth = scrollDistance;\n window[gaGlobal](command, 'event', 'Scroll Depth', 'Pixel Depth', rounded(scrollDistance), 1, {'nonInteraction': options.nonInteraction});\n }\n\n if (options.userTiming && arguments.length > 3) {\n window[gaGlobal](command, 'timing', 'Scroll Depth', action, timing, label);\n }\n\n }\n\n if (classicGA) {\n\n _gaq.push(['_trackEvent', 'Scroll Depth', action, label, 1, options.nonInteraction]);\n\n if (options.pixelDepth && arguments.length > 2 && scrollDistance > lastPixelDepth) {\n lastPixelDepth = scrollDistance;\n _gaq.push(['_trackEvent', 'Scroll Depth', 'Pixel Depth', rounded(scrollDistance), 1, options.nonInteraction]);\n }\n\n if (options.userTiming && arguments.length > 3) {\n _gaq.push(['_trackTiming', 'Scroll Depth', action, timing, label, 100]);\n }\n\n }\n\n }\n\n }\n\n function calculateMarks(docHeight) {\n return {\n '25%' : parseInt(docHeight * 0.25, 10),\n '50%' : parseInt(docHeight * 0.50, 10),\n '75%' : parseInt(docHeight * 0.75, 10),\n // Cushion to trigger 100% event in iOS\n '100%': docHeight - 5\n };\n }\n\n function checkMarks(marks, scrollDistance, timing) {\n // Check each active mark\n $.each(marks, function(key, val) {\n if ( $.inArray(key, cache) === -1 && scrollDistance >= val ) {\n sendEvent('Percentage', key, scrollDistance, timing);\n cache.push(key);\n }\n });\n }\n\n function checkElements(elements, scrollDistance, timing) {\n $.each(elements, function(index, elem) {\n if ( $.inArray(elem, cache) === -1 && $(elem).length ) {\n if ( scrollDistance >= $(elem).offset().top ) {\n sendEvent('Elements', elem, scrollDistance, timing);\n cache.push(elem);\n }\n }\n });\n }\n\n function rounded(scrollDistance) {\n // Returns String\n return (Math.floor(scrollDistance/250) * 250).toString();\n }\n\n function init() {\n bindScrollDepth();\n }\n\n /*\n * Public Methods\n */\n\n // Reset Scroll Depth with the originally initialized options\n $.scrollDepth.reset = function() {\n cache = [];\n lastPixelDepth = 0;\n $window.off('scroll.scrollDepth');\n bindScrollDepth();\n };\n\n // Add DOM elements to be tracked\n $.scrollDepth.addElements = function(elems) {\n\n if (typeof elems == \"undefined\" || !$.isArray(elems)) {\n return;\n }\n\n $.merge(options.elements, elems);\n\n // If scroll event has been unbound from window, rebind\n if (!scrollEventBound) {\n bindScrollDepth();\n }\n\n };\n\n // Remove DOM elements currently tracked\n $.scrollDepth.removeElements = function(elems) {\n\n if (typeof elems == \"undefined\" || !$.isArray(elems)) {\n return;\n }\n\n $.each(elems, function(index, elem) {\n\n var inElementsArray = $.inArray(elem, options.elements);\n var inCacheArray = $.inArray(elem, cache);\n\n if (inElementsArray != -1) {\n options.elements.splice(inElementsArray, 1);\n }\n\n if (inCacheArray != -1) {\n cache.splice(inCacheArray, 1);\n }\n\n });\n\n };\n\n /*\n * Throttle function borrowed from:\n * Underscore.js 1.5.2\n * http://underscorejs.org\n * (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Underscore may be freely distributed under the MIT license.\n */\n\n function throttle(func, wait) {\n var context, args, result;\n var timeout = null;\n var previous = 0;\n var later = function() {\n previous = new Date;\n timeout = null;\n result = func.apply(context, args);\n };\n return function() {\n var now = new Date;\n if (!previous) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0) {\n clearTimeout(timeout);\n timeout = null;\n previous = now;\n result = func.apply(context, args);\n } else if (!timeout) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n }\n\n /*\n * Scroll Event\n */\n\n function bindScrollDepth() {\n\n scrollEventBound = true;\n\n $window.on('scroll.scrollDepth', throttle(function() {\n /*\n * We calculate document and window height on each scroll event to\n * account for dynamic DOM changes.\n */\n\n var docHeight = $(document).height(),\n winHeight = window.innerHeight ? window.innerHeight : $window.height(),\n scrollDistance = $window.scrollTop() + winHeight,\n\n // Recalculate percentage marks\n marks = calculateMarks(docHeight),\n\n // Timing\n timing = +new Date - startTime;\n\n // If all marks already hit, unbind scroll event\n if (cache.length >= options.elements.length + (options.percentage ? 4:0)) {\n $window.off('scroll.scrollDepth');\n scrollEventBound = false;\n return;\n }\n\n // Check specified DOM elements\n if (options.elements) {\n checkElements(options.elements, scrollDistance, timing);\n }\n\n // Check standard marks\n if (options.percentage) {\n checkMarks(marks, scrollDistance, timing);\n }\n }, 500));\n\n }\n\n init();\n\n };\n\n // UMD export\n return $.scrollDepth;\n\n}));\n"],"sourceRoot":""}