{"version":3,"file":"script.min.js","sources":["script.js"],"sourcesContent":["(function () { var require = undefined; var module = undefined; var exports = undefined; var define = undefined; (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i 0; // create clone for reference\n\n var clone = element.cloneNode(true);\n\n var cleanup = function cleanup() {\n element.removeAttribute('data-animated');\n element.setAttribute('style', clone.getAttribute('style'));\n element.style.display = nowVisible ? 'none' : '';\n\n if (callbackFn) {\n callbackFn();\n }\n }; // store attribute so everyone knows we're animating this element\n\n\n element.setAttribute('data-animated', 'true'); // toggle element visiblity right away if we're making something visible\n\n if (!nowVisible) {\n element.style.display = '';\n }\n\n var hiddenStyles;\n var visibleStyles; // animate properties\n\n if (animation === 'slide') {\n hiddenStyles = initObjectProperties(['height', 'borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom'], 0);\n visibleStyles = {};\n\n if (!nowVisible) {\n var computedStyles = window.getComputedStyle(element);\n visibleStyles = copyObjectProperties(['height', 'borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom'], computedStyles); // in some browsers, getComputedStyle returns \"auto\" value. this falls back to getBoundingClientRect() in those browsers since we need an actual height.\n\n if (!isFinite(visibleStyles.height)) {\n var clientRect = element.getBoundingClientRect();\n visibleStyles.height = clientRect.height;\n }\n\n css(element, hiddenStyles);\n } // don't show a scrollbar during animation\n\n\n element.style.overflowY = 'hidden';\n animate(element, nowVisible ? hiddenStyles : visibleStyles, cleanup);\n } else {\n hiddenStyles = {\n opacity: 0\n };\n visibleStyles = {\n opacity: 1\n };\n\n if (!nowVisible) {\n css(element, hiddenStyles);\n }\n\n animate(element, nowVisible ? hiddenStyles : visibleStyles, cleanup);\n }\n}\n\nfunction animate(element, targetStyles, fn) {\n var last = +new Date();\n var initialStyles = window.getComputedStyle(element);\n var currentStyles = {};\n var propSteps = {};\n\n for (var property in targetStyles) {\n if (!targetStyles.hasOwnProperty(property)) {\n continue;\n } // make sure we have an object filled with floats\n\n\n targetStyles[property] = parseFloat(targetStyles[property]); // calculate step size & current value\n\n var to = targetStyles[property];\n var current = parseFloat(initialStyles[property]); // is there something to do?\n\n if (current === to) {\n delete targetStyles[property];\n continue;\n }\n\n propSteps[property] = (to - current) / duration; // points per second\n\n currentStyles[property] = current;\n }\n\n var tick = function tick() {\n var now = +new Date();\n var timeSinceLastTick = now - last;\n var done = true;\n var step, to, increment, newValue;\n\n for (var _property in targetStyles) {\n if (!targetStyles.hasOwnProperty(_property)) {\n continue;\n }\n\n step = propSteps[_property];\n to = targetStyles[_property];\n increment = step * timeSinceLastTick;\n newValue = currentStyles[_property] + increment;\n\n if (step > 0 && newValue >= to || step < 0 && newValue <= to) {\n newValue = to;\n } else {\n done = false;\n } // store new value\n\n\n currentStyles[_property] = newValue;\n element.style[_property] = _property !== 'opacity' ? newValue + 'px' : newValue;\n }\n\n last = +new Date();\n\n if (!done) {\n // keep going until we're done for all props\n window.requestAnimationFrame(tick);\n } else {\n // call callback\n fn && fn();\n }\n };\n\n tick();\n}\n\nmodule.exports = {\n toggle: toggle,\n animate: animate,\n animated: animated\n};\n\n},{}],2:[function(require,module,exports){\n\"use strict\";\n\nvar defaults = {\n animation: 'fade',\n rehide: false,\n content: '',\n cookie: null,\n icon: '×',\n screenWidthCondition: null,\n position: 'center',\n testMode: false,\n trigger: false,\n closable: true\n};\n\nvar Animator = require('./animator.js');\n/**\n * Merge 2 objects, values of the latter overwriting the former.\n *\n * @param obj1\n * @param obj2\n * @returns {*}\n */\n\n\nfunction merge(obj1, obj2) {\n var obj3 = {}; // add obj1 to obj3\n\n for (var attrname in obj1) {\n if (obj1.hasOwnProperty(attrname)) {\n obj3[attrname] = obj1[attrname];\n }\n } // add obj2 to obj3\n\n\n for (var _attrname in obj2) {\n if (obj2.hasOwnProperty(_attrname)) {\n obj3[_attrname] = obj2[_attrname];\n }\n }\n\n return obj3;\n}\n/**\n * Get the real height of entire document.\n * @returns {number}\n */\n\n\nfunction getDocumentHeight() {\n var body = document.body;\n var html = document.documentElement;\n return Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);\n} // Box Object\n\n\nfunction Box(id, config, fireEvent) {\n this.id = id;\n this.fireEvent = fireEvent; // store config values\n\n this.config = merge(defaults, config); // add overlay element to dom and store ref to overlay\n\n this.overlay = document.createElement('div');\n this.overlay.setAttribute('aria-modal', true);\n this.overlay.style.display = 'none';\n this.overlay.id = 'boxzilla-overlay-' + this.id;\n this.overlay.classList.add('boxzilla-overlay');\n document.body.appendChild(this.overlay); // state\n\n this.visible = false;\n this.dismissed = false;\n this.triggered = false;\n this.triggerHeight = this.calculateTriggerHeight();\n this.cookieSet = this.isCookieSet();\n this.element = null;\n this.contentElement = null;\n this.closeIcon = null; // create dom elements for this box\n\n this.dom(); // further initialise the box\n\n this.events();\n} // initialise the box\n\n\nBox.prototype.events = function () {\n var box = this; // attach event to \"close\" icon inside box\n\n if (this.closeIcon) {\n this.closeIcon.addEventListener('click', function (evt) {\n evt.preventDefault();\n box.dismiss();\n });\n }\n\n this.element.addEventListener('click', function (evt) {\n if (evt.target.tagName === 'A' || evt.target.tagName === 'AREA') {\n box.fireEvent('box.interactions.link', [box, evt.target]);\n }\n }, false);\n this.element.addEventListener('submit', function (evt) {\n box.setCookie();\n box.fireEvent('box.interactions.form', [box, evt.target]);\n }, false);\n this.overlay.addEventListener('click', function (evt) {\n var x = evt.offsetX;\n var y = evt.offsetY; // calculate if click was less than 40px outside box to avoid closing it by accident\n\n var rect = box.element.getBoundingClientRect();\n var margin = 40; // if click was not anywhere near box, dismiss it.\n\n if (x < rect.left - margin || x > rect.right + margin || y < rect.top - margin || y > rect.bottom + margin) {\n box.dismiss();\n }\n });\n}; // generate dom elements for this box\n\n\nBox.prototype.dom = function () {\n var wrapper = document.createElement('div');\n wrapper.className = 'boxzilla-container boxzilla-' + this.config.position + '-container';\n var box = document.createElement('div');\n box.id = 'boxzilla-' + this.id;\n box.className = 'boxzilla boxzilla-' + this.id + ' boxzilla-' + this.config.position;\n box.style.display = 'none';\n wrapper.appendChild(box);\n var content;\n\n if (typeof this.config.content === 'string') {\n content = document.createElement('div');\n content.innerHTML = this.config.content;\n } else {\n content = this.config.content; // make sure element is visible\n\n content.style.display = '';\n }\n\n content.className = 'boxzilla-content';\n box.appendChild(content);\n\n if (this.config.closable && this.config.icon) {\n var closeIcon = document.createElement('span');\n closeIcon.className = 'boxzilla-close-icon';\n closeIcon.innerHTML = this.config.icon;\n closeIcon.setAttribute('aria-label', 'close');\n box.appendChild(closeIcon);\n this.closeIcon = closeIcon;\n }\n\n document.body.appendChild(wrapper);\n this.contentElement = content;\n this.element = box;\n}; // set (calculate) custom box styling depending on box options\n\n\nBox.prototype.setCustomBoxStyling = function () {\n // reset element to its initial state\n var origDisplay = this.element.style.display;\n this.element.style.display = '';\n this.element.style.overflowY = '';\n this.element.style.maxHeight = ''; // get new dimensions\n\n var windowHeight = window.innerHeight;\n var boxHeight = this.element.clientHeight; // add scrollbar to box and limit height\n\n if (boxHeight > windowHeight) {\n this.element.style.maxHeight = windowHeight + 'px';\n this.element.style.overflowY = 'scroll';\n } // set new top margin for boxes which are centered\n\n\n if (this.config.position === 'center') {\n var newTopMargin = (windowHeight - boxHeight) / 2;\n newTopMargin = newTopMargin >= 0 ? newTopMargin : 0;\n this.element.style.marginTop = newTopMargin + 'px';\n }\n\n this.element.style.display = origDisplay;\n}; // toggle visibility of the box\n\n\nBox.prototype.toggle = function (show, animate) {\n show = typeof show === 'undefined' ? !this.visible : show;\n animate = typeof animate === 'undefined' ? true : animate; // is box already at desired visibility?\n\n if (show === this.visible) {\n return false;\n } // is box being animated?\n\n\n if (Animator.animated(this.element)) {\n return false;\n } // if box should be hidden but is not closable, bail.\n\n\n if (!show && !this.config.closable) {\n return false;\n } // set new visibility status\n\n\n this.visible = show; // calculate new styling rules\n\n this.setCustomBoxStyling(); // trigger event\n\n this.fireEvent('box.' + (show ? 'show' : 'hide'), [this]); // show or hide box using selected animation\n\n if (this.config.position === 'center') {\n this.overlay.classList.toggle('boxzilla-' + this.id + '-overlay');\n\n if (animate) {\n Animator.toggle(this.overlay, 'fade');\n } else {\n this.overlay.style.display = show ? '' : 'none';\n }\n }\n\n if (animate) {\n Animator.toggle(this.element, this.config.animation, function () {\n if (this.visible) {\n return;\n }\n\n this.contentElement.innerHTML = this.contentElement.innerHTML + '';\n }.bind(this));\n } else {\n this.element.style.display = show ? '' : 'none';\n }\n\n return true;\n}; // show the box\n\n\nBox.prototype.show = function (animate) {\n return this.toggle(true, animate);\n}; // hide the box\n\n\nBox.prototype.hide = function (animate) {\n return this.toggle(false, animate);\n}; // calculate trigger height\n\n\nBox.prototype.calculateTriggerHeight = function () {\n var triggerHeight = 0;\n\n if (this.config.trigger) {\n if (this.config.trigger.method === 'element') {\n var triggerElement = document.body.querySelector(this.config.trigger.value);\n\n if (triggerElement) {\n var offset = triggerElement.getBoundingClientRect();\n triggerHeight = offset.top;\n }\n } else if (this.config.trigger.method === 'percentage') {\n triggerHeight = this.config.trigger.value / 100 * getDocumentHeight();\n }\n }\n\n return triggerHeight;\n};\n\nBox.prototype.fits = function () {\n if (!this.config.screenWidthCondition || !this.config.screenWidthCondition.value) {\n return true;\n }\n\n switch (this.config.screenWidthCondition.condition) {\n case 'larger':\n return window.innerWidth > this.config.screenWidthCondition.value;\n\n case 'smaller':\n return window.innerWidth < this.config.screenWidthCondition.value;\n } // meh.. condition should be \"smaller\" or \"larger\", just return true.\n\n\n return true;\n};\n\nBox.prototype.onResize = function () {\n this.triggerHeight = this.calculateTriggerHeight();\n this.setCustomBoxStyling();\n}; // is this box enabled?\n\n\nBox.prototype.mayAutoShow = function () {\n if (this.dismissed) {\n return false;\n } // check if box fits on given minimum screen width\n\n\n if (!this.fits()) {\n return false;\n } // if trigger empty or error in calculating triggerHeight, return false\n\n\n if (!this.config.trigger) {\n return false;\n } // rely on cookie value (show if not set, don't show if set)\n\n\n return !this.cookieSet;\n};\n\nBox.prototype.mayRehide = function () {\n return this.config.rehide && this.triggered;\n};\n\nBox.prototype.isCookieSet = function () {\n // always show on test mode or when no auto-trigger is configured\n if (this.config.testMode || !this.config.trigger) {\n return false;\n } // if either cookie is null or trigger & dismiss are both falsey, don't bother checking.\n\n\n if (!this.config.cookie || !this.config.cookie.triggered && !this.config.cookie.dismissed) {\n return false;\n }\n\n return document.cookie.replace(new RegExp('(?:(?:^|.*;)\\\\s*' + 'boxzilla_box_' + this.id + '\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$'), '$1') === 'true';\n}; // set cookie that disables automatically showing the box\n\n\nBox.prototype.setCookie = function (hours) {\n var expiryDate = new Date();\n expiryDate.setHours(expiryDate.getHours() + hours);\n document.cookie = 'boxzilla_box_' + this.id + '=true; expires=' + expiryDate.toUTCString() + '; path=/';\n};\n\nBox.prototype.trigger = function () {\n var shown = this.show();\n\n if (!shown) {\n return;\n }\n\n this.triggered = true;\n\n if (this.config.cookie && this.config.cookie.triggered) {\n this.setCookie(this.config.cookie.triggered);\n }\n};\n/**\n * Dismisses the box and optionally sets a cookie.\n * @param animate\n * @returns {boolean}\n */\n\n\nBox.prototype.dismiss = function (animate) {\n // only dismiss box if it's currently open.\n if (!this.visible) {\n return false;\n } // hide box element\n\n\n this.hide(animate); // set cookie\n\n if (this.config.cookie && this.config.cookie.dismissed) {\n this.setCookie(this.config.cookie.dismissed);\n }\n\n this.dismissed = true;\n this.fireEvent('box.dismiss', [this]);\n return true;\n};\n\nmodule.exports = Box;\n\n},{\"./animator.js\":1}],3:[function(require,module,exports){\n\"use strict\";\n\nvar Box = require('./box.js');\n\nvar throttle = require('./util.js').throttle;\n\nvar styles = require('./styles.js');\n\nvar ExitIntent = require('./triggers/exit-intent.js');\n\nvar Scroll = require('./triggers/scroll.js');\n\nvar Pageviews = require('./triggers/pageviews.js');\n\nvar Time = require('./triggers/time.js');\n\nvar initialised = false;\nvar boxes = [];\nvar listeners = {};\n\nfunction onKeyUp(evt) {\n if (evt.key === 'Escape' || evt.key === 'Esc') {\n dismiss();\n }\n}\n\nfunction recalculateHeights() {\n boxes.forEach(function (box) {\n return box.onResize();\n });\n}\n\nfunction onElementClick(evt) {\n // bubble up to or element\n var el = evt.target;\n\n for (var i = 0; i <= 3; i++) {\n if (!el || el.tagName === 'A' || el.tagName === 'AREA') {\n break;\n }\n\n el = el.parentElement;\n }\n\n if (!el || el.tagName !== 'A' && el.tagName !== 'AREA' || !el.href) {\n return;\n }\n\n var match = el.href.match(/[#&]boxzilla-(.+)/i);\n\n if (match && match.length > 1) {\n toggle(match[1]);\n }\n}\n\nfunction trigger(event, args) {\n listeners[event] && listeners[event].forEach(function (f) {\n return f.apply(null, args);\n });\n}\n\nfunction on(event, fn) {\n listeners[event] = listeners[event] || [];\n listeners[event].push(fn);\n}\n\nfunction off(event, fn) {\n listeners[event] && listeners[event].filter(function (f) {\n return f !== fn;\n });\n} // initialise & add event listeners\n\n\nfunction init() {\n if (initialised) {\n return;\n } // insert styles into DOM\n\n\n var styleElement = document.createElement('style');\n styleElement.innerHTML = styles;\n document.head.appendChild(styleElement); // init triggers\n\n ExitIntent(boxes);\n Pageviews(boxes);\n Scroll(boxes);\n Time(boxes);\n document.body.addEventListener('click', onElementClick, true);\n window.addEventListener('resize', throttle(recalculateHeights));\n window.addEventListener('load', recalculateHeights);\n document.addEventListener('keyup', onKeyUp);\n trigger('ready');\n initialised = true; // ensure this function doesn't run again\n}\n\nfunction create(id, opts) {\n // preserve backwards compat for minimumScreenWidth option\n if (typeof opts.minimumScreenWidth !== 'undefined') {\n opts.screenWidthCondition = {\n condition: 'larger',\n value: opts.minimumScreenWidth\n };\n }\n\n id = String(id);\n var box = new Box(id, opts, trigger);\n boxes.push(box);\n return box;\n}\n\nfunction get(id) {\n id = String(id);\n\n for (var i = 0; i < boxes.length; i++) {\n if (boxes[i].id === id) {\n return boxes[i];\n }\n }\n\n throw new Error('No box exists with ID ' + id);\n} // dismiss a single box (or all by omitting id param)\n\n\nfunction dismiss(id, animate) {\n if (id) {\n get(id).dismiss(animate);\n } else {\n boxes.forEach(function (box) {\n return box.dismiss(animate);\n });\n }\n}\n\nfunction hide(id, animate) {\n if (id) {\n get(id).hide(animate);\n } else {\n boxes.forEach(function (box) {\n return box.hide(animate);\n });\n }\n}\n\nfunction show(id, animate) {\n if (id) {\n get(id).show(animate);\n } else {\n boxes.forEach(function (box) {\n return box.show(animate);\n });\n }\n}\n\nfunction toggle(id, animate) {\n if (id) {\n get(id).toggle(animate);\n } else {\n boxes.forEach(function (box) {\n return box.toggle(animate);\n });\n }\n} // expose boxzilla object\n\n\nvar Boxzilla = {\n off: off,\n on: on,\n get: get,\n init: init,\n create: create,\n trigger: trigger,\n show: show,\n hide: hide,\n dismiss: dismiss,\n toggle: toggle,\n boxes: boxes\n};\nwindow.Boxzilla = Boxzilla;\n\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = Boxzilla;\n}\n\n},{\"./box.js\":2,\"./styles.js\":4,\"./triggers/exit-intent.js\":6,\"./triggers/pageviews.js\":7,\"./triggers/scroll.js\":8,\"./triggers/time.js\":9,\"./util.js\":10}],4:[function(require,module,exports){\n\"use strict\";\n\nvar styles = \"#boxzilla-overlay,.boxzilla-overlay{position:fixed;background:rgba(0,0,0,.65);width:100%;height:100%;left:0;top:0;z-index:10000}.boxzilla-center-container{position:fixed;top:0;left:0;right:0;height:0;text-align:center;z-index:11000;line-height:0}.boxzilla-center-container .boxzilla{display:inline-block;text-align:left;position:relative;line-height:normal}.boxzilla{position:fixed;z-index:12000;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:#fff;padding:25px}.boxzilla.boxzilla-top-left{top:0;left:0}.boxzilla.boxzilla-top-right{top:0;right:0}.boxzilla.boxzilla-bottom-left{bottom:0;left:0}.boxzilla.boxzilla-bottom-right{bottom:0;right:0}.boxzilla-content>:first-child{margin-top:0;padding-top:0}.boxzilla-content>:last-child{margin-bottom:0;padding-bottom:0}.boxzilla-close-icon{position:absolute;right:0;top:0;text-align:center;padding:6px;cursor:pointer;-webkit-appearance:none;font-size:28px;font-weight:700;line-height:20px;color:#000;opacity:.5}.boxzilla-close-icon:focus,.boxzilla-close-icon:hover{opacity:.8}\";\nmodule.exports = styles;\n\n},{}],5:[function(require,module,exports){\n\"use strict\";\n\nvar Timer = function Timer() {\n this.time = 0;\n this.interval = 0;\n};\n\nTimer.prototype.tick = function () {\n this.time++;\n};\n\nTimer.prototype.start = function () {\n if (!this.interval) {\n this.interval = window.setInterval(this.tick.bind(this), 1000);\n }\n};\n\nTimer.prototype.stop = function () {\n if (this.interval) {\n window.clearInterval(this.interval);\n this.interval = 0;\n }\n};\n\nmodule.exports = Timer;\n\n},{}],6:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function (boxes) {\n var timeout = null;\n var touchStart = {};\n\n function trigger() {\n document.documentElement.removeEventListener('mouseleave', onMouseLeave);\n document.documentElement.removeEventListener('mouseenter', onMouseEnter);\n document.documentElement.removeEventListener('click', clearTimeout);\n window.removeEventListener('touchstart', onTouchStart);\n window.removeEventListener('touchend', onTouchEnd); // show boxes with exit intent trigger\n\n boxes.forEach(function (box) {\n if (box.mayAutoShow() && box.config.trigger.method === 'exit_intent') {\n box.trigger();\n }\n });\n }\n\n function clearTimeout() {\n if (timeout === null) {\n return;\n }\n\n window.clearTimeout(timeout);\n timeout = null;\n }\n\n function onMouseEnter() {\n clearTimeout();\n }\n\n function getAddressBarY() {\n if (document.documentMode || /Edge\\//.test(navigator.userAgent)) {\n return 5;\n }\n\n return 0;\n }\n\n function onMouseLeave(evt) {\n clearTimeout(); // did mouse leave at top of window?\n // add small exception space in the top-right corner\n\n if (evt.clientY <= getAddressBarY() && evt.clientX < 0.8 * window.innerWidth) {\n timeout = window.setTimeout(trigger, 600);\n }\n }\n\n function onTouchStart() {\n clearTimeout();\n touchStart = {\n timestamp: performance.now(),\n scrollY: window.scrollY,\n windowHeight: window.innerHeight\n };\n }\n\n function onTouchEnd(evt) {\n clearTimeout(); // did address bar appear?\n\n if (window.innerHeight > touchStart.windowHeight) {\n return;\n } // allow a tiny tiny margin for error, to not fire on clicks\n\n\n if (window.scrollY + 20 > touchStart.scrollY) {\n return;\n }\n\n if (performance.now() - touchStart.timestamp > 300) {\n return;\n }\n\n if (['A', 'INPUT', 'BUTTON'].indexOf(evt.target.tagName) > -1) {\n return;\n }\n\n timeout = window.setTimeout(trigger, 800);\n }\n\n window.addEventListener('touchstart', onTouchStart);\n window.addEventListener('touchend', onTouchEnd);\n document.documentElement.addEventListener('mouseenter', onMouseEnter);\n document.documentElement.addEventListener('mouseleave', onMouseLeave);\n document.documentElement.addEventListener('click', clearTimeout);\n};\n\n},{}],7:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function (boxes) {\n var pageviews;\n\n try {\n pageviews = sessionStorage.getItem('boxzilla_pageviews') || 0;\n sessionStorage.setItem('boxzilla_pageviews', ++pageviews);\n } catch (e) {\n pageviews = 0;\n }\n\n window.setTimeout(function () {\n boxes.forEach(function (box) {\n if (box.config.trigger.method === 'pageviews' && pageviews > box.config.trigger.value && box.mayAutoShow()) {\n box.trigger();\n }\n });\n }, 1000);\n};\n\n},{}],8:[function(require,module,exports){\n\"use strict\";\n\nvar throttle = require('../util.js').throttle;\n\nmodule.exports = function (boxes) {\n // check triggerHeight criteria for all boxes\n function checkHeightCriteria() {\n var scrollY = window.hasOwnProperty('pageYOffset') ? window.pageYOffset : window.scrollTop;\n scrollY = scrollY + window.innerHeight * 0.9;\n boxes.forEach(function (box) {\n if (!box.mayAutoShow() || box.triggerHeight <= 0) {\n return;\n }\n\n if (scrollY > box.triggerHeight) {\n box.trigger();\n } else if (box.mayRehide() && scrollY < box.triggerHeight - 5) {\n // if box may auto-hide and scrollY is less than triggerHeight (with small margin of error), hide box\n box.hide();\n }\n });\n }\n\n window.addEventListener('touchstart', throttle(checkHeightCriteria), true);\n window.addEventListener('scroll', throttle(checkHeightCriteria), true);\n};\n\n},{\"../util.js\":10}],9:[function(require,module,exports){\n\"use strict\";\n\nvar Timer = require('../timer.js');\n\nmodule.exports = function (boxes) {\n var siteTimer = new Timer();\n var pageTimer = new Timer();\n var timers = {\n start: function start() {\n try {\n var sessionTime = parseInt(sessionStorage.getItem('boxzilla_timer'));\n\n if (sessionTime) {\n siteTimer.time = sessionTime;\n }\n } catch (e) {}\n\n siteTimer.start();\n pageTimer.start();\n },\n stop: function stop() {\n sessionStorage.setItem('boxzilla_timer', siteTimer.time);\n siteTimer.stop();\n pageTimer.stop();\n }\n }; // start timers\n\n timers.start(); // stop timers when leaving page or switching to other tab\n\n document.addEventListener('visibilitychange', function () {\n document.hidden ? timers.stop() : timers.start();\n });\n window.addEventListener('beforeunload', function () {\n timers.stop();\n });\n window.setInterval(function () {\n boxes.forEach(function (box) {\n if (box.config.trigger.method === 'time_on_site' && siteTimer.time > box.config.trigger.value && box.mayAutoShow()) {\n box.trigger();\n } else if (box.config.trigger.method === 'time_on_page' && pageTimer.time > box.config.trigger.value && box.mayAutoShow()) {\n box.trigger();\n }\n });\n }, 1000);\n};\n\n},{\"../timer.js\":5}],10:[function(require,module,exports){\n\"use strict\";\n\nfunction throttle(fn, threshold, scope) {\n threshold || (threshold = 800);\n var last;\n var deferTimer;\n return function () {\n var context = scope || this;\n var now = +new Date();\n var args = arguments;\n\n if (last && now < last + threshold) {\n // hold on to it\n clearTimeout(deferTimer);\n deferTimer = setTimeout(function () {\n last = now;\n fn.apply(context, args);\n }, threshold);\n } else {\n last = now;\n fn.apply(context, args);\n }\n };\n}\n\nmodule.exports = {\n throttle: throttle\n};\n\n},{}],11:[function(require,module,exports){\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n(function () {\n var Boxzilla = require('./boxzilla/boxzilla.js');\n\n var options = window.boxzilla_options; // helper function for setting CSS styles\n\n function css(element, styles) {\n if (styles.background_color) {\n element.style.background = styles.background_color;\n }\n\n if (styles.color) {\n element.style.color = styles.color;\n }\n\n if (styles.border_color) {\n element.style.borderColor = styles.border_color;\n }\n\n if (styles.border_width) {\n element.style.borderWidth = parseInt(styles.border_width) + 'px';\n }\n\n if (styles.border_style) {\n element.style.borderStyle = styles.border_style;\n }\n\n if (styles.width) {\n element.style.maxWidth = parseInt(styles.width) + 'px';\n }\n }\n\n function createBoxesFromConfig() {\n // failsafe against including script twice.\n if (options.inited) {\n return;\n } // create boxes from options\n\n\n for (var key in options.boxes) {\n // get opts\n var boxOpts = options.boxes[key];\n boxOpts.testMode = isLoggedIn && options.testMode; // find box content element, bail if not found\n\n var boxContentElement = document.getElementById('boxzilla-box-' + boxOpts.id + '-content');\n\n if (!boxContentElement) {\n continue;\n } // use element as content option\n\n\n boxOpts.content = boxContentElement; // create box\n\n var box = Boxzilla.create(boxOpts.id, boxOpts); // add box slug to box element as classname\n\n box.element.className = box.element.className + ' boxzilla-' + boxOpts.post.slug; // add custom css to box\n\n css(box.element, boxOpts.css);\n\n try {\n box.element.firstChild.firstChild.className += ' first-child';\n box.element.firstChild.lastChild.className += ' last-child';\n } catch (e) {} // maybe show box right away\n\n\n if (box.fits() && locationHashRefersBox(box)) {\n box.show();\n }\n } // set flag to prevent initialising twice\n\n\n options.inited = true; // trigger \"done\" event.\n\n Boxzilla.trigger('done'); // maybe open box with MC4WP form in it\n\n maybeOpenMailChimpForWordPressBox();\n }\n\n function locationHashRefersBox(box) {\n if (!window.location.hash || window.location.hash.length === 0) {\n return false;\n } // parse \"boxzilla-{id}\" from location hash\n\n\n var match = window.location.hash.match(/[#&](boxzilla-\\d+)/);\n\n if (!match || _typeof(match) !== 'object' || match.length < 2) {\n return false;\n }\n\n var elementId = match[1];\n\n if (elementId === box.element.id) {\n return true;\n } else if (box.element.querySelector('#' + elementId)) {\n return true;\n }\n\n return false;\n }\n\n function maybeOpenMailChimpForWordPressBox() {\n if ((_typeof(window.mc4wp_forms_config) !== 'object' || !window.mc4wp_forms_config.submitted_form) && _typeof(window.mc4wp_submitted_form) !== 'object') {\n return;\n }\n\n var form = window.mc4wp_submitted_form || window.mc4wp_forms_config.submitted_form;\n var selector = '#' + form.element_id;\n Boxzilla.boxes.forEach(function (box) {\n if (box.element.querySelector(selector)) {\n box.show();\n }\n });\n } // print message when test mode is enabled\n\n\n var isLoggedIn = document.body && document.body.className && document.body.className.indexOf('logged-in') > -1;\n\n if (isLoggedIn && options.testMode) {\n console.log('Boxzilla: Test mode is enabled. Please disable test mode if you\\'re done testing.');\n } // init boxzilla\n\n\n Boxzilla.init(); // on window.load, create DOM elements for boxes\n\n window.addEventListener('load', createBoxesFromConfig);\n})();\n\n},{\"./boxzilla/boxzilla.js\":3}]},{},[11]);\n; })();"],"names":["require","undefined","r","e","n","t","o","i","f","c","u","a","Error","code","p","exports","call","length","1","module","duration","css","element","styles","property","hasOwnProperty","style","animate","targetStyles","fn","to","current","last","Date","initialStyles","window","getComputedStyle","currentStyles","propSteps","parseFloat","tick","step","newValue","_property","timeSinceLastTick","done","increment","requestAnimationFrame","toggle","animation","callbackFn","cleanup","removeAttribute","setAttribute","clone","getAttribute","display","nowVisible","visibleStyles","hiddenStyles","offsetLeft","cloneNode","properties","value","newObject","initObjectProperties","object","copyObjectProperties","isFinite","height","clientRect","getBoundingClientRect","overflowY","opacity","animated","2","defaults","rehide","content","cookie","icon","screenWidthCondition","position","testMode","trigger","closable","Animator","Box","id","config","fireEvent","this","obj1","obj2","attrname","_attrname","obj3","merge","overlay","document","createElement","classList","add","body","appendChild","visible","dismissed","triggered","triggerHeight","calculateTriggerHeight","cookieSet","isCookieSet","contentElement","closeIcon","dom","events","prototype","box","addEventListener","evt","preventDefault","dismiss","target","tagName","setCookie","x","offsetX","y","offsetY","rect","left","right","top","bottom","wrapper","className","innerHTML","setCustomBoxStyling","origDisplay","maxHeight","windowHeight","innerHeight","boxHeight","clientHeight","newTopMargin","marginTop","show","bind","hide","html","method","triggerElement","querySelector","documentElement","Math","max","scrollHeight","offsetHeight","fits","condition","innerWidth","onResize","mayAutoShow","mayRehide","replace","RegExp","hours","expiryDate","setHours","getHours","toUTCString","./animator.js","3","throttle","ExitIntent","Scroll","Pageviews","Time","initialised","boxes","listeners","onKeyUp","key","recalculateHeights","forEach","onElementClick","el","parentElement","href","match","event","args","apply","get","String","Boxzilla","off","filter","on","push","init","styleElement","head","create","opts","minimumScreenWidth","./box.js","./styles.js","./triggers/exit-intent.js","./triggers/pageviews.js","./triggers/scroll.js","./triggers/time.js","./util.js","4","5","Timer","time","interval","start","setInterval","stop","clearInterval","6","timeout","touchStart","removeEventListener","onMouseLeave","onMouseEnter","clearTimeout","onTouchStart","onTouchEnd","clientY","documentMode","test","navigator","userAgent","clientX","setTimeout","timestamp","performance","now","scrollY","indexOf","7","pageviews","sessionStorage","getItem","setItem","8","checkHeightCriteria","pageYOffset","scrollTop","../util.js","9","siteTimer","pageTimer","timers","sessionTime","parseInt","hidden","../timer.js","10","threshold","scope","deferTimer","context","arguments","11","_typeof","obj","Symbol","iterator","constructor","options","isLoggedIn","boxzilla_options","console","log","inited","boxOpts","boxContentElement","getElementById","post","slug","background_color","background","color","border_color","borderColor","border_width","borderWidth","border_style","borderStyle","width","maxWidth","firstChild","lastChild","location","hash","elementId","locationHashRefersBox","mc4wp_forms_config","submitted_form","mc4wp_submitted_form","selector","element_id","maybeOpenMailChimpForWordPressBox","./boxzilla/boxzilla.js"],"mappings":"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"}