(function(root, factory) { if (typeof define === 'function' && define.amd) { define(factory); } else if (typeof exports === 'object') { module.exports = factory(require, exports, module); } else { root.exitpopup = factory(); } }(this, function(require, exports, module) { return function exitpopup(el, custom_config) { "use strict"; var config = custom_config || {}, aggressive = config.aggressive || false, sensitivity = setDefault(config.sensitivity, 20), timer = setDefault(config.timer, 1000), delay = setDefault(config.delay, 0), callback = config.callback || function() {}, cookieExpire = setDefaultCookieExpire(config.cookieExpire) || '', cookieDomain = config.cookieDomain ? ';domain=' + config.cookieDomain : '', cookieName = config.cookieName ? config.cookieName : 'wma_viewedExitPopup_new', sitewide = config.sitewide === true ? ';path=/' : '', _delayTimer = null, _html = document.documentElement; function setDefault(_property, _default) { return typeof _property === 'undefined' ? _default : _property; } function setDefaultCookieExpire(days) { var ms = days * 24 * 60 * 60 * 1000; var date = new Date(); date.setTime(date.getTime() + ms); return "; expires=" + date.toUTCString(); } setTimeout(attachexitpopup, timer); function attachexitpopup() { if (isDisabled()) { return; } _html.addEventListener('mouseleave', handleMouseleave); _html.addEventListener('mouseenter', handleMouseenter); _html.addEventListener('keydown', handleKeydown); } function handleMouseleave(e) { if (e.clientY > sensitivity) { return; } _delayTimer = setTimeout(fire, delay); } function handleMouseenter() { if (_delayTimer) { clearTimeout(_delayTimer); _delayTimer = null; } } var disableKeydown = false; function handleKeydown(e) { if (disableKeydown) { return; } else if (!e.metaKey || e.keyCode !== 76) { return; } disableKeydown = true; _delayTimer = setTimeout(fire, delay); } function checkCookieValue(cookieName, value) { return parseCookies()[cookieName] === value; } function parseCookies() { var cookies = document.cookie.split('; '); var ret = {}; for (var i = cookies.length - 1; i >= 0; i--) { var el = cookies[i].split('='); ret[el[0]] = el[1]; } return ret; } function isDisabled() { return checkCookieValue(cookieName, 'true') && !aggressive; } function fire(modal_id, fire_anyway) { if(modal_id == undefined) modal_id = 'exitpopup-modal-window-1'; if(fire_anyway == undefined) fire_anyway = false; if (isDisabled() && !fire_anyway) { return; } if (el) { jQuery(document).ready(function($) { $('#'+modal_id).modal('show'); $('#'+modal_id).on('show.bs.modal', function (event) { callback(); }); }); } disable(); } function disable(custom_options) { var options = custom_options || {}; if (typeof options.cookieExpire !== 'undefined') { cookieExpire = setDefaultCookieExpire(options.cookieExpire); } if (options.sitewide === true) { sitewide = ';path=/'; } if (typeof options.cookieDomain !== 'undefined') { cookieDomain = ';domain=' + options.cookieDomain; } if (typeof options.cookieName !== 'undefined') { cookieName = options.cookieName; } document.cookie = cookieName + '=true' + cookieExpire + cookieDomain + sitewide; _html.removeEventListener('mouseleave', handleMouseleave); _html.removeEventListener('mouseenter', handleMouseenter); _html.removeEventListener('keydown', handleKeydown); } return { fire: fire, disable: disable, isDisabled: isDisabled }; }; }));