{"version":3,"sources":["fetchFacade.js","miListener.js","eventDecorator.js","eventDecorator.events.js"],"names":["CONFUSEDCORE","AJAX","Fetchfacade","error","options","xhr","textStatus","errorThrown","handleResponse","response","redirect","document","location","wrappedResponse","Status","requiresAuthentication","Authenticated","window","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","push","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 function handleResponse(response, options) {\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 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"]}