{"version":3,"sources":["fetchFacade.js","miListener.js","eventDecorator.js","eventDecorator.events.js"],"names":["CONFUSEDCORE","AJAX","Fetchfacade","error","options","xhr","textStatus","errorThrown","handleResponse","response","CustomerCookieId","window","dataLayer","push","ccid","passCCIDToDataLayer","redirect","document","location","wrappedResponse","Status","requiresAuthentication","Authenticated","reload","userIsLoggedIn","success","Data","post","url","data","timeoutInterval","async","undefined","dataType","controller","AbortController","signal","setTimeout","abort","fetch","method","headers","body","JSON","stringify","then","ok","Error","json","text","catch","err","name","timeout","message","finally","complete","postAuthenticated","this","MI","MiListener","fetchFacade","MI_EVENT_URL","MI_PAGEVIEW_URL","MI_NEWSESSION_URL","doPost","miUrl","miObject","callback","errorCallback","protocol","host","postPageView","eventType","eventInfo","EventType","EventInfo","postEvent","pageView","pageName","page","postLogSession","setMI_URL","MI_URL","CONFUSEDCMS","eventDecorator","console","log","ns","EventDefinition","selector","eventName","functionName","params","EventDefinitionList","Add","eventDefinition","constructor","ProcessAll","length","i","pop","ProcessFunction","ProcessEvent","w","getFunctionByName","context","namespaces","split","func","fn","addEventListener","event","element","target","parentElement","matches","apply","CSSCONSTANTS","events","functions","e","LogToConsole","miListener","miClickEvent","attributeData","attr","attributes","startsWith","substring","replace","m","toUpperCase","value","category","label","miClickCategory","miClickLabel","miEvent","hasOwnProperty","match","getStaticMiInfo","ga","gaClickCategory","gaClickLabel","querySelector","classList","contains"],"mappings":"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","file":"cms2-mi.min.js","sourcesContent":["var CONFUSEDCORE = CONFUSEDCORE || {};\r\nCONFUSEDCORE.AJAX = CONFUSEDCORE.AJAX || {};\r\n\r\nCONFUSEDCORE.AJAX.Fetchfacade = (function() {\r\n\r\n function userIsLoggedIn(response) {\r\n if (response && response.Authenticated === false) {\r\n window.location.reload();\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n function error(options, xhr, textStatus, errorThrown) {\r\n if (!options) { return; }\r\n\r\n if (options.error) {\r\n options.error(xhr, textStatus, errorThrown);\r\n }\r\n }\r\n\r\n // Capturing CCID from postPageView response and pushing to the dataLayer for GA \r\n const passCCIDToDataLayer = (response) => {\r\n if ('CustomerCookieId' in response) {\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({ 'ccid': response.CustomerCookieId });\r\n }\r\n };\r\n \r\n function handleResponse(response, options) {\r\n\r\n if (response.CustomerCookieId && response.CustomerCookieId != \"\") {\r\n passCCIDToDataLayer(response);\r\n }\r\n\r\n if (response.redirect) {\r\n document.location = response.redirect;\r\n return;\r\n }\r\n\r\n if (options.wrappedResponse) {\r\n if (!response || response.Status !== 'ok') {\r\n error(options, null, 'error', 'Response status not ok');\r\n return;\r\n }\r\n\r\n if (options.requiresAuthentication) {\r\n if (!userIsLoggedIn(response)) {\r\n return;\r\n }\r\n }\r\n\r\n if (options.success) {\r\n options.success(response.Data);\r\n }\r\n } else {\r\n options.success(response);\r\n }\r\n }\r\n\r\n\r\n return {\r\n post: function(url, options, data) {\r\n if (!options.timeoutInterval) {\r\n options.timeoutInterval = 5000; // default to 5s\r\n }\r\n\r\n options.async = options.async === null || options.async === undefined ? true : options.async;\r\n options.dataType = options.dataType || 'json';\r\n options.wrappedResponse = options.wrappedResponse === undefined ? true : options.wrappedResponse;\r\n\r\n let controller = new AbortController();\r\n let signal = controller.signal;\r\n setTimeout(() => controller.abort(), options.timeoutInterval);\r\n\r\n fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(data),\r\n signal: signal\r\n }).then(response => {\r\n if (!response.ok) throw new Error('Network response was not ok');\r\n return options.dataType === 'json' ? response.json() : response.text();\r\n }).then(data => {\r\n handleResponse(data, options);\r\n }).catch(err => {\r\n if (err.name === 'AbortError') {\r\n if (options.timeout) {\r\n options.timeout();\r\n }\r\n } else {\r\n error(options, null, 'error', err.message);\r\n }\r\n }).finally(() => {\r\n if (typeof options.complete !== 'undefined') {\r\n options.complete();\r\n }\r\n });\r\n },\r\n\r\n postAuthenticated: function(url, options, data) {\r\n if (!options) {\r\n options = {};\r\n }\r\n options.requiresAuthentication = true;\r\n this.post(url, options, data);\r\n }\r\n };\r\n\r\n})();","/*Version added for use only by CMSv2 */\r\n\r\nvar CONFUSEDCORE = CONFUSEDCORE || {};\r\nCONFUSEDCORE.MI = CONFUSEDCORE.MI || {};\r\n\r\n/*\r\n@desc: a listener for management information events\r\n\t\tthis listener will run itself\r\n */\r\nCONFUSEDCORE.MI.MiListener = (function (fetchFacade) {\r\n\tvar options = {\r\n\t\t//The URL to post the MI event to\r\n\t\tMI_EVENT_URL: 'miv2/event',\r\n\t\tMI_PAGEVIEW_URL: 'miv2/pageview',\r\n\t\tMI_NEWSESSION_URL: 'miv2/newsession',\r\n\t};\r\n\r\n\tfunction doPost(miUrl, miObject, callback, errorCallback) {\r\n\t\tvar url = window.location.protocol + '//' + window.location.host + '/' + miUrl;\r\n\t\tfetchFacade.post(\r\n\t\t\turl,\r\n\t\t\t{\r\n\t\t\t\tsuccess: function () {\r\n\t\t\t\t\tif (callback) {\r\n\t\t\t\t\t\tcallback();\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\terror: function () {\r\n\t\t\t\t\tif (errorCallback) {\r\n\t\t\t\t\t\terrorCallback();\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\tmiObject\r\n\t\t);\r\n\t}\r\n\r\n\tfunction postEvent(eventType, eventInfo, callback, errorCallback) {\r\n\t\tdoPost(\r\n\t\t\toptions.MI_EVENT_URL,\r\n\t\t\t{\r\n\t\t\t\tEventType: eventType,\r\n\t\t\t\tEventInfo: eventInfo,\r\n\t\t\t},\r\n\t\t\tcallback,\r\n\t\t\terrorCallback\r\n\t\t);\r\n\t}\r\n\r\n\tfunction postPageView(eventType, eventInfo, callback, errorCallback) {\r\n\t\tdoPost(\r\n\t\t\toptions.MI_PAGEVIEW_URL,\r\n\t\t\t{\r\n\t\t\t\tEventType: eventType,\r\n\t\t\t\tEventInfo: eventInfo,\r\n\t\t\t},\r\n\t\t\tcallback,\r\n\t\t\terrorCallback\r\n\t\t);\r\n\t}\r\n\r\n\tfunction pageView(pageName) {\r\n\t\tpostPageView('LogPageView', { page: pageName });\r\n\t}\r\n\r\n\tfunction postLogSession(eventType, eventInfo, callback, errorCallback) {\r\n\t\tdoPost(\r\n\t\t\toptions.MI_NEWSESSION_URL,\r\n\t\t\t{\r\n\t\t\t\tEventType: eventType,\r\n\t\t\t\tEventInfo: eventInfo,\r\n\t\t\t},\r\n\t\t\tcallback,\r\n\t\t\terrorCallback\r\n\t\t);\r\n\t}\r\n\r\n\treturn {\r\n\t\t/*\r\n @desc: post the MI event\r\n @param: eventType: the event type\r\n @param: eventInfo: the event information object\r\n */\r\n\t\tpostEvent: postEvent,\r\n\t\tpostPageView: postPageView,\r\n\t\tpageView: pageView,\r\n\t\tpostLogSession: postLogSession,\r\n\r\n\t\t/*\r\n @desc: override the default MI URL\r\n @param: url: the new url\r\n @default: mi/event\r\n */\r\n\t\tsetMI_URL: function (url) {\r\n\t\t\toptions.MI_URL = url;\r\n\t\t},\r\n\t};\r\n})(CONFUSEDCORE.AJAX.Fetchfacade);\r\n","var CONFUSEDCMS = CONFUSEDCMS || {};\r\nCONFUSEDCMS.eventDecorator = CONFUSEDCMS.eventDecorator || {};\r\n\r\nif (!window.console) {\r\n\twindow.console = { log: function () {} };\r\n}\r\n\r\n// EventDefinition\r\n(function (ns) {\r\n\t'use strict';\r\n\r\n\tns.EventDefinition = function (selector, eventName, functionName, params) {\r\n\t\tif (!(this instanceof ns.EventDefinition)) {\r\n\t\t\treturn new ns.EventDefinition(selector, eventName, functionName, params);\r\n\t\t}\r\n\t\tthis.selector = selector;\r\n\t\tthis.eventName = eventName;\r\n\t\tthis.functionName = functionName;\r\n\t\tthis.params = params;\r\n\r\n\t\treturn this;\r\n\t};\r\n})(CONFUSEDCMS.eventDecorator);\r\n\r\n// EventDefinitionList\r\n(function (ns) {\r\n\t'use strict';\r\n\tns.EventDefinitionList = [];\r\n\tns.EventDefinitionList.Add = function (eventDefinition) {\r\n\t\tif (eventDefinition.constructor === ns.EventDefinition) {\r\n\t\t\tthis.push(eventDefinition);\r\n\t\t}\r\n\t};\r\n\tns.EventDefinitionList.ProcessAll = function () {\r\n\t\t// careful here, we are slightly mixing metaphors! had to use a variable cos length property changes each iteration!\r\n\t\tvar length = ns.EventDefinitionList.length;\r\n\t\tfor (var i = 0; i < length; i++) {\r\n\t\t\tvar eventDefinition = ns.EventDefinitionList.pop();\r\n\t\t\tif (eventDefinition.selector === '') {\r\n\t\t\t\tns.ProcessFunction(eventDefinition);\r\n\t\t\t} else {\r\n\t\t\t\tns.ProcessEvent(eventDefinition);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n})(CONFUSEDCMS.eventDecorator);\r\n\r\n// Process a single event definition by finding the function and wiring up the event to fire it\r\n(function (ns, w) {\r\n\t'use strict';\r\n\r\n\t// functions in name spaces cannot be directly referenced, so\r\n\t// we need to dig the function out of the context (usually the window object)\r\n\tfunction getFunctionByName(functionName, context) {\r\n\t\tvar namespaces = functionName.split('.');\r\n\t\tvar func = namespaces.pop();\r\n\t\tfor (var i = 0; i < namespaces.length; i++) {\r\n\t\t\tcontext = context[namespaces[i]];\r\n\t\t}\r\n\t\treturn context[func];\r\n\t}\r\n\r\n\tns.ProcessEvent = function (eventDefinition) {\r\n\t\t// first get the function out of the supplied namespace\r\n\t\tvar fn = getFunctionByName(eventDefinition.functionName, w);\r\n\t\tif (typeof fn !== 'function') {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// Now wire up the function to the requested event name, for a given selector, passing in any require parameters.\r\n document.body.addEventListener(eventDefinition.eventName, function(event) {\r\n let element = event.target;\r\n const parentElement = element.parentElement; // Get the direct parent element\r\n\r\n // Check if the clicked element itself matches the selector\r\n if (element.matches(eventDefinition.selector)) {\r\n fn.apply(element, eventDefinition.params);\r\n }\r\n // Otherwise, check if the parent element matches the selector\r\n else if (parentElement && parentElement.matches(eventDefinition.selector)) {\r\n fn.apply(parentElement, eventDefinition.params);\r\n }\r\n });\r\n\r\n\t\treturn true;\r\n\t};\r\n\r\n\tns.ProcessFunction = function (eventDefinition) {\r\n\t\t// first get the function out of the supplied namespace\r\n\t\tvar fn = getFunctionByName(eventDefinition.functionName, w);\r\n\r\n\t\tif (typeof fn !== 'function') {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tfn.apply(fn, eventDefinition.params);\r\n\t\treturn true;\r\n\t};\r\n})(CONFUSEDCMS.eventDecorator, window);\r\n","var CONFUSEDCMS = CONFUSEDCMS || {},\r\n\tCSSCONSTANTS = CSSCONSTANTS || {};\r\nCONFUSEDCMS.eventDecorator = CONFUSEDCMS.eventDecorator || {};\r\nCONFUSEDCMS.eventDecorator.events = CONFUSEDCMS.eventDecorator.events || {};\r\nCONFUSEDCMS.eventDecorator.functions = CONFUSEDCMS.eventDecorator.functions || {};\r\n\r\n// Don't load any of thesse events until the document is loaded as some have external dependancies\r\ndocument.addEventListener('DOMContentLoaded', function() {\r\n\t// The console logger is a diagnostic event that simnply echos out the supplied message to the browsers console.\r\n\t(function (ns) {\r\n\t\t'use strict';\r\n\r\n\t\t// Log click to Console sample EventDecorator Event, this is used for unit test\r\n\t\tns.LogToConsole = function (message) {\r\n\t\t\twindow.console.log(message);\r\n\t\t};\r\n\r\n\t\t// If you have a function that has no external dependancies, add it here...\r\n\t})(CONFUSEDCMS.eventDecorator.functions);\r\n\r\n\t// 21cMI & GA\r\n\t(function (ns, miListener) {\r\n\t\t'use strict';\r\n\r\n\t\t// Function to gather event data from static data attributes on the DOM\r\n\t\tfunction getStaticMiInfo(data) {\r\n\t\t\tvar eventInfo = {},\r\n\t\t\t\tlabel,\r\n\t\t\t\ttrimmedLabel;\r\n\r\n\t\t\tfor (label in data) {\r\n\t\t\t\t// eslint-disable-next-line no-prototype-builtins\r\n\t\t\t\tif (!data.hasOwnProperty(label)) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (label === 'miEventType' || label === 'miClickLabel') {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//only care about MI data, providing it's not the event type\r\n\t\t\t\tif (label.match(/^mi/)) {\r\n\t\t\t\t\t//remove the leading 'mi' and copy data across to hash\r\n\t\t\t\t\ttrimmedLabel = label.replace('mi', '');\r\n\t\t\t\t\teventInfo[trimmedLabel] = data[label];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn eventInfo;\r\n\t\t}\r\n\r\n\t\tns.miClickEvent = function () {\r\n\t\t\ttry {\r\n\t\t\t\t//var attributeData = $(this).data();\r\n var attributeData = {};\r\n for (var attr of this.attributes) {\r\n if (attr.name.startsWith('data-')) {\r\n // Convert \"data-example-name\" to \"exampleName\"\r\n var propName = attr.name.substring(5).replace(/-./g, (m) => m[1].toUpperCase());\r\n attributeData[propName] = attr.value;\r\n }\r\n }\r\n\r\n\t\t\t\tvar category = 'not-set',\r\n\t\t\t\t\tlabel = 'not-set';\r\n\t\t\t\tif (attributeData.miClickCategory !== '') {\r\n\t\t\t\t\tcategory = attributeData.miClickCategory;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (attributeData.miClickLabel !== '') {\r\n\t\t\t\t\tlabel = attributeData.miClickLabel;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar miEvent = 'CMS' + '::' + category + '::' + label + '::' + 'click';\r\n\t\t\t\tmiListener.postEvent(miEvent, getStaticMiInfo(attributeData));\r\n\r\n\t\t\t\tif (!window.ga) {\r\n\t\t\t\t\tconsole.log(\r\n\t\t\t\t\t\t'Error calling Google Analytics in CONFUSEDCMS.eventDecorator.events.miClickEvent: gaq undefined'\r\n\t\t\t\t\t);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\twindow.ga('send', attributeData.gaClickCategory, 'click', attributeData.gaClickLabel);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tconsole.log('Error calling MI Click Event in CONFUSEDCMS.eventDecorator.events.miClickEvent: ' + e);\r\n\t\t\t}\r\n\t\t};\r\n\t})(CONFUSEDCMS.eventDecorator.events, CONFUSEDCORE.MI.MiListener);\r\n\r\n\t// If you have a function that has external dependancies, add it here in its own closure\r\n\t// with the dependancy passed in as an argument (such as in data layer above)\r\n\r\n\t// Process Static Events\r\n\t(function (e) {\r\n\t\t//var htmlDoc = jQuery('#html');\r\n var htmlDoc = document.querySelector('#html');\r\n\t\tif (!htmlDoc.classList.contains('sitecore-editor')) {\r\n\t\t\te.EventDefinitionList.Add(\r\n\t\t\t\tnew e.EventDefinition(\r\n\t\t\t\t\t'[data-mi-event-type=\"click\"]',\r\n\t\t\t\t\t'click',\r\n\t\t\t\t\t'CONFUSEDCMS.eventDecorator.events.miClickEvent'\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t\te.EventDefinitionList.ProcessAll();\r\n\t\t}\r\n\t})(CONFUSEDCMS.eventDecorator);\r\n});\r\n"]}