var ctaTracking = { config: { category: "cta_buttons", loggingOnly: false }, helpers: {} } ctaTracking.data = { 'last_section': 'none', 'scroll_depth': 0, 'url_path': document.location.pathname } ctaTracking.helpers.getITM = function(elem) { return /itm=([^&#]*)/.exec(elem.href)[1]; } ctaTracking.helpers.getInnerText = function(elem) { return elem.innerText.trim(); } /* *** CONFIG: List of elements for single click tracking */ ctaTracking.config.floatingCTAElems = [ // EH { brand: 'eh', cssSelector: '.header.sticky a', subcategory: 'floating_buttons', targetID: 'fixed_navigation' }, { brand: 'eh', cssSelector: '.fixed-navigation a[href*="#top"]', subcategory: 'floating_buttons', targetID: 'fixed_navigation' }, { brand: 'eh', cssSelector: '.fixed-navigation a[href*="profile/registration"]', subcategory: 'floating_buttons', targetID: 'fixed_navigation' }, { brand: 'eh', cssSelector: '.sticky-navigation a[href*="profile/registration"]', subcategory: 'floating_buttons', targetID: 'fixed_navigation' }, // PS { brand: 'ps', cssSelector: '.header.sticky a[href*="#psg-regform"', subcategory: 'floating_buttons', targetID: 'fixed_navigation' }, { brand: 'ps', cssSelector: 'nav.navigation a.button[href*="profile/registration"]', subcategory: 'floating_buttons', targetID: 'fixed_navigation' }, { brand: 'ps', cssSelector: '.header-sticky a[href*="#top"', subcategory: 'floating_buttons', targetID: 'fixed_navigation' }, { brand: 'ps', cssSelector: 'nav .pg-register-button', subcategory: 'floating_buttons', targetID: 'fixed_navigation' }, // EP { brand: 'ep', cssSelector: '.header.sticky a', subcategory: 'floating_buttons', targetID: 'fixed_navigation' }, { brand: 'ep', cssSelector: '#meta-navigation__registration', subcategory: 'floating_buttons', targetID: 'fixed_navigation' }, { brand: 'ep', cssSelector: '#sticky-header a[href*="#top"]', subcategory: 'floating_buttons', targetID: 'fixed_navigation' } ]; ctaTracking.config.staticCTAElems = [ // EH { brand: 'eh', path: '/free-dating/', cssSelector: '.wp-block-group__inner-container a[href*="#top"]', subcategory: 'static_buttons', targetID: 'cta_button', cd2: 'HOW FREE DATING WORKS WITH EHARMONY', cd3: ctaTracking.helpers.getInnerText }, { brand: 'eh', path: '/tour/', cssSelector: '.hentry__inner a[href*="itm="]', subcategory: 'static_buttons', targetID: 'cta_button', cd2: ctaTracking.helpers.getITM, cd3: ctaTracking.helpers.getInnerText }, { brand: 'eh', path: '/dating-advice/', cssSelector: '.hentry__content.page__content a[href*="itm="]', subcategory: 'static_buttons', targetID: 'cta_button', cd2: ctaTracking.helpers.getITM, cd3: ctaTracking.helpers.getInnerText }, // PS { brand: 'ps', path: '/tour/', cssSelector: '.hentry__inner a[href*="itm="]', subcategory: 'static_buttons', targetID: 'cta_button', cd2: ctaTracking.helpers.getITM, cd3: ctaTracking.helpers.getInnerText }, { brand: 'ps', path: '/ratgeber/', cssSelector: '.hentry__content.page__content.hentry__content--is-content.page__content--is-content > div:nth-child(3) a', subcategory: 'static_buttons', targetID: 'cta_button_1', cd2: 'Lasst uns Dating neu starten', cd3: ctaTracking.helpers.getInnerText }, { brand: 'ps', path: '/ratgeber/', cssSelector: '.hentry__content.page__content.hentry__content--is-content.page__content--is-content > div:nth-child(6) a', subcategory: 'static_buttons', targetID: 'cta_button_2', cd2: 'Lasst uns Dating neu starten', cd3: ctaTracking.helpers.getInnerText }, // EP { brand: 'ep', path: '/tour/', cssSelector: '.hentry__inner a[href*="itm="]', subcategory: 'static_buttons', targetID: 'cta_button', cd2: ctaTracking.helpers.getITM, cd3: ctaTracking.helpers.getInnerText }, { brand: 'ep', path: '/tour/', cssSelector: '#sidebar a[href*="itm="]', subcategory: 'static_buttons', targetID: 'cta_button', cd2: ctaTracking.helpers.getITM, cd3: ctaTracking.helpers.getInnerText }, { brand: 'ep', path: '/magazin/', cssSelector: '#sidebar a', subcategory: 'static_buttons', targetID: 'cta_button', cd2: ctaTracking.helpers.getITM, cd3: ctaTracking.helpers.getInnerText }, { brand: 'ep', path: '/', cssSelector: '.wp-block-psg-slider a[href*="#psg-regform"]', subcategory: 'static_buttons', targetID: 'cta_button', cd2: 'So funktioniert die Partnersuche mit ElitePartner.', cd3: ctaTracking.helpers.getInnerText }, { brand: 'ep', path: '/', cssSelector: 'main > div:nth-of-type(5) a[href*="#psg-regform"]', subcategory: 'static_buttons', targetID: 'cta_button', cd2: 'Lerne ElitePartner-Singles kennen!', cd3: ctaTracking.helpers.getInnerText }, { brand: 'ep', path: '/', cssSelector: 'main > div:nth-of-type(6) a[href*="#psg-regform"]', subcategory: 'static_buttons', targetID: 'cta_button', cd2: 'Unsere Erfolgsgeschichten', cd3: ctaTracking.helpers.getInnerText } ]; ctaTracking.config.observedSections = [ { cssSelector: 'h1, h2', sectionName: ctaTracking.helpers.getInnerText } ]; /* *** Helper: Ledger for tracking status of elements */ ctaTracking.trackingStatus = { setTracked: function(trType, elem) { ctaTracking.trackingStatus.trackedElems[trType].push(elem); }, isTracked: function(trType, elem) { return (ctaTracking.trackingStatus.trackedElems[trType].indexOf(elem) > -1); }, trackedElems: { view: [], click: [], scroll: [] } } /* *** Helper: Add click listener for floating CTA*/ ctaTracking.setFloatingCTAClickListener = function (elemSelector, subcategory, targetId) { var elems = document.querySelectorAll(elemSelector); elems.forEach(function(elem) { elem.addEventListener('click', function () { ctaTracking.trackEvent(subcategory, targetId, 'click', ctaTracking.data['last_section'], ctaTracking.data['scroll_depth'], elem); }) }); } /* *** Helper: Add click listener for static CTA */ ctaTracking.setStaticCTAClickListener = function (elemSelector, subcategory, targetId, cd2, cd3) { var elems = document.querySelectorAll(elemSelector); elems.forEach(function(elem) { elem.addEventListener('click', function () { var cd2_var; var cd3_var; if (typeof cd2 === 'function') { cd2_var = cd2(elem); } else { cd2_var = cd2 || ''; } if (typeof cd3 === 'function') { cd3_var = cd3(elem); } else { cd3_var = cd3 || ''; } ctaTracking.trackEvent(subcategory, targetId, 'click', cd2_var, cd3_var, elem); }) }); } /* *** Helper: Observe sections */ ctaTracking.observeSections = function (selector, sectionName) { var domElems = document.querySelectorAll(selector); domElems.forEach(function(elem) { new IntersectionObserver(function(entry) { if(entry[0].isIntersecting) { if (typeof sectionName === 'function') { ctaTracking.data.last_section = sectionName(elem); } else { ctaTracking.data.last_section = sectionName; } } }, { root: null, rootMargin: '0px', threshold: 0.5 }).observe(elem); }); } /* *** Helper: Track event */ ctaTracking.trackEvent = function(subcategory, targetID, action, cd2, cd3, elem) { if (!ctaTracking.trackingStatus.isTracked(action, elem)) { /* Log only */ if (ctaTracking.config.loggingOnly) { console.group("Event tracked:") console.log("%c-- category:\t\t" + ctaTracking.config.category, "color:green"); console.log("%c-- subcategory:\t\t" + subcategory, "color:green"); console.log("%c-- action:\t\t\t" + action, "color:green"); console.log("%c-- target_id:\t\t" + targetID, "color:green"); console.log("%c-- cd2:\t\t" + cd2, "color:green"); console.log("%c-- cd3:\t" + cd3, "color:green"); console.groupEnd() } else { document.dispatchEvent(new CustomEvent("pegLogger-logTmsEvents", { 'detail': { 'category': ctaTracking.config.category, 'subcategory': subcategory, 'targetId': targetID, 'action': action, 'cd1': '', 'cd2': cd2, 'cd3': cd3 } })); } ctaTracking.trackingStatus.setTracked(action, elem); } } /* Set up initial listeners */ ctaTracking.init = (function () { /* Set up single click listeners for floating CTAs */ ctaTracking.config.floatingCTAElems.forEach(function (elem) { if (elem.brand == 'eh') { ctaTracking.setFloatingCTAClickListener(elem.cssSelector, elem.subcategory, elem.targetID); } }); /* Set up single click listeners for static CTAs */ ctaTracking.config.staticCTAElems.forEach(function (elem) { if (elem.path == ctaTracking.data['url_path'] && elem.brand == 'eh') { ctaTracking.setStaticCTAClickListener(elem.cssSelector, elem.subcategory, elem.targetID, elem.cd2, elem.cd3); } }); /* Set up obververs to update last seen section */ if(!!window.IntersectionObserver) { ctaTracking.config.observedSections.forEach(function (elem) { ctaTracking.observeSections(elem.cssSelector, elem.sectionName); }) } /* Scroll depth */ window.onscroll = function() { var scrolledRoundedPercent; var scrolled = document.body.scrollTop || document.documentElement.scrollTop; var scrolledDecimal = (scrolled / (document.documentElement.scrollHeight - document.documentElement.clientHeight)) * 100; scrolledRoundedPercent = Math.floor(scrolledDecimal); if (Math.round(scrolledDecimal * 10) == 100) { scrolledRoundedPercent = 100; } ctaTracking.data.scroll_depth = scrolledRoundedPercent.toString(); } })();