UNPKG

@funnelenvy-npm/fe-dev-utils

Version:

Helper function to build client side A/B tests

66 lines (65 loc) 2.07 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const cookie_manager_1 = __importDefault(require("../cookie-manager")); const detectIE_1 = __importDefault(require("./detectIE")); const exitIntent = ({ callback, cookieExp = 0, delay = 5, showOnDelay = false, }) => { let shown = false; const cookieName = 'exitIntent_shown'; const cookieOverride = 'crometrics-debug'; const checkCookie = () => { if (cookieExp <= 0) { cookie_manager_1.default.del({ name: cookieName }); return false; } if (window.location.search.includes(cookieOverride)) { return false; } if (cookie_manager_1.default.get({ name: cookieName }) === 'true') { return true; } return false; }; const triggerIntent = () => { if (shown) return; shown = true; cookie_manager_1.default.set({ name: cookieName, value: 'true', optDays: cookieExp, }); callback(); }; const loadEvents = () => { const handleMouseOut = (e) => { e = e || window.event; if (e.clientY <= 5 || ((0, detectIE_1.default)() && e.clientY <= 50)) { triggerIntent(); } }; if (showOnDelay) { setTimeout(() => { triggerIntent(); }, delay * 1000); } document.addEventListener('mouseout', handleMouseOut, false); }; const domReady = (callback) => { if (document.readyState === 'interactive' || document.readyState === 'complete') { callback(); } else { document.addEventListener('DOMContentLoaded', callback); } }; domReady(() => { if (checkCookie()) { return; } loadEvents(); }); }; exports.default = exitIntent;